Sdílet prostřednictvím


Šablony clusteru

Azure CycleCloud používá šablony k definování konfigurací clusteru. Ve výchozím nastavení je součástí CycleCloudu celá řada šablon a úplný seznam podporovaných šablon je k dispozici na GitHubu. Můžete vytvořit nové šablony nebo můžete přizpůsobit existující šablony. Můžete například chtít přizpůsobit existující šablonu tak, aby využívala spotové virtuální počítače, nebo můžete chtít přidat nástroj VPC pro rozšíření vlastní sítě.

Zápis konfigurace

Šablony clusteru Azure CycleCloud mají možnost mít jednu nebo více částí [[[konfigurace]]], které patří do uzlu nebo nodearray. Tyto části určují možnosti konfigurace softwaru o uzlech, které spouští CycleCloud. Tečkovaná notace slouží k určení atributů, které chcete nakonfigurovat:

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

Můžete také zadat oddíl konfigurace pomocí prefix zápisu pro uložení psaní. Stejnou konfiguraci lze také zapsat jako:

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

Uzel nebo nodearray může v případě potřeby obsahovat také několik oddílů konfigurace:

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

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

Parametry šablony clusteru

Šablony clusteru mohou obsahovat parametry, které mění hodnoty určitých částí clusteru, aniž by musely upravovat samotnou šablonu. To je užitečné zejména v případech, kdy je žádoucí mnoho podobných clusterů s malými rozdíly, například nasazení vývojových a produkčních prostředí. Syntaxe pro zadání parametru v rámci šablony clusteru je předpona proměnné pomocí $. Základní příklad šablony (nefunkční) s některými parametry by mohl vypadat takto:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

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

Tato šablona definuje dva parametry: $machine_type a $slots. Pomocí této šablony můžete definovat textové soubory obsahující hodnoty parametrů v vývojových a prod prostředích. Soubor parametrů může být ve formátu JSON nebo ve formátu souboru vlastností Java:

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

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

Tím se vytvoří soubor JSON obsahující parametry pro vývoj a soubor .properties obsahující hodnoty pro produkční prostředí.

Poznámka

Přípona názvu souboru parametrů je důležitá! Pokud používáte JSON, musí být váš soubor pojmenován foo.json. Pokud používáte vlastnosti Jazyka Java, musí soubor končit .properties. Nesprávně pojmenované soubory parametrů nebudou správně importovat.

Teď můžete šablonu importovat pomocí souboru parametrů a vyplnit chybějící části:

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

Je také možné definovat některé nebo všechny parametry v rámci samotné šablony clusteru:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

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

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

  [[parameter slots]]
  DefaultValue = 2

Výchozí hodnoty pro každý parametr jsou definovány v šabloně (jako výchozí hodnoty jsme použili hodnoty dev).

Teď je možné šablonu importovat bez souboru parametrů a hodnoty dev se použijí automaticky. Pokud je čas vytvořit cluster prod, můžete použít soubor prod-params.properties k přepsání hodnot zadaných v samotném souboru šablony.

Poznámka

Názvy parametrů můžou obsahovat libovolná písmena, číslice a podtržítka.

Odkazy na parametry v šabloně můžou mít jednu ze dvou forem:

$param: Používá hodnotu jednoho parametru s názvem param

${expr}: Vyhodnocuje expr se v kontextu všech parametrů, které umožňují vypočítat dynamické hodnoty. Příklad:

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

To by trvalo větší ze dvou parametrů a a vynásobilo bho číslem 100. Výraz se interpretuje a vyhodnocuje podle specifikace jazyka ClassAd.

Pokud odkaz na parametr existuje sám, použije se hodnota parametru, která podporuje jiné typy než řetězce, jako jsou logické hodnoty, celá čísla a vnořené struktury, jako jsou seznamy. Pokud je však odkaz vložen do jiného textu, jeho hodnota se převede a zahrne do řetězce. Předpokládejme například, že param je definován jako 456 odkaz na dvě místa:

  • Atribut1 = $param
  • Atribut2 = 123$param

Hodnota Attribute1 by byla číslo 456, ale hodnota Attribute2 by byla řetězec "123456". Všimněte si, že ${param} je shodný s $param, což umožňuje vložit odkazy na parametry v složitějších situacích:

  • Atribut3 = 123$param789
  • Atribut4 = 123${param}789

Attribute3 by hledal parametr s názvem param789, ale Atribut4 by použil hodnotu param k získání "123456789".

Typy počítačů

Azure CycleCloud podporuje více typů počítačů prostřednictvím atributu MachineType . Pokusí se získat kapacitu v uvedeném pořadí.

Specifikace inicializačních objektů clusteru

Webová aplikace Azure CycleCloud umožňuje uživatelům při vytváření nového clusteru vybrat specifikace projektu cluster-init. Specifikace projektu se nastaví v rámci šablony clusteru:

