Bagikan melalui


Proyek

Proyek adalah kumpulan sumber daya yang menentukan konfigurasi simpul. Proyek berisi spesifikasi. Ketika node dimulai, simpul dikonfigurasi dengan memproses dan menjalankan urutan spesifikasi.

Azure CycleCloud menggunakan proyek untuk mengelola aplikasi terkluster, seperti penjadwal batch. Dalam CycleCloud HPCPack, proyek adalah hn spesifikasi dan cn spesifikasi yang menentukan konfigurasi dan resep untuk headnode dan komputenode HPCPack.

Di bawah ini adalah definisi simpul parsial. Simpul docker-registry akan menjalankan tiga spesifikasi: spesifikasi ikat dari proyek okta versi 1.3.0, serta spesifikasi inti dan registri dari proyek docker versi 2.0.0:

[[node docker-registry]]
    Locker = base-storage
    [[[cluster-init okta:bind:1.3.0]]]
    [[[cluster-init docker:core:2.0.0]]]
    [[[cluster-init docker:registry:2.0.0]]]

Tag berikutnya adalah nomor versi proyek.

[[[cluster-init <project>:<spec>:<project version>]]]

Loker adalah referensi ke kontainer dan kredensial akun penyimpanan. Simpul memiliki loker default, sehingga atribut ini tidak benar-benar diperlukan.

Azure CycleCloud menggunakan singkatan untuk akun penyimpanan, sehingga https://mystorage.blob.core.windows.net/mycontainer dapat ditulis sebagai az://mystorage/mycontainer.

Simpul akan mengunduh setiap proyek yang dirujuknya dari loker menggunakan alat pogo:

pogo get az://mystorage/mycontainer/projects/okta/1.3.0/bind

Jika proyek didefinisikan pada simpul tetapi tidak ada di lokasi penyimpanan yang diharapkan, simpul akan melaporkan Software Installation Failure ke CycleCloud.

CycleCloud memiliki proyek internal yang berjalan secara default pada semua simpul untuk melakukan volume khusus dan penanganan jaringan serta mengatur komunikasi ke CycleCloud. Proyek internal ini dicerminkan ke loker secara otomatis.

Pengguna bertanggung jawab untuk mencerminkan proyek tambahan apa pun ke loker. CycleCloud CLI memiliki metode untuk menyusun proyek:

cyclecloud project init myproject

dan cermin:

cyclecloud project init mylocker

proyek ke loker.

Spesifikasi terdiri dari skrip python, shell, atau powershell.

Membuat Proyek Baru

Untuk membuat proyek baru, gunakan perintah cyclecloud project init myprojectCLI , di mana myproject adalah nama proyek yang ingin Anda buat. Ini akan membuat proyek yang disebut "myproject", dengan satu spesifikasi bernama "default" yang dapat Anda ubah. Pohon direktori akan dibuat dengan file kerangka yang akan Anda amandemen untuk menyertakan informasi Anda sendiri.

Struktur Direktori

Direktori berikut akan dibuat oleh perintah proyek:

      \myproject
          ├── project.ini
          ├── blobs
          ├── templates
          ├── specs
          │   ├── default
          │     └── cluster-init
          │        ├── scripts
          │        ├── files
          │        └── tests
          │     └── chef
          │         ├── site-cookbooks
          │         ├── data_bag
          │         └── roles

Direktori templat akan menyimpan templat kluster Anda, sementara spesifikasi akan berisi spesifikasi yang menentukan proyek Anda. spesifikasi memiliki dua subdirektori: cluster-init dan koki kustom. cluster-init berisi direktori yang memiliki arti khusus, seperti direktori skrip (berisi skrip yang dijalankan dalam urutan leksikografis pada simpul), file (file data mentah untuk diletakkan pada simpul), dan pengujian (berisi pengujian yang akan dijalankan ketika kluster dimulai dalam mode pengujian).

Subdirektori koki kustom memiliki tiga direktori: buku masak situs (untuk definisi buku masak), data_bags (definisi databag), dan peran (file definisi peran koki).

project.ini

project.ini adalah file yang berisi semua metadata untuk proyek Anda. Ini dapat berisi:

Parameter Deskripsi
nama Nama proyek. Kata-kata harus dipisahkan dengan tanda hubung, misalnya order-66-2018
label Nama proyek. Nama panjang (dengan spasi) kluster untuk tujuan tampilan.
jenis Tiga opsi: penjadwal, aplikasi, <kosong>. Menentukan jenis proyek dan menghasilkan templat yang sesuai. Default: aplikasi
versi Format: x.x.x

