Delen via


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.jsonhebben. 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 bvermenigvuldigt 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 456zijn, 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 ImageIdof 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).