[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 přidání tohoto parametru do šablony clusteru může uživatel při vytváření nového clusteru vybrat příslušné specifikace projektu pomocí nástroje pro výběr souborů.

Spotové Virtual Machines

Pokud chcete snížit náklady na úlohy, můžete nastavit Interruptible = true. Tím označíte instanci příznakem Spot a v případě dostupnosti použijete nadbytečnou kapacitu. Je důležité si uvědomit, že tyto instance nejsou vždy dostupné a je možné je kdykoli předem připravit, což znamená, že nejsou vždy vhodné pro vaši úlohu.

Ve výchozím nastavení bude nastavení Interruptible true používat spotové instance s maximální cenou nastavenou na -1. To znamená, že instance nebude vyřazena na základě ceny. Cena pro instanci bude aktuální cena spotové nebo ceny pro standardní instanci, podle toho, co je nižší, pokud je k dispozici kapacita a kvóta. Pokud chcete nastavit vlastní maximální cenu, použijte MaxPrice atribut na požadovaném uzlu nebo nodearray.

[cluster demo]

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

Vyhledávací tabulky

Jeden parametr může odkazovat na jiný a vypočítat určitou hodnotu pomocí vyhledávací tabulky. Předpokládejme například, že máte parametr pro použití image se dvěma možnostmi v tomto případě:

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

Můžete také získat verzi operačního systému zvolené image a použít ji pro jinou konfiguraci tak, že vytvoříte parametr, jehož hodnotou je vyhledávací tabulka hodnot:

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

Všimněte si, že je tato možnost skrytá, takže se nezobrazí v uživatelském rozhraní.

Verzi operačního systému použitou pro vybranou image můžete získat kdekoli jinde v definici clusteru:

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

Integrace grafického uživatelského rozhraní

Definování parametrů v rámci šablony clusteru umožňuje využívat grafické uživatelské rozhraní Azure CycleCloud. Například při definování parametrů můžete použít následující atributy, které vám pomůžou při vytváření grafického uživatelského rozhraní:

# 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

Zahrnují atributy Label a Description, které se zobrazí v grafickém uživatelském rozhraní a také volitelný atribut ParameterType. ParametrType umožňuje zobrazení vlastních prvků uživatelského rozhraní. V příkladu nad hodnotou Cloud.MachineType se zobrazí rozevírací seznam obsahující všechny dostupné typy počítačů. Mezi další hodnoty ParameterType patří:

Typ parametru Description
Cloud.MachineType Zobrazí rozevírací seznam obsahující všechny dostupné typy počítačů.
Cloud.Credentials Zobrazí rozevírací seznam obsahující všechny dostupné přihlašovací údaje.
Cloud.Region Zobrazí rozevírací seznam obsahující všechny dostupné oblasti.

Podpora serveru Chef

Azure CycleCloud suports ChefServer.

Vytvořte soubor chefserver.json a přidejte svoje přihlašovací údaje. ValidationKey odpovídá souboru validation.pem pro server chef. Musíte také prokázat, validation_client_name jestli jste ho změnili z výchozí hodnoty "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
}

Dále umístěte soubor do adresáře /opt/cycle_server/config/data. Naimportuje se automaticky.

Vlastní uživatelské image v šablonách

Azure CycleCloud podporuje vlastní obrázky v šablonách. Zadejte ID image (ID prostředku) přímo s ImageIdnebo přidejte image do registru image. Pokud je image v registru, na ni odkazujte buď na Image uzel, nebo ImageName na něj. Zobrazí se v rozevíracím seznamu image na stránce pro vytvoření clusteru.

Image v registru imagí se skládají ze Package záznamu, který identifikuje obsah logické image a jeden nebo více odpovídajících Artifact záznamů, které určují skutečné ID image v příslušném poskytovateli cloudu. Například vlastní image s nainstalovaným jazykem R se může skládat z tohoto záznamu balíčku:

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

Po přidání záznamu můžete tuto image zadat tak, že do šablony clusteru zahrnete buď Image = R nebo ImageName = r_execute do šablony clusteru.

Pokud tato image existovala jako jeden virtuální počítač, který se používá s ID /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage, musel by mít uložený následující 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"

Musíte zadat Provider artefakt.

Pro daný balíček image můžete přidat libovolný počet artefaktů, ale musíte zahrnout všechny artefakty potřebné k použití této image ve všech požadovaných umístěních (jeden na účet poskytovatele cloudu, oblasti, projekty atd.). Název artefaktu není důležitý, s tím rozdílem, že musí být jedinečný pro všechny artefakty daného balíčku a verze. Použití kombinace podrobností o poskytovateli a konkrétním poskytovateli (např. oblast) se obvykle doporučuje. CycleCloud automaticky vybere správný artefakt tak, aby odpovídal poskytovateli a jakýmkoli podrobnostem konkrétnímu poskytovateli, ale používá atribut poskytovatele (a oblast atd.), a ne parsuje název.

Pokud přidáte více než jeden balíček image se stejným názvem, musí mít různá čísla verzí. Když spustíte instanci, CycleCloud automaticky vybere obrázek s nejvyšším číslem verze, a to tak, že s číslem verze zachází jako s tečkovaným řetězcem a porovná každou část jako číslo. Pokud chcete tento postup přepsat, zadejte ImageVersion na uzlu buď literál (např 1.2. ) nebo zástupný znak (1.x).