Clustervorlagen

Azure CycleCloud verwendet Vorlagen zum Definieren von Clusterkonfigurationen. Eine Reihe von Vorlagen ist standardmäßig in CycleCloud enthalten und eine vollständige Liste der unterstützten Vorlagen ist in GitHub verfügbar. Sie können neue Vorlagen erstellen oder vorhandene anpassen. Sie möchten beispielsweise eine vorhandene Vorlage anpassen, um Spot-VMs zu nutzen, oder Sie möchten möglicherweise ein VPC hinzufügen, um Ihr eigenes Netzwerk zu erweitern.

Konfigurationsnotation

Azure CycleCloud-Clustervorlagen verfügen alle über die Möglichkeit, einen oder mehrere [[[configuration]]] Abschnitte zu haben, die zu einem Knoten oder Knotenarray gehören. Diese Abschnitte geben Softwarekonfigurationsoptionen für die Knoten an, die von CycleCloud gestartet werden. Gepunktete Notation wird verwendet, um die Attribute anzugeben, die Sie konfigurieren möchten:

[[node scheduler]]
  [[[configuration]]]
  cycle_server.admin.name = poweruser
  cycle_server.admin.pass = super_secret
  cycle_server.http_port = 8080
  cycle_server.https_port = 8443

Sie können auch einen Konfigurationsabschnitt mit prefix Notation angeben, um die Eingabe zu speichern. Die gleiche Konfiguration könnte auch wie folgt geschrieben werden:

[[node scheduler]]
  [[[configuration cycle_server]]]
  admin.name = poweruser
  admin.pass = super_secret
  http_port = 8080
  https_port = 8443

Bei Bedarf kann auch ein Knoten/Knotenarray mehrere Konfigurationsabschnitte enthalten:

[[node scheduler]]
  [[[configuration]]]
  run_list = role[sge_scheduler_node]

  [[[configuration cycle_server.admin]]]
  name = poweruser
  pass = super_secret

Clustervorlagenparameter

Clustervorlagen können Parameter enthalten, die die Werte bestimmter Teile eines Clusters ändern, ohne die Vorlage selbst zu ändern. Dies ist besonders nützlich in Fällen, in denen viele ähnliche Cluster mit kleinen Unterschieden gewünscht werden, z. B. die Bereitstellung von Entwicklungs- und Produktionsumgebungen. Die Syntax zum Angeben eines Parameters in einer Clustervorlage besteht darin, eine Variable mit einem '$' vorzufixieren. Ein einfaches Vorlagenbeispiel (nicht funktionsfähig) mit einigen Parametern könnte wie folgt aussehen:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

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

Diese Vorlage definiert zwei Parameter: $machine_type und $slots. Mithilfe dieser Vorlage können Sie Textdateien definieren, die die Werte der Parameter sowohl in der Entwicklungs- als auch in prod-Umgebungen enthalten. Die Parameterdatei kann entweder im JSON-Format oder im Java-Eigenschaftendateiformat enthalten sein:

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

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

Dadurch wird eine JSON-Datei erstellt, die die Parameter für Dev und eine Eigenschaftendatei enthält, die die Werte für die Produktion enthält.

Hinweis

Das Dateinamensuffix für Ihre Parameterdatei ist wichtig! Wenn Sie JSON verwenden, muss Ihre Datei benannt foo.jsonwerden. Wenn Sie Java-Eigenschaften verwenden, muss Die Datei mit .properties. Falsch benannte Parameterdateien werden nicht ordnungsgemäß importiert.

Sie können die Vorlage jetzt mithilfe der Parameterdatei importieren, um die fehlenden Teile auszufüllen:

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

Es ist auch möglich, einige oder alle Parameter in der Clustervorlage selbst zu definieren:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

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

[parameters]
  [[parameter machine_type]]
  DefaultValue = Standard_D4v3

  [[parameter slots]]
  DefaultValue = 2

Die Standardwerte für jeden Parameter werden innerhalb der Vorlage definiert (wir verwenden die Werte 'dev' als Standard).

Es ist jetzt möglich, die Vorlage ohne Parameterdatei zu importieren, und die Werte "dev" werden automatisch verwendet. Wenn es zeit ist, einen "prod"-Cluster zu erstellen, können Sie die Datei prod-params.properties verwenden, um die werte zu überschreiben, die innerhalb der Vorlagendatei selbst angegeben sind.

Hinweis

Parameternamen können beliebige Buchstaben, Zahlen und Unterstriche enthalten.

