Szablony klastrów

Usługa Azure CycleCloud używa szablonów do definiowania konfiguracji klastra. Wiele szablonów jest domyślnie dostępnych w usłudze CycleCloud, a pełna lista obsługiwanych szablonów jest dostępna w usłudze GitHub. Możesz tworzyć nowe szablony lub dostosowywać istniejące. Na przykład możesz dostosować istniejący szablon, aby korzystać z maszyn wirtualnych typu spot lub dodać VPC, aby rozszerzyć własną sieć.

Notacja konfiguracji

Wszystkie szablony klastrów usługi Azure CycleCloud mają możliwość posiadania co najmniej jednej sekcji [[[konfiguracja]] należących do węzła lub węzłaarray. W tych sekcjach opisano opcje konfiguracji oprogramowania dotyczące węzłów uruchamianych przez usługę CycleCloud. Notacja kropkowana służy do określania atrybutów, które chcesz skonfigurować:

[[node scheduler]]
  [[[configuration]]]
  cycle_server.admin.name = poweruser
  cycle_server.admin.pass = super_secret
  cycle_server.http_port = 8080
  cycle_server.https_port = 8443

Możesz również określić sekcję konfiguracji przy użyciu prefix notacji w celu zapisania wpisywania. Tę samą konfigurację można również zapisać jako:

[[node scheduler]]
  [[[configuration cycle_server]]]
  admin.name = poweruser
  admin.pass = super_secret
  http_port = 8080
  https_port = 8443

Węzeł/węzełarray może również zawierać wiele sekcji konfiguracji w razie potrzeby:

[[node scheduler]]
  [[[configuration]]]
  run_list = role[sge_scheduler_node]

  [[[configuration cycle_server.admin]]]
  name = poweruser
  pass = super_secret

Parametry szablonu klastra

Szablony klastrów mogą zawierać parametry, które zmieniają wartości niektórych części klastra bez konieczności modyfikowania samego szablonu. Jest to szczególnie przydatne w przypadkach, gdy wiele podobnych klastrów z niewielkimi różnicami jest pożądanych, takich jak wdrażanie środowisk programistycznych i produkcyjnych. Składnią określania parametru w szablonie klastra jest prefiks zmiennej o wartości "$". Podstawowy przykład szablonu (niefunkcyjny) z niektórymi parametrami może wyglądać następująco:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

Ten szablon definiuje dwa parametry: $machine_type i $slots. Za pomocą tego szablonu można zdefiniować pliki tekstowe zawierające wartości parametrów w środowiskach deweloperskich i prod. Plik parametrów może być w formacie JSON lub w formacie pliku właściwości Języka Java:

# dev-params.json
{
  "machine_type": "H16r",
  "slots": 2
}

# prod-params.properties
machine_type = Standard_D4v3
slots = 8

Spowoduje to utworzenie pliku JSON zawierającego parametry dla pliku dev i .properties zawierającego wartości dla środowiska produkcyjnego.

Uwaga

Sufiks nazwy pliku parametrów jest ważny! Jeśli używasz formatu JSON, plik musi mieć nazwę foo.json. Jeśli używasz właściwości języka Java, plik musi kończyć się ciągiem .properties. Niepoprawnie nazwane pliki parametrów nie zostaną poprawnie zaimportowane.

Teraz możesz zaimportować szablon przy użyciu pliku parameters, aby wypełnić brakujące elementy:

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

Istnieje również możliwość zdefiniowania niektórych lub wszystkich parametrów w samym szablonie klastra:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

[parameters]
  [[parameter machine_type]]
  DefaultValue = Standard_D4v3

  [[parameter slots]]
  DefaultValue = 2

Wartości domyślne dla każdego parametru są definiowane w szablonie (jako wartości domyślne użyto wartości "dev").

Teraz można zaimportować szablon bez pliku parametrów, a wartości "dev" będą używane automatycznie. Gdy nadszedł czas na utworzenie klastra prod, możesz użyć pliku prod-params.properties, aby zastąpić wartości określone wewnątrz samego pliku szablonu.

Uwaga

Nazwy parametrów mogą zawierać dowolne litery, cyfry i podkreślenia.

Odwołania do parametrów w szablonie mogą przyjmować jedną z dwóch form:

$param: Używa wartości pojedynczego parametru o nazwie param

${expr}: ocenia expr w kontekście wszystkich parametrów, co umożliwia obliczanie wartości dynamicznych. Przykład:

Attribute = ${(a > b ? a : b) * 100}

Zajęłoby to więcej dwóch parametrów a i b, i pomnożyło je przez 100. Wyrażenie jest interpretowane i oceniane zgodnie ze specyfikacją języka ClassAd.

Jeśli odwołanie do parametru istnieje samodzielnie, używana jest wartość parametru, która obsługuje typy inne niż ciągi, takie jak wartości logiczne, liczby całkowite i zagnieżdżone struktury, takie jak listy. Jeśli jednak odwołanie jest osadzone w innym tekście, jego wartość jest konwertowana i uwzględniana w ciągu. Załóżmy na przykład, że jest param definiowany jako 456 i przywołyny w dwóch miejscach:

  • Attribute1 = $param
  • Atrybut2 = 123$param

Wartość parametru Attribute1 będzie liczbą 456, ale wartość parametru Attribute2 będzie ciągiem "123456". Należy pamiętać, że ${param} jest identyczny z $paramelementem , który umożliwia osadzanie odwołań parametrów w bardziej złożonych sytuacjach:

  • Attribute3 = 123$param789
  • Atrybut4 = 123${param}789

Attribute3 szukałby parametru o nazwie param789, ale Atrybut4 użyje wartości param , aby uzyskać "123456789"wartość .

Typy maszyn

Usługa Azure CycleCloud obsługuje wiele typów maszyn za pośrednictwem atrybutu MachineType . Podejmie próbę uzyskania pojemności w podanej kolejności.

Specyfikacja inicjowania klastra

Aplikacja internetowa Azure CycleCloud umożliwia użytkownikom wybieranie specyfikacji projektu klastra podczas tworzenia nowego klastra. Specyfikacje projektu są konfigurowane w szablonie klastra:

[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]]]