Loker

Konten proyek disimpan dalam loker. Anda dapat mengunggah konten proyek Anda ke loker apa pun yang ditentukan dalam penginstalan CycleCloud Anda melalui perintah cyclecloud project upload (locker), di mana (loker) adalah nama loker penyimpanan cloud di penginstalan CycleCloud Anda. Loker ini akan ditetapkan sebagai target default. Atau, Anda dapat melihat loker apa yang tersedia untuk Anda dengan perintah cyclecloud locker list. Detail tentang loker tertentu dapat dilihat dengan cyclecloud locker show (locker).

Jika Anda menambahkan lebih dari satu loker, Anda dapat mengatur default Anda dengan cyclecloud project default_target (locker), maka cukup jalankan cyclecloud project upload. Anda juga dapat mengatur loker default global yang dapat dibagikan oleh proyek dengan perintah cyclecloud project default locker (locker) -global.

Catatan

Loker default akan disimpan dalam file konfigurasi cyclecloud (biasanya terletak di ~/.cycle/config.ini), bukan di project.ini. Ini dilakukan untuk memungkinkan project.ini dikontrol versi.

Mengunggah konten proyek Anda akan meng-zip direktori chef dan menyinkronkan chef dan cluster init ke loker target Anda. Ini akan disimpan di:

  • (loker)/projects/(project)/(version)/(spec_name)/cluster-init
  • (loker)/projects/(project)/(version)/(spec_name)/chef

Unduhan Blob

Gunakan project download untuk mengunduh semua blob yang direferensikan dalam project.ini ke direktori blob lokal Anda. Perintah menggunakan [locker] parameter dan akan mencoba mengunduh blob yang tercantum dalam project.ini dari loker ke penyimpanan lokal. Kesalahan akan dikembalikan jika file tidak dapat ditemukan.

Penyiapan Proyek

Spesifikasi

Saat membuat proyek baru, spesifikasi default tunggal ditentukan. Anda dapat menambahkan spesifikasi tambahan ke proyek Anda melalui cyclecloud project add_spec perintah .

Penerapan versi

Secara default, semua proyek memiliki versi 1.0.0. Anda dapat mengatur versi kustom saat mengembangkan dan menyebarkan proyek dengan mengatur version=x.y.z dalam file project.ini .

Misalnya, jika "locker_url" adalah "az://my-account/my-container/projects", proyek diberi nama "Order66", versinya adalah "1.6.9", dan spesifikasinya adalah "default", url Anda adalah:

  • az://my-account/my-container/projects/Order66/1.6.9/default/cluster-init
  • az://my-account/my-container/projects/Order66/1.6.9/default/chef

Blob

Ada dua jenis blob: blob proyek dan blob pengguna.

Blob Proyek

Blob Proyek adalah file biner yang disediakan oleh penulis proyek dengan asumsi bahwa mereka dapat didistribusikan (yaitu file biner untuk proyek sumber terbuka Anda secara hukum diizinkan untuk mendistribusikan ulang). Blob Proyek masuk ke direktori "blob" proyek, dan ketika diunggah ke loker, blob tersebut akan terletak di /project/blobs.

Untuk menambahkan blob ke proyek, tambahkan file ke project.iniAnda :

[[blobs optionalname]]
  Files = projectblob1.tgz, projectblob2.tgz, projectblob3.tgz

Beberapa blob dapat dipisahkan oleh koma. Anda juga dapat menentukan jalur relatif ke direktori blob proyek.

Blob Pengguna

Blob Pengguna adalah file biner yang tidak dapat didistribusikan ulang oleh penulis proyek secara hukum, seperti biner UGE. File-file ini tidak dipaketkan dengan proyek, tetapi sebaliknya harus dipentaskan ke loker secara manual. File akan terletak di /blobs/my-project/my-blob.tgz. Blob Pengguna tidak perlu ditentukan dalam project.ini.

Untuk mengunduh blob apa pun, gunakan jetpack download perintah dari CLI, atau jetpack_download sumber daya Chef. CycleCloud akan mencari blob pengguna terlebih dahulu. Jika file tersebut tidak ditemukan, blob tingkat proyek akan digunakan.

Catatan

Dimungkinkan untuk mengambil alih blob proyek dengan blob pengguna dengan nama yang sama.

Tentukan Proyek dalam Templat Kluster

Sintaks proyek memungkinkan Anda menentukan beberapa spesifikasi pada simpul Anda. Untuk menentukan proyek, gunakan yang berikut ini:

