Clustersjablonen
Azure CycleCloud gebruikt sjablonen om clusterconfiguraties te definiëren. Een aantal sjablonen is standaard opgenomen in CycleCloud en er is een volledige lijst met ondersteunde sjablonen beschikbaar in GitHub. U kunt nieuwe sjablonen maken of bestaande sjablonen aanpassen. U kunt bijvoorbeeld een bestaande sjabloon aanpassen om te profiteren van spot-VM's, of u kunt een VPC toevoegen om uw eigen netwerk uit te breiden.
Configuratienotatie
Azure CycleCloud-clustersjablonen hebben allemaal de mogelijkheid om een of meer secties [[[configuratie]]] te hebben die deel uitmaken van een knooppunt of nodearray. In deze secties worden softwareconfiguratieopties opgegeven over de knooppunten die worden gestart door CycleCloud. Gestippelde notatie wordt gebruikt om de kenmerken op te geven die u wilt configureren:
[[node scheduler]]
[[[configuration]]]
cycle_server.admin.name = poweruser
cycle_server.admin.pass = super_secret
cycle_server.http_port = 8080
cycle_server.https_port = 8443
U kunt ook een configuratiesectie opgeven met behulp van prefix
notatie om typen op te slaan.
Dezelfde configuratie kan ook worden geschreven als:
[[node scheduler]]
[[[configuration cycle_server]]]
admin.name = poweruser
admin.pass = super_secret
http_port = 8080
https_port = 8443
Een knooppunt/nodearray kan indien nodig ook meerdere configuratiesecties bevatten:
[[node scheduler]]
[[[configuration]]]
run_list = role[sge_scheduler_node]
[[[configuration cycle_server.admin]]]
name = poweruser
pass = super_secret
Clustersjabloonparameters
Clustersjablonen kunnen parameters bevatten die de waarden van bepaalde onderdelen van een cluster wijzigen zonder dat u de sjabloon zelf hoeft te wijzigen. Dit is met name handig in gevallen waarin veel vergelijkbare clusters met kleine verschillen gewenst zijn, zoals het implementeren van ontwikkel- en productieomgevingen. De syntaxis voor het opgeven van een parameter in een clustersjabloon is het voorvoegsel van een variabele met een '$'. Een voorbeeld van een basissjabloon (niet-functioneel) met bepaalde parameters kan er als volgt uitzien:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
Deze sjabloon definieert twee parameters: $machine_type
en $slots
. Met deze sjabloon kunt u tekstbestanden definiëren die de waarden van de parameters bevatten in zowel de ontwikkelomgeving als de prod-omgevingen. Het parameterbestand kan een JSON-indeling of een Java-eigenschappenbestand hebben:
# dev-params.json
{
"machine_type": "H16r",
"slots": 2
}
# prod-params.properties
machine_type = Standard_D4v3
slots = 8
Hiermee maakt u een JSON-bestand met de parameters voor dev en een .properties-bestand met de waarden voor productie.
Notitie
Het bestandsnaamachtervoegsel voor uw parameterbestand is belangrijk. Als u JSON gebruikt, moet het bestand de naam foo.json
hebben. Als u Java-eigenschappen gebruikt, moet uw bestand eindigen op .properties
. Onjuist benoemde parameterbestanden worden niet correct geïmporteerd.
U kunt de sjabloon nu importeren met behulp van het parameterbestand om de ontbrekende onderdelen in te vullen:
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
Het is ook mogelijk om enkele of alle parameters in de clustersjabloon zelf te definiëren:
# template.txt
[cluster gridengine]
[[node scheduler]]
MachineType = $machine_type
[[[configuration]]]
gridengine.slots = $slots
[parameters]
[[parameter machine_type]]
DefaultValue = Standard_D4v3
[[parameter slots]]
DefaultValue = 2
De standaardwaarden voor elke parameter worden gedefinieerd in de sjabloon (we hebben de dev-waarden als standaardwaarden gebruikt).
Het is nu mogelijk om de sjabloon zonder een parameterbestand te importeren en de dev-waarden worden automatisch gebruikt. Wanneer het tijd is om een prod-cluster te maken, kunt u het bestand prod-params.properties gebruiken om de waarden te overschrijven die zijn opgegeven in het sjabloonbestand zelf.
Notitie
Parameternamen kunnen letters, cijfers en onderstrepingstekens bevatten.
Parameterverwijzingen in de sjabloon kunnen een van de volgende twee vormen hebben:
$param
: Gebruikt de waarde van één parameter met de naam param
${expr}
: Evalueert expr
in de context van alle parameters, waarmee u dynamische waarden kunt berekenen. Bijvoorbeeld:
Attribute = ${(a > b ? a : b) * 100}
Dit neemt de grootste van twee parameters a
en b
vermenigvuldigt deze met 100.
De expressie wordt geïnterpreteerd en geëvalueerd volgens de ClassAd-taalspecificatie.
Als er zelf een parameterverwijzing bestaat, wordt de waarde van de parameter gebruikt, die niet-tekenreekstypen ondersteunt, zoals booleaanse waarden, gehele getallen en geneste structuren, zoals lijsten.
Als de verwijzing echter is ingesloten in andere tekst, wordt de waarde ervan geconverteerd en opgenomen in een tekenreeks.
Stel dat param
deze wordt gedefinieerd als 456
en waarnaar wordt verwezen op twee plaatsen:
- Kenmerk1 = $param
- Kenmerk2 = 123$param
De waarde zou Attribute1
het getal 456
zijn, maar de waarde hiervan Attribute2
is de tekenreeks "123456"
. Houd er rekening mee dat ${param}
dit identiek is aan $param
, waarmee u parameterverwijzingen in complexere situaties kunt insluiten:
- Kenmerk3 = 123$param789
- Kenmerk4 = 123${param}789
Attribute3
zoekt naar de parameter met de naam param789
, maar Attribute4 gebruikt de waarde van param
om op te halen "123456789"
.
Machinetypen
Azure CycleCloud ondersteunt meerdere machinetypen via het MachineType
kenmerk. Er wordt geprobeerd capaciteit te verkrijgen in de vermelde volgorde.
Specificaties van Cluster Init
Met de Azure CycleCloud-webtoepassing kunnen gebruikers cluster-init-projectspecificaties selecteren bij het maken van een nieuw cluster. De projectspecificaties worden ingesteld in de clustersjabloon:
[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]]]
Zodra deze parameter is toegevoegd aan uw clustersjabloon, kan uw gebruiker de bestandskiezer gebruiken om de juiste projectspecificaties te selecteren bij het maken van een nieuw cluster.
Spot Virtual Machines
Als u de kosten van uw workloads wilt verlagen, kunt u instellen Interruptible = true
. Hiermee wordt uw exemplaar als Spot gevlagd en wordt overtollige capaciteit gebruikt wanneer deze beschikbaar is. Het is belangrijk te weten dat deze exemplaren niet altijd beschikbaar zijn en op elk gewenst moment kunnen worden verschoven, wat betekent dat ze niet altijd geschikt zijn voor uw workload.
Interruptible
Standaard worden spot-exemplaren met een maximale prijs ingesteld op -1 gebruikt als instelling waar. Dit betekent dat het exemplaar niet wordt verwijderd op basis van prijs. De prijs voor het exemplaar is de huidige prijs voor Spot of de prijs voor een standaardexemplaren, afhankelijk van wat kleiner is, zolang er capaciteit en quota beschikbaar zijn. Als u een aangepaste maximumprijs wilt instellen, gebruikt u het MaxPrice
kenmerk op het gewenste knooppunt of nodearray.
[cluster demo]
[[nodearray execute]]
Interruptible = true
MaxPrice = 0.2
Opzoektabellen
U kunt één parameter laten verwijzen naar een andere en een bepaalde waarde berekenen met een opzoektabel. Stel dat u een parameter hebt voor de afbeelding die u wilt gebruiken, met twee opties in dit geval:
[[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
U kunt ook de versie van het besturingssysteem van de gekozen installatiekopieën ophalen en deze gebruiken voor andere configuratie door e een parameter te maken waarvan de waarde een opzoektabel met waarden is:
[[parameter AmiLookup]]
ParameterType = hidden
[[[record DefaultValue]]]
image-1000 = Ubuntu 20.04
image-2000 = Ubuntu 22.04
Houd er rekening mee dat dit verborgen is, zodat deze niet wordt weergegeven in de gebruikersinterface.
U kunt de versie van het besturingssysteem ophalen die wordt gebruikt voor de gekozen installatiekopieën, waar dan ook in de clusterdefinitie:
[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}
GUI-integratie
Als u parameters in de clustersjabloon definieert, kunt u gebruikmaken van de GUI van Azure CycleCloud. Als u bijvoorbeeld parameters definieert, kunnen de volgende kenmerken worden gebruikt om te helpen bij het maken van de 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
De kenmerken "Label" en "Description" worden opgenomen die worden weergegeven in de GUI en het optionele "ParameterType"-kenmerk. Met parametertype kunnen aangepaste UI-elementen worden weergegeven. In het bovenstaande voorbeeld wordt met de waarde 'Cloud.MachineType' een vervolgkeuzelijst weergegeven met alle beschikbare machinetypen. De andere ParameterType-waarden zijn:
Parametertype | Description |
---|---|
Cloud.MachineType | Geeft een vervolgkeuzelijst weer met alle beschikbare machinetypen. |
Cloud.Credentials | Geeft een vervolgkeuzelijst weer met alle beschikbare referenties. |
Cloud.Region | Geeft een vervolgkeuzelijst weer met alle beschikbare regio's. |
Ondersteuning voor Chef Server
Azure CycleCloud suports ChefServer.
Maak het bestand chefserver.json
en voeg uw referenties toe.
ValidationKey
komt overeen met het bestand validation.pem voor uw chef-server. U moet ook bewijzen validation_client_name
of u deze hebt gewijzigd van de standaardwaarde van '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
}
Plaats vervolgens het bestand in de map /opt/cycle_server/config/data
. Deze wordt automatisch geïmporteerd.
Aangepaste gebruikersafbeeldingen in sjablonen
Azure CycleCloud ondersteunt aangepaste installatiekopieën in sjablonen. Geef de installatiekopieën-id (resource-id) rechtstreeks op met ImageId
of voeg de installatiekopieën toe aan het installatiekopieënregister. Wanneer de installatiekopieën zich in het register bevindt, verwijst u ernaar met Image
of ImageName
op uw knooppunt. Deze wordt weergegeven in de vervolgkeuzelijst met afbeeldingen op de pagina voor het maken van het cluster.
Installatiekopieën in het installatiekopieënregister bestaan uit een Package
record die de inhoud van de logische installatiekopieën identificeert en een of meer bijbehorende Artifact
records die de werkelijke installatiekopieën-id in de juiste cloudprovider opgeven. Een aangepaste installatiekopieën waarop R is geïnstalleerd, kunnen bijvoorbeeld bestaan uit deze pakketrecord:
AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"
Zodra u die record hebt toegevoegd, kunt u die installatiekopieën opgeven door deze op te nemen Image = R
of ImageName = r_execute
in de clustersjabloon.
Als deze installatiekopieën bestonden als één virtuele machine in useast met een id van /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage
, moet het volgende artefact zijn opgeslagen:
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"
U moet opgeven Provider
op het artefact.
U kunt zoveel artefacten toevoegen als u wilt voor een bepaald installatiekopieënpakket, maar u moet alle artefacten opnemen die nodig zijn om die installatiekopieën te gebruiken op alle gewenste locaties (één per cloudprovideraccount, regio's, projecten, enzovoort). De naam van het artefact is niet belangrijk, behalve dat het uniek moet zijn voor alle artefacten voor een bepaald pakket en een bepaalde versie. Het gebruik van een combinatie van de provider en providerspecifieke details (bijvoorbeeld regio) wordt meestal aanbevolen. CycleCloud kiest automatisch het juiste artefact dat overeenkomt met de provider en eventuele providerspecifieke details, maar maakt gebruik van het kenmerk Provider (en Regio, enzovoort) in plaats van de naam te parseren.
Als u meer dan één installatiekopieënpakket met dezelfde naam toevoegt, moeten ze verschillende versienummers hebben. Wanneer u een exemplaar start, kiest CycleCloud automatisch de afbeelding met het hoogste versienummer, door het versienummer als een stippelreeks te behandelen en elk onderdeel als een getal te vergelijken. Als u dit wilt overschrijven, geeft u ImageVersion
op het knooppunt op als een letterlijke waarde (bijvoorbeeld 1.2
) of een jokerteken (1.x
).