Delen via


Cluster sjablonen

Azure CycleCloud maakt gebruik van sjablonen om clusterconfiguraties te definiëren. CycleCloud bevat standaard veel sjablonen. Zie GitHub voor een volledige lijst met ondersteunde sjablonen. U kunt nieuwe sjablonen maken of bestaande sjablonen aanpassen. U kunt bijvoorbeeld een bestaande sjabloon aanpassen om te profiteren van spot-VM's of een VPC toevoegen om uw eigen netwerk uit te breiden.

Configuratienotatie

Met Azure CycleCloud-clustersjablonen kunt u een of meer secties [[[configuratie]]] toevoegen aan een knooppunt- of knooppuntmatrix. In deze secties worden softwareconfiguratieopties opgegeven voor de knooppunten die CycleCloud start. Gebruik gestippelde notatie 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 notatie gebruiken prefix om een configuratiesectie op te geven en 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- of knooppuntmatrix 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 u gebruikt om de waarden voor bepaalde onderdelen van een cluster te wijzigen. U hoeft de sjabloon zelf niet te wijzigen. Deze functie is vooral handig als u veel vergelijkbare clusters wilt maken met kleine verschillen, zoals het implementeren van ontwikkel- en productieomgevingen. Als u een parameter in een clustersjabloon wilt opgeven, moet u een variabele vooraf laten gaan met een $. Een basissjabloonvoorbeeld (niet-functioneel) met enkele parameters kan er als volgt uitzien:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

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

Met deze sjabloon worden twee parameters gedefinieerd: $machine_type en $slots. Met deze sjabloon kunt u tekstbestanden maken die de waarden voor deze parameters bevatten in zowel de ontwikkel- als de prod-omgeving. U kunt de JSON-indeling of de Java-eigenschappenbestandsindeling gebruiken voor het parameterbestand:

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

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

In dit voorbeeld wordt een JSON-bestand gemaakt met de parameters voor dev en een .properties-bestand met de waarden voor productie.

Opmerking

Het bestandsnaamachtervoegsel voor het parameterbestand is belangrijk. Als u JSON gebruikt, noemt u het bestand foo.json. Als u Java-eigenschappen gebruikt, beëindigt u de bestandsnaam met .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

U kunt ook enkele of alle parameters in de clustersjabloon zelf 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 sjabloon definieert standaardwaarden voor elke parameter (we hebben de dev-waarden als standaardwaarden gebruikt).

U kunt de sjabloon nu importeren zonder een parameterbestand en de dev-waarden worden automatisch gebruikt. Wanneer het tijd is om een prod-cluster te maken, gebruikt u het bestand prod-params.properties om de waarden die zijn opgegeven in het sjabloonbestand zelf te overschrijven.

Opmerking

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. Voorbeeld:

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

Deze expressie neemt de grotere 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 er wordt gedefinieerd als 456 en waarnaar wordt verwezen op twee plaatsen:

  • Kenmerk1 = $param
  • Kenmerk2 = 123$param

De waarde van Attribute1 is het getal 456, maar de waarde van Attribute2 is de tekenreeks "123456". ${param} werkt hetzelfde als $param, zodat u deze kunt gebruiken om parameterverwijzingen op te nemen in complexere situaties:

  • 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. De oplossing probeert capaciteit te verkrijgen in de volgorde waarin u ze vermeldt.

Specificaties voor clusterinitialisatie

Met de Azure CycleCloud-webtoepassing kunt u cluster-init-projectspecificaties selecteren wanneer u een nieuw cluster maakt. Stel de projectspecificaties in de clustersjabloon in:

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

Nadat u deze parameter hebt toegevoegd aan uw clustersjabloon, kunt u de bestandskiezer gebruiken om de juiste projectspecificaties te selecteren wanneer u een cluster maakt.

Spot virtuele machines

Om de kosten van uw workloads te verlagen, stelt u Interruptible in op true. Deze instelling markeert uw exemplaar als een virtuele spot-machine en stelt deze in staat om overtollige capaciteit te gebruiken wanneer deze beschikbaar is. Houd er rekening mee dat deze instanties niet altijd beschikbaar zijn en op elk moment kunnen worden stopgezet, waardoor ze mogelijk niet geschikt zijn voor uw workload.