[[[cluster-init myspec]]]
  Project = myproject # inferred from name
  Version = x.y.z
  Spec = default  # (alternatively, you can name your own spec to be used here)
  Locker = default  # (optional, will use default locker for node)

Catatan

Nama yang ditentukan setelah 'spesifikasi' dapat berupa apa saja, tetapi dapat dan harus digunakan sebagai pintasan untuk menentukan beberapa > properti umum.

Anda juga dapat menerapkan beberapa spesifikasi ke simpul tertentu sebagai berikut:

[[node scheduler]]
  [[[cluster-init myspec]]]
  Project = myproject
  Version = x.y.z
  Spec = default  # (alternatively, you can name your own spec to be used here)
  Locker = default  # (optional, will use default locker for node)

[[[cluster-init otherspec]]]
Project = otherproject
Version = a.b.c
Spec = otherspec  # (optional)

Dengan memisahkan nama proyek, nama spesifikasi, dan versi dengan titik dua, CycleCloud dapat mengurai nilai-nilai tersebut ke dalam pengaturan yang sesuai Project/Version/Spec secara otomatis:

[[node scheduler]]
  AdditionalClusterInitSpecs = $ClusterInitSpecs
  [[[cluster-init myproject:myspec:x.y.z]]]
  [[[cluster-init otherproject:otherspec:a.b.c]]]

Spesifikasi juga dapat diwariskan di antara simpul. Misalnya, Anda dapat berbagi spesifikasi umum antara semua simpul, lalu menjalankan spesifikasi kustom pada node penjadwal:

[[node defaults]]
[[[cluster-init my-project:common:1.0.0]]]
Order = 2 # optional
[[node scheduler]]
[[[cluster-init my-project:scheduler:1.0.0]]]
Order = 1 # optional

[[nodearray execute]]
[[[cluster-init my-project:execute:1.0.0]]]
   Order = 1 # optional

Ini akan menerapkan common spesifikasi dan scheduler ke node penjadwal, sementara hanya menerapkan common spesifikasi dan execute ke nodearray eksekusi.

Secara default, spesifikasi akan dijalankan dalam urutan yang ditampilkan dalam templat, menjalankan spesifikasi yang diwariskan terlebih dahulu. Order adalah bilangan bulat opsional yang diatur ke default 1000, dan dapat digunakan untuk menentukan urutan spesifikasi.

Jika hanya satu nama yang ditentukan dalam [[[cluster-init]]] definisi, itu akan diasumsikan sebagai nama spesifikasi. Contohnya:

[[[cluster-init myspec]]]
Project = myproject
Version = 1.0.0

adalah pengaturan spesifikasi yang valid di mana Spec=myspec tersirat oleh nama.

run_list

Anda dapat menentukan runlist di tingkat proyek atau spesifikasi dalam project.ini Anda:

[spec scheduler]
run_list = role[a], recipe[b]

Ketika node menyertakan spesifikasi "penjadwal", run_list yang ditentukan akan secara otomatis ditambahkan ke runlist yang ditentukan sebelumnya. Misalnya, jika run_list saya yang didefinisikan di bawah [configuration] adalah run_list = recipe[test], runlist akhir adalah run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init].

Anda juga dapat menimpa runlist pada tingkat spesifikasi pada node. Ini akan menggantikan run_list apa pun yang disertakan dalam project.ini. Misalnya, jika kita mengubah definisi simpul menjadi yang berikut:

[cluster-init test-project:scheduler:1.0.0]
run_list = recipe[different-test]

Runlist yang ditentukan dalam proyek akan diabaikan, dan yang di atas akan digunakan sebagai gantinya. Daftar jalan akhir pada simpul kemudian akan menjadi run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init].

Catatan

runlist khusus untuk koki dan tidak berlaku sebaliknya.

Lokasi File

File koki zip akan diunduh selama fase bootstrapping startup node. Mereka diunduh ke $JETPACK_HOME/system/chef/tarballs dan di-unzip ke $JETPACK_HOME/system/chef/chef-repo/, dan digunakan saat menyambungkan node.

Catatan

Untuk menjalankan buku masak kustom, Anda HARUS menentukannya dalam run_list untuk simpul.

File cluster-init akan diunduh ke /mnt/cluster-init/(project)/(spec)/. Untuk "my-project" dan "my-spec", Anda akan melihat skrip, file, dan pengujian Anda yang terletak di /mnt/cluster-init/my-project/my-spec.

Menyinkronkan Proyek

