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 myproject
CLI , 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.