Wanneer u deze waarde instelt op Interruptible true, gebruikt het exemplaar standaard spot-VM's met een maximale prijs ingesteld op -1. Deze instelling betekent dat het exemplaar niet wordt verwijderd op basis van de prijs. De prijs voor het exemplaar is de huidige prijs voor spot-VM's of de prijs voor een standaardexemplaar, al naargelang welke lager 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 de knooppuntmatrix.

[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 afbeelding ophalen en deze gebruiken voor andere configuratie door "e" een parameter te maken, waarvan de waarde afkomstig is van een opzoektabel.

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

Deze parameter is verborgen, dus deze wordt niet weergegeven in de gebruikersinterface.

U kunt de OS-versie voor de gekozen afbeelding elders in de clusterdefinitie ophalen.

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

GUI-integratie

Door parameters in de clustersjabloon te definiëren, kunt u profiteren van de GUI van Azure CycleCloud. Als u bijvoorbeeld parameters definieert, gebruikt u de volgende kenmerken om u 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 GUI bevat de kenmerken Label en Beschrijving , die worden weergegeven in de GUI, evenals het optionele ParameterType-kenmerk . Met het kenmerk ParameterType kunnen aangepaste UI-elementen worden weergegeven. In het vorige voorbeeld wordt met de Cloud.MachineType waarde een vervolgkeuzelijst weergegeven met alle beschikbare machinetypen. De andere ParameterType-waarden zijn:

Parametertype Beschrijving
Cloud.MachineType Geeft een vervolgkeuzelijst weer met alle beschikbare machinetypen.
Cloud-inloggegevens Geeft een keuzelijst weer met alle beschikbare referenties.
Cloud.Regio Geeft een vervolgkeuzelijst weer met alle beschikbare regio's.

Ondersteuning voor Chef Server

Azure CycleCloud ondersteunt ChefServer.

Maak het bestand chefserver.json en voeg uw referenties toe. ValidationKey komt overeen met het validation.pem bestand voor uw chef-server. U moet ook het validation_client_name opgeven wanneer u het wijzigt 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. De server importeert het bestand automatisch.

Aangepaste gebruikersafbeeldingen in sjablonen

Azure CycleCloud ondersteunt aangepaste images in sjablonen. U kunt de afbeeldings-ID (resource ID) rechtstreeks opgeven met ImageId, of u kunt de afbeelding toevoegen aan het afbeeldingenregister. Wanneer u de image aan het register toevoegt, kunt u deze refereren met Image of ImageName op uw knooppunt. De afbeelding wordt weergegeven in de vervolgkeuzelijst voor afbeeldingen op de pagina voor het maken van het cluster.

Afbeeldingen in het afbeeldingenregister bestaan uit een Package record die de inhoud van de logische afbeelding identificeert en een of meer bijbehorende Artifact records die de werkelijke afbeelding-id in de juiste cloudprovider opgeven. Een aangepaste afbeelding met R geïnstalleerd kan bijvoorbeeld deze pakketregistratie bevatten:

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

Wanneer u dat record toevoegt, kunt u de image specificeren door Image = R of ImageName = r_execute op te nemen in de clustersjabloon.

Als deze image bestaat als één virtuele machine in Oost US met een id van /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage, moet u het volgende artefact opslaan:

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 Provider specificeren op het artefact.

U kunt zoveel artefacten toevoegen als u wilt voor een gegeven afbeeldingspakket, maar u moet alle artefacten opnemen die nodig zijn om die afbeelding te gebruiken op alle gewenste locaties (één per cloudprovideraccount, regio, project, 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. We raden meestal aan om een combinatie van de provider en providerspecifieke details te gebruiken, zoals de regio. CycleCloud kiest automatisch het juiste artefact om overeen te komen met de provider en eventuele providerspecifieke details, maar gebruikt het kenmerk Provider (en regio, enzovoort) in plaats van de naam te parseren.

Als u meer dan één imagepakket met dezelfde naam toevoegt, moet elk pakket een ander versienummer hebben. Wanneer u een instantie start, selecteert CycleCloud automatisch de afbeelding met het hoogste versienummer. Het versienummer wordt behandeld als een gestippelde tekenreeks en vergelijkt elk onderdeel als een getal. Als u dit gedrag wilt overschrijven, geeft u ImageVersion op het knooppunt op als een letterlijk versienummer (bijvoorbeeld 1.2) of een versienummer met jokertekens (bijvoorbeeld 1.x).