Po dodaniu tego parametru do szablonu klastra użytkownik może użyć selektora plików, aby wybrać odpowiednie specyfikacje projektu podczas tworzenia nowego klastra.

Virtual Machines typu spot

Aby zmniejszyć koszt obciążeń, możesz ustawić wartość Interruptible = true. Spowoduje to flagę wystąpienia jako spot i będzie używać nadwyżkowej pojemności, gdy jest dostępna. Należy pamiętać, że te wystąpienia nie zawsze są dostępne i mogą być w dowolnym momencie wywłaszczone, co oznacza, że nie zawsze są odpowiednie dla obciążenia.

Domyślnie ustawienie Interruptible wartości true będzie używać wystąpień typu spot z maksymalną ceną ustawioną na -1. Oznacza to, że wystąpienie nie będzie eksmitowane na podstawie ceny. Cena wystąpienia będzie bieżącą ceną spot lub ceną wystąpienia standardowego, w zależności od tego, która wartość jest mniejsza, o ile dostępna jest pojemność i limit przydziału. Jeśli chcesz ustawić niestandardową maksymalną cenę, użyj atrybutu MaxPrice w żądanym węźle lub węźle nodearray.

[cluster demo]

  [[nodearray execute]]
  Interruptible = true
  MaxPrice = 0.2

Tabele odnośników

Jeden parametr może się odwoływać do innego i obliczyć określoną wartość za pomocą tabeli odnośników. Załóżmy na przykład, że masz parametr do użycia dla obrazu z dwoma opcjami w tym przypadku:

