Verwenden der CycleCloud REST-API

Cyclecloud bietet eine REST-API zum Hinzufügen automatisierter und programmgesteuerter Clusterverwaltung. Benutzerdefinierte automatische Skalierung und benutzerdefinierte Schedulerintegration erfordern ein Tool, das eine Arbeitsauslastungswarteschlange auswertet und virtuelle Computer (VM) gleich der Workloadnachfrage startet. Die CycleCloud REST-API ist der geeignete Endpunkt für ein solches Tool und unterstützt Workloadanforderungen, die hohe Durchsatz- oder eng gekoppelte VM-Anordnungen umfassen können.

Ermitteln des Clusterstatus

Sie können CycleCloud abfragen, um den Clusterstatus zu ermitteln, der die VM-Verfügbarkeit in den einzelnen Clusterkonfigurationen angibt.

curl --location --request GET '${CC-URL}/clusters/${CLUSTER}/status' \
--header 'Authorization: Basic ****************************'

Hinweis

Die CycleCloud-API akzeptiert die standardauthentifizierung mit Benutzername und Kennwortkombination. Diese curl-API-Beispiele sind eine base64-codierte Zeichenfolge "user:password".

Die Antwort befindet sich im folgenden Formular. Die Antwort enthält einen vollständigen Satz von Knotenattributen, aber viele werden hier zur Einfachheit weggelassen.

{
  "state": "Started",
  "targetState": "Started",
  "maxCount": 100,
  "maxCoreCount": 10000,
  "nodearrays": [
    {
      "name": "ondemand",
      "maxCount": 100,
      "maxCoreCount": 500,
      "buckets": [
        {
        "bucketId": "cd56af52-abcd-1234-a4e7-e6a91ca519a2",
        "definition": {
            "machineType": "Standard_Fs32_v2"
          },
          "maxCount": 3,
          "maxCoreCount": 96,
          "activeCount": 0,
          "activeCoreCount": 0,
          "availableCount": 3,
          "availableCoreCount": 96,
          "quotaCount": 3,
          "quotaCoreCount": 100,
          "consumedCoreCount": 0,
          "maxPlacementGroupSize": 40,
          "maxPlacementGroupCoreSize": 1280,
          "valid": true,
          "placementGroups": [],
          "virtualMachine": {
            "vcpuCount": 32,
            "memory": 64.0,
            "infiniband": false
          }
          },
        {
        "bucketId": "d81e001a-abcd-1234-9754-79815cb7b225",
        "definition": {
            "machineType": "Standard_Hc44rs"
          },
          "maxCount": 11,
          "maxCoreCount": 484,
          "activeCount": 0,
          "activeCoreCount": 0,
          "availableCount": 11,
          "availableCoreCount": 484,
          "quotaCount": 200,
          "quotaCoreCount": 8800,
          "consumedCoreCount": 44,
          "maxPlacementGroupSize": 40,
          "maxPlacementGroupCoreSize": 1760,
          "valid": true,
          "placementGroups": [],
          "virtualMachine": {
            "vcpuCount": 44,
            "memory": 327.83,
            "infiniband": true
          }
        }
    ]
}

Erstellen von Knoten

Die API bietet große Flexibilität beim Starten von Knoten. Die einzigen erforderlichen Attribute zum Erstellen von Knoten sind nodearray und count. Ein Aufruf mit den minimal erforderlichen Attributen erbt alle vorhandenen Knotenkonfigurationen und wird im ersten Bucket platziert, der die Anforderung erfüllen kann.

curl --location --request POST '${CC-URL}/clusters/${CLUSTER}/nodes/create' \
--header 'Authorization: Basic ****************************' \
--header 'Content-Type: text/plain' \
--data-raw '{ "requestId" : "463270ca-abcd-1234-98d6-431ee3ef8ed5",
    "sets" : [
        {
            "count" : 1,
            "nodearray" : "ondemand"
        }
    ]
}'

Die Antwort auf diesen Aufruf stellt eine Vorgangs-ID bereit.

{
  "operationId": "3b53d621-abcd-1234-8876-6ec1158897ac",
  "sets": [
    {
      "added": 1
    }
  ]
}

Der Vorgangsstatus kann mithilfe der Operations-API nachverfolgt werden. Sie können den request_id Parameter festlegen, um die GET-Knotenantwort zu filtern. Dies kann Ihnen Details für alle Knoten bereitstellen, die mit der Erstellungsanforderung erstellt wurden.

curl --location --request GET '${CC-URL}/clusters/${CLUSTER}/nodes?request_id=463270ca-abcd-1234-98d6-431ee3ef8ed5' \

Hinzufügen eng gekoppelter Knoten

CycleCloud-Knotenarrays können mit mehreren gültigen Computertypen in einer Liste definiert werden. Nehmen wir an, dass das ondemand Knotenarray sowohl als Standard_Hc44rs auch Standard_F32s_v2_definiert ist. Die Clusterstatus-API zeigt mindestens zwei buckets für dieses Knotenarray für jede VM-Größe an. Beachten Sie, dass der Bucket angibt, dass der Standard_Hc44rsInfiniband-Dienst verfügbar ist. Einige quantitative Software wird geschrieben, um über Knoten hinweg zu skalieren und die Vorteile von Verbindungen mit niedriger Latenz zwischen Knoten zu nutzen.

Angenommen, Sie führen eine solche Workload aus, und ein Auftrag ruft vier Knoten an, die von Azure Infiniband-Netzwerken verbunden sind. Um sicherzustellen, dass die vier Knoten in derselben Platzierungsgruppe enden, und damit im gleichen Infiniband-Netzwerk, verwenden Sie den API-Aufruf von Knoten mit einem placementGroupId.

curl --location --request POST '${CC-URL}/clusters/${CLUSTER}/nodes/create' \
--header 'Authorization: Basic ****************************' \
--header 'Content-Type: text/plain' \
--data-raw '{ "requestId" : "463270ca-abcd-1234-98d6-431ee3ef8ed5",
    "sets" : [
        {
            "count" : 4,
            "nodearray" : "ondemand",
            "placementGroupId" : "pg0",
            "definition" : { "machineType" : "Standard_Hc44rs" }
        }
    ]
}'

Möglicherweise placementGroupId wird auf eine bereits vorhandene Platzierungsgruppe verwiesen. Dies ist eine logische Gruppe, die in CycleCloud verwendet wird und wenn eine bestimmte Platzierungsgruppe nicht vorhanden ist, wenn die Anforderung vorgenommen wird, erstellt CycleCloud eine neue Platzierungsgruppe. Sie können der gleichen Platzierungsgruppe zusätzliche VMs in zusätzlichen Knotenanforderungen hinzufügen.

Löschen von Knoten

An einem bestimmten Punkt möchte der Managerdienst Knoten beenden , die erstellt wurden.

curl --location --request POST '${CC-URL}/clusters/${CLUSTER}/nodes/terminate' \
--header 'Authorization: Basic ****************************' \
--header 'Content-Type: text/plain' \
--data-raw '{
 "ids" : ["62a1b116-abcd-1234-b290-b54ea23f1b68"]
}'
{
  "operationId": "15aaa844-abcd-1234-9591-8904c546028d",
  "nodes": [
    {
      "name": "ondemand-3",
      "id": "62a1b116-abcd-1234-b290-b54ea23f1b68",
      "status": "OK"
    }
  ]
}