Proyek CycleCloud dapat disinkronkan dari cermin ke dalam penyimpanan cloud lokal kluster. Atur atribut SourceLocker pada [cluster-init] bagian dalam templat Anda. Nama loker yang ditentukan akan digunakan sebagai sumber proyek, dan konten akan disinkronkan ke loker Anda pada awal kluster. Anda juga dapat menggunakan nama loker sebagai bagian pertama dari nama cluster-init. Misalnya, jika loker sumber adalah "cyclecloud", dua definisi berikut sama:

[cluster-init my-project:my-spect:1.2.3]
  SourceLocker=cyclecloud

[cluster-init cyclecloud/my-proect:my-spec:1.2.3]

Penyimpanan File Besar

Proyek mendukung file besar. Di tingkat atas proyek yang baru dibuat, Anda akan melihat direktori "blob" untuk file besar Anda (blob). Harap dicatat bahwa blob yang ditempatkan di direktori ini memiliki tujuan tertentu, dan akan bertindak berbeda dari item dalam direktori "file".

Item dalam direktori "blob" bersifat spesifikasi dan versi independen: apa pun dalam "blob" dapat dibagikan antara spesifikasi atau versi proyek. Sebagai contoh, alat penginstal untuk program yang jarang berubah dapat disimpan dalam "blob" dan direferensikan dalam project.iniAnda. Saat Anda melakukan iterasi pada versi proyek Anda, file tunggal tersebut tetap sama dan hanya disalin ke penyimpanan cloud Anda sekali, yang menghemat biaya transfer dan penyimpanan.

Untuk menambahkan blob, cukup letakkan file ke direktori "blob" dan edit project.ini Anda untuk mereferensikan file tersebut:

[blobs]
  Files=big_file1.tgz

Saat Anda menggunakan project upload perintah , semua blob yang dirujuk dalam project.ini akan ditransfer ke penyimpanan cloud.

File Log

File log yang dihasilkan saat menjalankan cluster-init terletak di $JETPACK_HOME/logs/cluster-init/(project)/(spec).

Jalankan File

Ketika skrip cluster-init berhasil dijalankan, file ditempatkan di /mnt/cluster-init/.run/(project)/(spec) untuk memastikan file tidak dijalankan lagi pada konverge berikutnya. Jika Anda ingin menjalankan skrip lagi, hapus file yang sesuai di direktori ini.

Direktori Skrip

Saat CycleCloud menjalankan skrip di direktori skrip, CycleCloud akan menambahkan variabel lingkungan ke jalur dan nama spesifikasi dan direktori proyek:

CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH

Di linux, proyek bernama "test-project" dengan spesifikasi "default" akan memiliki jalur sebagai berikut:

CYCLECLOUD_PROJECT_NAME = test-project
CYCLECLOUD_PROJECT_PATH = /mnt/cluster-init/test-project
CYCLECLOUD_SPEC_NAME = default
CYCLECLOUD_SPEC_PATH = /mnt/cluster-init/test-project/default

Jalankan Skrip Saja

Untuk menjalankan HANYA skrip cluster-init:

jetpack converge --cluster-init

Output dari perintah keduanya akan masuk ke STDOUT serta jetpack.log. Setiap skrip juga akan mencatat outputnya ke:

      $JETPACK_HOME/logs/cluster-init/(project)/(spec)/scripts/(script.sh).out

Koki kustom dan Spesifikasi Yang Dapat Dikomposisi

Setiap spesifikasi memiliki direktori koki di dalamnya. Sebelum bertemu, setiap spesifikasi tidak akan ditarik dan diekstraksi ke dalam chef-repo lokal, menggantikan buku masak, peran, dan tas data yang ada dengan nama yang sama. Ini dilakukan dalam urutan spesifikasi ditentukan, jadi dalam kasus tabrakan penamaan, spesifikasi terakhir yang ditentukan akan selalu menang.

unduhan jetpack

Untuk mengunduh blob dalam skrip cluster-init, gunakan perintah jetpack download (filename) untuk menariknya dari direktori blob. Menjalankan perintah ini dari skrip cluster-init akan menentukan proyek dan URL dasar untuk Anda. Untuk menggunakannya dalam konteks non-cluster-init, Anda harus menentukan proyek (lihat --help untuk informasi selengkapnya).

Untuk pengguna chef, jetpack_download LWRP telah dibuat:

jetpack_download "big-file1.tgz" do
  project "my-project"
  end

Di chef, lokasi unduhan default adalah #{node[:jetpack][:downloads]}. Untuk mengubah tujuan file, gunakan yang berikut ini:

jetpack_download "foo.tgz" do
  project "my-project"
  dest "/tmp/download.tgz"
end

Saat digunakan dalam koki, Anda harus menentukan proyek.