Š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 b
ho čí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 ImageId
nebo 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
).