[[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

Możesz również pobrać wersję systemu operacyjnego wybranego obrazu i użyć jej do innej konfiguracji, tworząc e parametr, którego wartość jest tabelą odnośników wartości:

[[parameter AmiLookup]]
  ParameterType = hidden
  [[[record DefaultValue]]]
      image-1000 = Ubuntu 20.04
      image-2000 = Ubuntu 22.04

Należy pamiętać, że jest to ukryte, aby nie pojawiało się w interfejsie użytkownika.

Wersję systemu operacyjnego używaną dla wybranego obrazu w dowolnym miejscu w definicji klastra:

[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}

Integracja graficznego interfejsu użytkownika

Definiowanie parametrów w szablonie klastra umożliwia korzystanie z graficznego interfejsu użytkownika usługi Azure CycleCloud. Na przykład podczas definiowania parametrów można użyć następujących atrybutów do ułatwienia tworzenia graficznego interfejsu użytkownika:

# 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

Atrybuty "Label" i "Description" są uwzględniane, które będą wyświetlane w graficznym interfejsie użytkownika, a także opcjonalny atrybut "ParameterType". Element "ParameterType" umożliwia wyświetlanie niestandardowych elementów interfejsu użytkownika. W powyższym przykładzie wartość "Cloud.MachineType" wyświetli listę rozwijaną zawierającą wszystkie dostępne typy maszyn. Inne wartości ParametrType to:

Typ parametru Opis
Cloud.MachineType Wyświetla listę rozwijaną zawierającą wszystkie dostępne typy maszyn.
Cloud.Credentials Wyświetla listę rozwijaną zawierającą wszystkie dostępne poświadczenia.
Cloud.Region Wyświetla listę rozwijaną zawierającą wszystkie dostępne regiony.

Obsługa programu Chef Server

Azure CycleCloud suports ChefServer.

Utwórz plik chefserver.json i dodaj poświadczenia. ValidationKey odpowiada plikowi validation.pem serwera chef. Musisz również udowodnić, validation_client_name czy zmieniono ją na wartość domyślną "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
}

Następnie umieść plik w katalogu /opt/cycle_server/config/data. Zostanie on zaimportowany automatycznie.

Niestandardowe obrazy użytkowników w szablonach

Usługa Azure CycleCloud obsługuje obrazy niestandardowe w szablonach. Określ identyfikator obrazu (identyfikator zasobu) bezpośrednio za pomocą polecenia ImageIdlub dodaj obraz do rejestru obrazów. Gdy obraz znajduje się w rejestrze, odwołaj się do niego za pomocą węzła Image lub ImageName w węźle. Zostanie ona wyświetlona na liście rozwijanej obrazu na stronie tworzenia klastra.

Obrazy w rejestrze obrazów składają się z Package rekordu identyfikującego zawartość obrazu logicznego i co najmniej jeden odpowiadający Artifact rekord określający rzeczywisty identyfikator obrazu u odpowiedniego dostawcy usług w chmurze. Na przykład niestandardowy obraz z zainstalowanym językiem R może składać się z tego rekordu pakietu:

AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"

Po dodaniu tego rekordu można określić ten obraz, dołączając Image = R go do szablonu klastra lub ImageName = r_execute .

Jeśli ten obraz istniał jako pojedyncza maszyna wirtualna w elemecie useast z identyfikatorem /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImageelementu , musi mieć przechowywany następujący artefakt:

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"

Musisz określić Provider artefakt.

Możesz dodać dowolną liczbę artefaktów dla danego pakietu obrazów, ale musisz uwzględnić wszystkie artefakty wymagane do użycia tego obrazu we wszystkich żądanych lokalizacjach (po jednym koncie dostawcy usług w chmurze, regionach, projektach itp.). Nazwa artefaktu nie jest ważna, z tą różnicą, że musi być unikatowa dla wszystkich artefaktów dla danego pakietu i wersji. Zazwyczaj zalecane jest użycie kombinacji szczegółów specyficznych dla dostawcy i dostawcy (np. regionu). Usługa CycleCloud automatycznie wybiera odpowiedni artefakt, aby dopasować go do dostawcy i wszystkich szczegółów specyficznych dla dostawcy, ale używa atrybutu dostawcy (i regionu itp.), zamiast analizować nazwę.

Jeśli dodasz więcej niż jeden pakiet obrazów o tej samej nazwie, muszą mieć różne numery wersji. Podczas uruchamiania wystąpienia usługa CycleCloud automatycznie wybierze obraz z najwyższym numerem wersji, traktując numer wersji jako ciąg kropkowany i porównując każdą część jako liczbę. Aby to zastąpić, określ ImageVersion w węźle jako literał (np 1.2. ) lub symbol wieloznaczny (1.x).