Parameterbezüge in der Vorlage können eine von zwei Formularen übernehmen:

$param: Verwendet den Wert eines einzelnen Parameters namens param

${expr}: Wertet expr im Kontext aller Parameter aus, mit denen Sie dynamische Werte berechnen können. Zum Beispiel:

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

Dies würde die größeren zwei Parameter abund , und multiplizieren sie um 100. Der Ausdruck wird gemäß der ClassAd-Sprachspezifikation interpretiert und ausgewertet.

Wenn ein Parameterverweis selbst vorhanden ist, wird der Wert des Parameters verwendet, der nicht Zeichenfolgentypen wie Booleans, ganze Zahlen und geschachtelte Strukturen wie Listen unterstützt. Wenn der Verweis jedoch in anderen Text eingebettet ist, wird sein Wert konvertiert und in eine Zeichenfolge eingeschlossen. Angenommen, angenommen param , wird an 456 zwei Stellen definiert und verwiesen:

  • Attribut1 = $param
  • Attribut2 = 123$param

Der Wert wäre die Zahl, aber der Wert Attribute1Attribute2 wäre die Zeichenfolge"123456".456 Beachten Sie, dass ${param} es identisch $paramist mit , mit dem Sie Parameterbezüge in komplexere Situationen einbetten können:

  • Attribut3 = 123$param789
  • Attribut4 = 123${param}789

Attribute3 würde nach dem Parameter namens suchen param789, aber Attribut4 würde den Wert param verwenden, um abzurufen "123456789".

Computertypen

Azure CycleCloud unterstützt mehrere Computertypen über das MachineType Attribut. Es wird versuchen, Die Kapazität in der aufgeführten Reihenfolge zu erwerben.

Cluster-Init-Spezifikationen

Mit der Azure CycleCloud-Webanwendung können Benutzer cluster-init-Projektspezifikationen auswählen, wenn Sie einen neuen Cluster erstellen. Die Projektspezifikationen sind innerhalb der Clustervorlage eingerichtet:

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

Nachdem dieser Parameter ihrer Clustervorlage hinzugefügt wurde, kann der Benutzer die Dateiauswahl verwenden, um die entsprechenden Projektspezifikationen beim Erstellen eines neuen Clusters auszuwählen.

Virtuelle Spotcomputer

Um die Kosten Ihrer Workloads zu verringern, können Sie festlegen Interruptible = true. Dies kennzeichnet Ihre Instanz als Spot und verwendet Überschusskapazität, wenn verfügbar. Es ist wichtig zu beachten, dass diese Instanzen nicht immer verfügbar sind und jederzeit vorgeempt werden können, was bedeutet, dass sie nicht immer für Ihre Arbeitslast geeignet sind.

Standardmäßig verwendet die Einstellung Interruptible "true" Spotinstanzen mit einem max. Preissatz auf -1. Dies bedeutet, dass die Instanz nicht basierend auf dem Preis entfernt wird. Der Preis für die Instanz entspricht dem aktuellen Preis für Spot-Instanzen oder dem Preis für eine Standardinstanz, je nachdem, welcher Preis niedriger ist, solange Kapazität und Kontingente verfügbar sind. Wenn Sie einen benutzerdefinierten Max-Preis festlegen möchten, verwenden Sie das MaxPrice Attribut auf dem gewünschten Knoten oder Knotenarray.

[cluster demo]

  [[nodearray execute]]
  Interruptible = true
  MaxPrice = 0.2

Nachschlagetabellen

Sie können einen Parameterverweis haben und einen bestimmten Wert mit einer Nachschlagetabelle berechnen. Angenommen, Sie haben einen Parameter für das Zu verwendende Bild, wobei in diesem Fall zwei Optionen ausgewählt werden:

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

Sie können auch die Betriebssystemversion des ausgewählten Bilds abrufen und für andere Konfigurationen verwenden, indem Sie einen Parameter erstellen, dessen Wert eine Nachschlagetabelle mit Werten ist:

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

Beachten Sie, dass dies ausgeblendet ist, sodass sie nicht in der Benutzeroberfläche angezeigt wird.

Sie können die Betriebssystemversion abrufen, die für das ausgewählte Bild an einer anderen Stelle in der Clusterdefinition verwendet wird:

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

GUI-Integration

Das Definieren von Parametern in der Clustervorlage ermöglicht es einem, die Azure CycleCloud-GUI zu nutzen. Als Beispiel können beim Definieren von Parametern die folgenden Attribute verwendet werden, um die GUI-Erstellung zu unterstützen:

