De CycleCloud REST API gebruiken

Cyclecloud biedt een REST API voor het toevoegen van geautomatiseerd en programmatisch clusterbeheer. Voor aangepaste automatische schaalaanpassing en integratie van aangepaste planners is een hulpprogramma vereist waarmee een workloadwachtrij wordt geƫvalueerd en virtuele machines (VM) worden gestart die gelijk zijn aan de workloadvraag. De CycleCloud REST API is het juiste eindpunt voor een dergelijk hulpprogramma en ondersteunt workloadvereisten die mogelijk hoge doorvoer of nauw gekoppelde VM-arrangementen bevatten.

Clusterstatus bepalen

U kunt query's uitvoeren op CycleCloud om de clusterstatus te bepalen die de beschikbaarheid van vm's in elk van de clusterconfiguraties aangeeft.

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

Notitie

De CycleCloud-API accepteert basisverificatie met behulp van combinatie van gebruikersnaam en wachtwoord. Deze curl-API-voorbeelden zijn een met base64 gecodeerde tekenreeks 'user:password'.

Het antwoord wordt weergegeven in de volgende vorm. Het antwoord bevat een volledige set knooppuntkenmerken, maar veel worden hier weggelaten om het eenvoudig te maken.

{
  "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
          }
        }
    ]
}

Knooppunten maken

De API biedt grote flexibiliteit bij het starten van knooppunten. De enige vereiste kenmerken voor het maken van knooppunten zijn nodearray en count. Een aanroep met de minimaal vereiste kenmerken neemt alle bestaande knooppuntconfiguraties over en wordt in de eerste bucket geplaatst die aan de aanvraag kan voldoen.

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"
        }
    ]
}'

Het antwoord op deze aanroep geeft een bewerkings-id op.

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

De bewerkingsstatus kan worden bijgehouden met behulp van de bewerkings-API. U kunt de request_id parameter instellen om het antwoord op GET-knooppunten te filteren. Dit kan u details geven voor alle knooppunten die zijn gemaakt met de aanvraag voor maken.

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

Nauw gekoppelde knooppunten toevoegen

CycleCloud-knooppuntarrays kunnen worden gedefinieerd met meerdere geldige machinetypen in een lijst. Stel dat de ondemand knooppuntmaarray beide Standard_F32s_v2_en Standard_Hc44rs gedefinieerd heeft. De clusterstatus-API toont ten minste twee buckets voor deze knooppuntmaarray voor elke VM-grootte. Houd er rekening mee dat de Standard_Hc44rs bucket aangeeft dat de infiniband-service beschikbaar is. Sommige kwantitatieve software wordt geschreven om uit te schalen over knooppunten en te profiteren van verbindingen met lage latentie tussen knooppunten.

Stel dat u een dergelijke workload uitvoert en dat er een taak wordt aanroepen voor vier knooppunten die zijn verbonden met Azure Infiniband-netwerken. Om ervoor te zorgen dat de vier knooppunten in dezelfde plaatsingsgroep terechtkomen, en dus op hetzelfde Infiniband-netwerk, gebruikt u de API-aanroep voor knooppunten maken met een 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" }
        }
    ]
}'

De placementGroupId groep kan al dan niet verwijzen naar een bestaande plaatsingsgroep. Dit is een logische groep die wordt gebruikt in CycleCloud en als er geen specifieke plaatsingsgroep bestaat wanneer de aanvraag wordt gedaan, maakt CycleCloud een nieuwe plaatsingsgroep. U kunt extra VM's toevoegen aan dezelfde plaatsingsgroep in aanvullende aanvragen voor knooppunten maken.

Knooppunten verwijderen

Op een bepaald moment wil de managerservice knooppunten beƫindigen die zijn gemaakt.

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"
    }
  ]
}