Bagikan melalui


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 = RImageName = 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).