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.json
werden. 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 a
b
und , 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 Attribute1
Attribute2
wäre die Zeichenfolge"123456"
.456
Beachten Sie, dass ${param}
es identisch $param
ist 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 ImageId
oder fügen Sie das Bild zur Bildregistrierung hinzu. Wenn sich das Bild in der Registrierung befindet, verweisen Sie darauf mit oder Image
ImageName
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/MyCustomImage
vorhanden 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.