# 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

Die Attribute "Bezeichnung" und "Beschreibung" sind enthalten, die in der GUI sowie im optionalen Attribut "ParameterType" angezeigt werden. Mit dem "ParameterType" können benutzerdefinierte UI-Elemente angezeigt werden. Im Beispiel oberhalb des Werts "Cloud.MachineType" wird eine Dropdownliste angezeigt, die alle verfügbaren Computertypen enthält. Die anderen ParameterType-Werte sind:

Parametertyp BESCHREIBUNG
Cloud.MachineType Zeigt eine Dropdownliste an, die alle verfügbaren Computertypen enthält.
Cloud.Anmeldeinformationen Zeigt eine Dropdownliste mit allen verfügbaren Anmeldeinformationen an.
Cloud.Region Zeigt eine Dropdownliste mit allen verfügbaren Regionen an.

Chef Server-Support

Azure CycleCloud suports ChefServer.

Erstellen Sie die Datei chefserver.json , und fügen Sie Ihre Anmeldeinformationen hinzu. ValidationKey entspricht der Datei validation.pem für Ihren Chefserver. Sie müssen auch nachweisen validation_client_name , ob Sie es aus dem Standardwert "chef-validator" geändert haben:

{
"AdType" : "Cloud.Locker",
"ValidationKey" : "YOURVALIDATION.PEMHERE",
"ValidationClientName" : "chef-validator",
"Credentials" : "default",
"Location" : "https://mychefserver",
"ChefRepoType" : "chefserver",
"LockerType" : "chefrepo",
"Name" : "chefrepo",
"AccountId" : "default",
"Shared" : false
}

Platzieren Sie als Nächstes die Datei im Verzeichnis /opt/cycle_server/config/data. Sie wird automatisch importiert.

Benutzerdefinierte Benutzerbilder in Vorlagen

Azure CycleCloud unterstützt benutzerdefinierte Bilder in Vorlagen. Geben Sie die Bild-ID (Ressourcen-ID) direkt mit ImageIdoder fügen Sie das Bild zur Bildregistrierung hinzu. Wenn sich das Bild in der Registrierung befindet, verweisen Sie darauf mit oder ImageImageName auf Ihrem Knoten. Es wird im Bild-Dropdown auf der Clustererstellungsseite angezeigt.

Bilder in der Bildregistrierung bestehen aus einem Package Datensatz, der den Inhalt des logischen Bilds und mindestens einen entsprechenden Artifact Datensatz identifiziert, der die tatsächliche Bild-ID im entsprechenden Cloudanbieter angibt. Ein benutzerdefiniertes Image mit R kann beispielsweise aus diesem Paketdatensatz bestehen:

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

Nachdem Sie diesen Datensatz hinzugefügt haben, können Sie dieses Bild angeben, indem Sie entweder Image = R oder ImageName = r_execute in die Clustervorlage einschließen.

Wenn dieses Bild als einzelner virtueller Computer in useast mit einer ID /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImagevorhanden ist, muss das folgende Artefakt gespeichert werden:

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"

Sie müssen für das Artefakte angeben Provider .

Sie können beliebig viele Artefakte für ein bestimmtes Bildpaket hinzufügen, aber Sie müssen alle Artefakte einschließen, die für die Verwendung dieses Bilds in allen gewünschten "Speicherorten" erforderlich sind (eins pro Cloudanbieterkonto, Regionen, Projekte usw.). Der Name des Artefaktes ist nicht wichtig, außer dass es für alle Artefakte für ein bestimmtes Paket und eine bestimmte Version eindeutig sein muss. Die Verwendung einer Kombination aus anbieter- und anbieterspezifischen Details (z. B. Region) wird in der Regel empfohlen. CycleCloud wählt automatisch das richtige Artefakt aus, um dem Anbieter und allen anbieterspezifischen Details zu entsprechen, verwendet jedoch das Provider-Attribut (und region usw.), anstatt den Namen zu analysieren.

Wenn Sie mehrere Bildpakete mit demselben Namen hinzufügen, müssen sie unterschiedliche Versionsnummern aufweisen. Beim Starten einer Instanz wählt CycleCloud automatisch das Bild mit der höchsten Versionsnummer aus, indem die Versionsnummer als gepunktete Zeichenfolge behandelt und jeder Teil als Zahl verglichen wird. Um dies außer Kraft zu setzen, geben Sie ImageVersion für den Knoten entweder als Literal (z. B 1.2. ) oder als Wildcard (1.x) an.