Klustermallar
Azure CycleCloud använder mallar för att definiera klusterkonfigurationer. Ett antal mallar ingår som standard i CycleCloud och en fullständig lista över mallar som stöds finns i GitHub. Du kan skapa nya mallar eller anpassa befintliga mallar. Du kanske till exempel vill anpassa en befintlig mall för att dra nytta av virtuella datorer med oanvänd kapacitet, eller så kanske du vill lägga till en VPC för att utöka ditt eget nätverk.
Konfigurationsnotation
Azure CycleCloud-klustermallar har alla möjlighet att ha ett eller flera [[[configuration]]] avsnitt som tillhör en nod eller nodmatris. De här avsnitten anger alternativ för programvarukonfiguration om noderna som startas av CycleCloud. Prickad notation används för att ange de attribut som du vill konfigurera:
[[node scheduler]]
[[[configuration]]]
cycle_server.admin.name = poweruser
cycle_server.admin.pass = super_secret
cycle_server.http_port = 8080
cycle_server.https_port = 8443
Du kan också ange ett konfigurationsavsnitt med notation prefix
för att spara inmatningen.
Samma konfiguration kan också skrivas som:
[[node scheduler]]
[[[configuration cycle_server]]]
admin.name = poweruser
admin.pass = super_secret
http_port = 8080
https_port = 8443
En nod/nodmatris kan också innehålla flera konfigurationsavsnitt om det behövs:
[[node scheduler]]
[[[configuration]]]
run_list = role[sge_scheduler_node]
[[[configuration cycle_server.admin]]]
name = poweruser
pass = super_secret
Parametrar för klustermall
Klustermallar kan innehålla parametrar som ändrar värdena för vissa delar av ett kluster utan att du behöver ändra själva mallen. Detta är särskilt användbart i fall där många liknande kluster med mindre skillnader önskas, till exempel distribution av utvecklings- och produktionsmiljöer. Syntaxen för att ange en parameter i en klustermall är att prefixet en variabel med "$". Ett grundläggande mallexempel (icke-funktionellt) med vissa parametrar kan se ut så här:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
Den här mallen definierar två parametrar: $machine_type
och $slots
. Med den här mallen kan du definiera textfiler som innehåller parametrarnas värden i både utvecklings- och prod-miljöerna. Parameterfilen kan vara i JSON-format eller ett Java-egenskapsfilformat:
# dev-params.json
{
"machine_type": "H16r",
"slots": 2
}
# prod-params.properties
machine_type = Standard_D4v3
slots = 8
Då skapas en JSON-fil som innehåller parametrarna för utveckling och en .properties-fil som innehåller värdena för produktion.
Anteckning
Filnamnssuffixet för parameterfilen är viktigt! Om du använder JSON måste filen ha namnet foo.json
. Om du använder Java-egenskaper måste filen sluta med .properties
. Felaktigt namngivna parameterfiler importeras inte korrekt.
Nu kan du importera mallen med parameterfilen för att fylla i de saknade delarna:
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
Det är också möjligt att definiera vissa eller alla parametrar i själva klustermallen:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
[parameters]
[[parameter machine_type]]
DefaultValue = Standard_D4v3
[[parameter slots]]
DefaultValue = 2
Standardvärdena för varje parameter definieras i mallen (vi använde "dev"-värdena som standardvärden).
Nu är det möjligt att importera mallen utan en parameterfil, och "dev"-värdena används automatiskt. När det är dags att skapa ett prod-kluster kan du använda filen prod-params.properties för att skriva över de värden som anges i själva mallfilen.
Anteckning
Parameternamn kan innehålla bokstäver, siffror och understreck.
Parameterreferenser i mallen kan ha ett av två former:
$param
: Använder värdet för en enskild parameter med namnet param
${expr}
: Utvärderas expr
i kontexten för alla parametrar, vilket gör att du kan beräkna dynamiska värden. Ett exempel:
Attribute = ${(a > b ? a : b) * 100}
Detta skulle ta det större av två parametrar, a
och b
, och multiplicera det med 100.
Uttrycket tolkas och utvärderas enligt språkspecifikationen ClassAd.
Om det finns en parameterreferens används värdet för parametern, som stöder icke-strängtyper som booleska värden, heltal och kapslade strukturer, till exempel listor.
Men om referensen är inbäddad i annan text konverteras dess värde och inkluderas i en sträng.
Anta till exempel param
att definieras som 456
och refereras på två platser:
- Attribute1 = $param
- Attribute2 = 123$param
Värdet Attribute1
för skulle vara talet 456
, men värdet Attribute2
för skulle vara strängen "123456"
. Observera att ${param}
är identiskt med $param
, vilket gör att du kan bädda in parameterreferenser i mer komplexa situationer:
- Attribute3 = 123$param789
- Attribute4 = 123${param}789
Attribute3
skulle leta efter parametern med namnet param789
, men Attribute4 skulle använda värdet param
för för att hämta "123456789"
.
Datortyper
Azure CycleCloud stöder flera datortyper via attributet MachineType
. Den försöker hämta kapacitet i den ordning som anges.
Init-specifikationer för kluster
Med Azure CycleCloud-webbappen kan användarna välja projektspecifikationer för cluster-init när de skapar ett nytt kluster. Projektspecifikationerna konfigureras i klustermallen:
[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]]]
När den här parametern har lagts till i klustermallen kan användaren använda filväljaren för att välja lämpliga projektspecifikationer när ett nytt kluster skapas.
Spot Virtual Machines
Om du vill minska kostnaden för dina arbetsbelastningar kan du ange Interruptible = true
. Detta flaggar din instans som Spot och använder överskottskapacitet när den är tillgänglig. Observera att dessa instanser inte alltid är tillgängliga och kan förhindras när som helst, vilket innebär att de inte alltid är lämpliga för din arbetsbelastning.
Som standard använder inställningen Interruptible
true spot-instanser med ett högsta pris inställt på -1. Det innebär att instansen inte tas bort baserat på pris. Priset för instansen är det aktuella priset för Spot eller priset för en standardinstans, beroende på vilket som är mindre, så länge det finns tillgänglig kapacitet och kvot. Om du vill ange ett anpassat maxpris använder du MaxPrice
attributet på önskad nod eller nodmatris.
[cluster demo]
[[nodearray execute]]
Interruptible = true
MaxPrice = 0.2
Uppslagstabeller
Du kan ha en parameterreferens till en annan och beräkna ett visst värde med en uppslagstabell. Anta till exempel att du har en parameter för avbildningen som ska användas, med två alternativ i det här fallet:
[[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
Du kan också hämta OS-versionen av den valda avbildningen och använda den för annan konfiguration genom att skapa en parameter vars värde är en uppslagstabell med värden:
[[parameter AmiLookup]]
ParameterType = hidden
[[[record DefaultValue]]]
image-1000 = Ubuntu 20.04
image-2000 = Ubuntu 22.04
Observera att detta är dolt så att det inte visas i användargränssnittet.
Du kan hämta os-versionen som används för den valda avbildningen någon annanstans i klusterdefinitionen:
[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}
GUI-integrering
Genom att definiera parametrar i klustermallen kan du dra nytta av Gränssnittet för Azure CycleCloud. När du till exempel definierar parametrar kan följande attribut användas för att hjälpa dig att skapa ett grafiskt användargränssnitt:
# 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
Attributen "Etikett" och "Beskrivning" ingår som visas i det grafiska användargränssnittet samt det valfria attributet "ParameterType". Med ParameterType kan anpassade gränssnittselement visas. I exemplet ovan visar värdet "Cloud.MachineType" en listruta som innehåller alla tillgängliga datortyper. De andra ParameterType-värdena är:
Parametertyp | Description |
---|---|
Cloud.MachineType | Visar en listruta som innehåller alla tillgängliga datortyper. |
Cloud.Credentials | Visar en listruta som innehåller alla tillgängliga autentiseringsuppgifter. |
Cloud.Region | Visar en listruta som innehåller alla tillgängliga regioner. |
Chef Server-stöd
Azure CycleCloud suports ChefServer.
Skapa filen chefserver.json
och lägg till dina autentiseringsuppgifter.
ValidationKey
motsvarar filen validation.pem för chef-servern. Du måste också bevisa validation_client_name
om du har ändrat det från standardvärdet "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
}
Placera sedan filen i katalogen /opt/cycle_server/config/data
. Den importeras automatiskt.
Anpassade användarbilder i mallar
Azure CycleCloud stöder anpassade avbildningar i mallar. Ange avbildnings-ID :t (resurs-ID) direkt med ImageId
eller lägg till avbildningen i avbildningsregistret. När avbildningen finns i registret refererar du till den med antingen Image
eller ImageName
på noden. Den visas i listrutan för avbildningen på sidan för att skapa klustret.
Avbildningar i avbildningsregistret består av en Package
post som identifierar innehållet i den logiska avbildningen och en eller flera motsvarande Artifact
poster som anger det faktiska avbildnings-ID:t i lämplig molnleverantör. En anpassad avbildning med R installerad på den kan till exempel bestå av den här paketposten:
AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"
När du lägger till den posten kan du ange avbildningen genom att inkludera antingen Image = R
eller ImageName = r_execute
i klustermallen.
Om den här avbildningen /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage
fanns som en enda virtuell dator i bruk med ID:t måste följande artefakt lagras:
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"
Du måste ange Provider
artefakten.
Du kan lägga till så många artefakter som du vill för ett visst avbildningspaket, men du måste inkludera alla artefakter som krävs för att använda avbildningen på alla "platser" du vill ha (ett per molnleverantörskonto, regioner, projekt osv.). Artefaktens namn är inte viktigt, förutom att den måste vara unik för alla artefakter för ett visst paket och en viss version. Vi rekommenderar vanligtvis att du använder en kombination av providern och providerspecifik information (t.ex. region). CycleCloud väljer automatiskt rätt artefakt för att matcha providern och eventuell providerspecifik information, men använder providerattributet (och region osv.) i stället för att parsa namnet.
Om du lägger till fler än ett avbildningspaket med samma namn måste de ha olika versionsnummer. När du startar en instans väljer CycleCloud automatiskt bilden med det högsta versionsnumret genom att behandla versionsnumret som en prickad sträng och jämföra varje del som ett tal. Om du vill åsidosätta detta anger du ImageVersion
på noden som antingen en literal (t.ex 1.2
. ) eller ett jokertecken (1.x
).