Templat Kluster
Azure CycleCloud menggunakan templat untuk menentukan konfigurasi kluster. Sejumlah templat disertakan dalam CycleCloud secara default dan daftar lengkap templat yang didukung tersedia di GitHub. Anda bisa membuat templat baru atau Anda bisa mengkustomisasi templat yang sudah ada. Misalnya, Anda mungkin ingin menyesuaikan templat yang ada untuk memanfaatkan Spot VM, atau Anda mungkin ingin menambahkan VPC untuk memperluas jaringan Anda sendiri.
Notasi Konfigurasi
Semua templat kluster Azure CycleCloud memiliki opsi untuk memiliki satu atau beberapa bagian [[[konfigurasi]]] yang termasuk dalam node atau nodearray. Bagian ini menentukan opsi konfigurasi perangkat lunak tentang simpul yang dimulai oleh CycleCloud. Notasi bertitik digunakan untuk menentukan atribut yang ingin Anda konfigurasi:
[[node scheduler]]
[[[configuration]]]
cycle_server.admin.name = poweruser
cycle_server.admin.pass = super_secret
cycle_server.http_port = 8080
cycle_server.https_port = 8443
Anda juga dapat menentukan bagian konfigurasi menggunakan prefix
notasi untuk menyimpan pengetikan.
Konfigurasi yang sama juga dapat ditulis sebagai:
[[node scheduler]]
[[[configuration cycle_server]]]
admin.name = poweruser
admin.pass = super_secret
http_port = 8080
https_port = 8443
Node/nodearray juga dapat berisi beberapa bagian konfigurasi jika diperlukan:
[[node scheduler]]
[[[configuration]]]
run_list = role[sge_scheduler_node]
[[[configuration cycle_server.admin]]]
name = poweruser
pass = super_secret
Parameter Templat Kluster
Templat kluster dapat berisi parameter yang mengubah nilai bagian tertentu dari kluster tanpa harus memodifikasi templat itu sendiri. Ini sangat berguna dalam kasus di mana banyak kluster serupa dengan perbedaan kecil diinginkan seperti menyebarkan lingkungan pengembangan dan produksi. Sintaks untuk menentukan parameter dalam templat kluster adalah mengawali variabel dengan '$'. Contoh templat dasar (tidak berfungsi) dengan beberapa parameter bisa terlihat seperti:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
Templat ini mendefinisikan dua parameter: $machine_type
dan $slots
. Dengan menggunakan templat ini, Anda dapat menentukan file teks yang berisi nilai parameter di lingkungan dev dan prod. File parameter dapat dalam format JSON atau format file properti Java:
# dev-params.json
{
"machine_type": "H16r",
"slots": 2
}
# prod-params.properties
machine_type = Standard_D4v3
slots = 8
Ini akan membuat file JSON yang berisi parameter untuk dev dan file .properties yang berisi nilai untuk produksi.
Catatan
Akhiran nama file untuk file parameter Anda penting! Jika menggunakan JSON, file Anda harus diberi nama foo.json
. Jika menggunakan properti Java, file Anda harus diakhir dengan .properties
. File parameter yang salah bernama tidak akan diimpor dengan benar.
Sekarang Anda dapat mengimpor templat menggunakan file parameter untuk mengisi bagian yang hilang:
cyclecloud import_cluster gridengine-dev -f template.txt -p dev-params.json -c gridengine
cyclecloud import_cluster gridengine-prod -f template.txt -p prod-params.properties -c gridengine
Dimungkinkan juga untuk menentukan beberapa atau semua parameter dalam templat kluster itu sendiri:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
[parameters]
[[parameter machine_type]]
DefaultValue = Standard_D4v3
[[parameter slots]]
DefaultValue = 2
Nilai default untuk setiap parameter didefinisikan dalam templat (kami menggunakan nilai 'dev' sebagai default).
Sekarang dimungkinkan untuk mengimpor templat tanpa file parameter, dan nilai 'dev' akan digunakan secara otomatis. Ketika saatnya untuk membuat kluster 'prod', Anda dapat menggunakan file prod-params.properties untuk menimpa nilai yang ditentukan di dalam file templat itu sendiri.
Catatan
Nama parameter dapat mencakup huruf, angka, dan garis bawah apa pun.
Referensi parameter dalam templat dapat mengambil salah satu dari dua bentuk:
$param
: Menggunakan nilai parameter tunggal bernama param
${expr}
: Mengevaluasi expr
dalam konteks semua parameter, yang memungkinkan Anda menghitung nilai dinamis. Contohnya:
Attribute = ${(a > b ? a : b) * 100}
Ini akan mengambil lebih besar dari dua parameter, a
dan b
, dan mengalikannya dengan 100.
Ekspresi ditafsirkan dan dievaluasi sesuai dengan spesifikasi bahasa ClassAd.
Jika referensi parameter ada dengan sendirinya, nilai parameter digunakan, yang mendukung jenis non-string seperti boolean, bilangan bulat, dan struktur berlapis seperti daftar.
Namun, jika referensi disematkan dalam teks lain, nilainya dikonversi dan disertakan dalam string.
Misalnya, misalkan param
didefinisikan sebagai 456
dan dirujuk di dua tempat:
- Attribute1 = $param
- Attribute2 = 123$param
Nilai akan Attribute1
menjadi angka 456
, tetapi nilainya Attribute2
adalah string "123456"
. Perhatikan bahwa identik dengan $param
, yang memungkinkan Anda menyematkan referensi parameter dalam situasi yang ${param}
lebih kompleks:
- Attribute3 = 123$param789
- Attribute4 = 123${param}789
Attribute3
akan mencari parameter bernama param789
, tetapi Attribute4 akan menggunakan nilai param
untuk mendapatkan "123456789"
.
Jenis Mesin
Azure CycleCloud mendukung beberapa jenis komputer melalui MachineType
atribut . Ini akan mencoba untuk memperoleh kapasitas dalam urutan yang tercantum.
Spesifikasi Init Kluster
Aplikasi web Azure CycleCloud memungkinkan pengguna untuk memilih spesifikasi proyek cluster-init saat membuat kluster baru. Spesifikasi proyek disiapkan dalam templat kluster:
[parameter ClusterInitSpecs]
Label = Cluster-Init
Description = Cluster init specs to apply to nodes
ParameterType = Cloud.ClusterInitSpecs
[cluster demo]
[[node defaults]]
AdditionalClusterInitSpecs = $ClusterInitSpecs
[[[cluster-init myproject:myspec:1.0.0]]]
Setelah parameter ini ditambahkan ke templat kluster Anda, pengguna Anda dapat menggunakan pemilih file untuk memilih spesifikasi proyek yang sesuai saat membuat kluster baru.
Virtual Machines Spot
Untuk mengurangi biaya beban kerja, Anda dapat mengatur Interruptible = true
. Ini akan menandai instans Anda sebagai Spot, dan akan menggunakan kapasitas surplus jika tersedia. Penting untuk dicatat bahwa instans ini tidak selalu tersedia dan dapat didahului kapan saja, yang berarti instans tersebut tidak selalu sesuai untuk beban kerja Anda.
Secara default, pengaturan Interruptible
ke true akan menggunakan instans spot dengan harga maksimum yang diatur ke -1; ini berarti instans tidak akan dikeluarkan berdasarkan harga. Harga instans akan menjadi harga saat ini untuk Spot atau harga untuk instans standar, mana saja yang lebih rendah, selama ada kapasitas dan kuota yang tersedia. Jika Anda ingin menetapkan harga maksimum kustom, gunakan MaxPrice
atribut pada node atau nodearray yang diinginkan.
[cluster demo]
[[nodearray execute]]
Interruptible = true
MaxPrice = 0.2
Tabel Pencarian
Anda dapat memiliki satu referensi parameter lainnya dan menghitung nilai tertentu dengan tabel pencarian. Misalnya, Anda memiliki parameter untuk digunakan gambar, dengan dua pilihan dalam hal ini:
[[parameter MachineImage]]
Label = Image
DefaultValue = image-1000
Description = Ubuntu 22.04
Config.Plugin = pico.control.AutoCompleteDropdown
[[[list Config.Entries]]]
Name = image-1000
Label = Ubuntu 20.04
[[[list Config.Entries]]]
Name = image-2000
Label = Ubuntu 22.04
Anda juga bisa mendapatkan versi OS dari gambar yang dipilih dan menggunakannya untuk konfigurasi lain dengan membuat parameter yang nilainya adalah tabel nilai pencarian:
[[parameter AmiLookup]]
ParameterType = hidden
[[[record DefaultValue]]]
image-1000 = Ubuntu 20.04
image-2000 = Ubuntu 22.04
Perhatikan bahwa ini disembunyikan, sehingga tidak muncul di UI.
Anda bisa mendapatkan versi OS yang digunakan untuk gambar yang dipilih di tempat lain dalam definisi kluster:
[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}
Integrasi GUI
Menentukan parameter dalam templat kluster memungkinkan seseorang untuk memanfaatkan GUI Azure CycleCloud. Sebagai contoh, saat menentukan parameter, atribut berikut dapat digunakan untuk membantu dalam pembuatan GUI:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
[parameters]
[[parameter machine_type]]
DefaultValue = Standard_D4v3
Label = Machine Type
Description = MachineType to use for the Grid Engine scheduler node
ParameterType = Cloud.MachineType
[[parameter slots]]
DefaultValue = 2
Description = The number of slots for Grid Engine to report for the node
Atribut "Label" dan "Description" disertakan yang akan muncul di GUI serta atribut "ParameterType" opsional. "ParameterType" memungkinkan elemen UI kustom ditampilkan. Dalam contoh di atas nilai "Cloud.MachineType" akan menampilkan dropdown yang berisi semua jenis komputer yang tersedia. Nilai ParameterType lainnya adalah:
Jenis Parameter | Deskripsi |
---|---|
Cloud.MachineType | Menampilkan menu drop-down yang berisi semua jenis komputer yang tersedia. |
Cloud.Credentials | Menampilkan menu drop-down yang berisi semua kredensial yang tersedia. |
Cloud.Region | Menampilkan menu drop-down yang berisi semua wilayah yang tersedia. |
Dukungan Server Chef
Azure CycleCloud mendukung ChefServer.
Buat file chefserver.json
dan tambahkan kredensial Anda.
ValidationKey
sesuai dengan file validation.pem untuk server chef Anda. Anda juga harus membuktikan validation_client_name
apakah Anda telah mengubahnya dari nilai default "chef-validator":
{
"AdType" : "Cloud.Locker",
"ValidationKey" : "YOURVALIDATION.PEMHERE",
"ValidationClientName" : "chef-validator",
"Credentials" : "default",
"Location" : "https://mychefserver",
"ChefRepoType" : "chefserver",
"LockerType" : "chefrepo",
"Name" : "chefrepo",
"AccountId" : "default",
"Shared" : false
}
Selanjutnya, letakkan file di direktori /opt/cycle_server/config/data
. Ini akan diimpor secara otomatis.
Gambar Pengguna Kustom dalam Templat
Azure CycleCloud mendukung gambar kustom dalam templat. Tentukan ID gambar (ID sumber daya) secara langsung dengan ImageId
, atau tambahkan gambar ke registri gambar. Ketika gambar berada di registri, referensikan dengan salah satu Image
atau ImageName
pada simpul Anda. Ini akan muncul di dropdown gambar pada halaman pembuatan kluster.
Gambar dalam registri gambar terdiri dari Package
rekaman yang mengidentifikasi konten gambar logis dan satu atau beberapa rekaman terkait Artifact
yang menentukan id gambar aktual di penyedia cloud yang sesuai. Misalnya, gambar kustom dengan R terinstal di dalamnya mungkin terdiri dari rekaman Paket ini:
AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"
Setelah menambahkan rekaman tersebut, Anda dapat menentukan gambar tersebut dengan menyertakan atau Image = R
ImageName = r_execute
dalam templat kluster.
Jika gambar ini ada sebagai Satu Komputer Virtual yang digunakan dengan id /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage
, gambar harus menyimpan artefak berikut:
AdType = "Artifact"
Package = "r_execute"
Version = "2.1.1"
Name = "az/useast"
Provider = "az"
ImageId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage"
Anda harus menentukan Provider
pada artefak.
Anda dapat menambahkan artefak sebanyak yang Anda inginkan untuk paket gambar tertentu, tetapi Anda harus menyertakan semua artefak yang diperlukan untuk menggunakan gambar tersebut di semua "lokasi" yang Anda inginkan (satu per akun penyedia cloud, wilayah, proyek, dll). Nama artefak tidak penting, kecuali bahwa artefak harus unik untuk semua artefak untuk paket dan versi tertentu. Menggunakan kombinasi penyedia dan detail khusus penyedia (misalnya wilayah) biasanya disarankan. CycleCloud secara otomatis memilih artefak yang tepat untuk mencocokkan penyedia dan detail khusus penyedia apa pun, tetapi menggunakan atribut Penyedia (dan Wilayah, dll) daripada mengurai Nama.
Jika Anda menambahkan lebih dari satu paket gambar dengan nama yang sama, paket tersebut harus memiliki nomor versi yang berbeda. Saat memulai instans, CycleCloud akan secara otomatis memilih gambar dengan nomor versi tertinggi, dengan memperlakukan nomor versi sebagai string putus-putus dan membandingkan setiap bagian sebagai angka. Untuk mengambil alih ini, tentukan ImageVersion
pada simpul, sebagai harfiah (misalnya 1.2
) atau kartubebas (1.x
).