Använda CycleCloud REST API

Cyclecloud tillhandahåller ett REST-API för att lägga till automatiserad och programmässig klusterhantering. Anpassad autoskalning och anpassad scheduler-integrering kräver ett verktyg som utvärderar en arbetsbelastningskö och startar Virtual Machines (VM) som är lika med arbetsbelastningsbehovet. CycleCloud REST-API:et är lämplig slutpunkt för ett sådant verktyg och stöder arbetsbelastningskrav som kan innehålla högt dataflöde eller nära kopplade VM-arrangemang.

Fastställa klusterstatus

Du kan fråga CycleCloud för att fastställa klusterstatus som anger vm-tillgänglighet i var och en av klusterkonfigurationerna.

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

Anteckning

CycleCloud-API:et accepterar grundläggande autentisering med hjälp av kombination av användarnamn och lösenord. Dessa curl API-exempel är en base64-kodad sträng "användare:lösenord".

Svaret visas i följande format. Svaret innehåller en fullständig uppsättning nodattribut, men många utelämnas här för enkelhetens skull.

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

Skapa noder

API:et ger stor flexibilitet när det gäller att starta noder. De enda attribut som krävs för att skapa noder är nodearray och count. Ett anrop som använder de minsta obligatoriska attributen ärver alla befintliga nodkonfigurationer och placeras i den första bucketen som kan uppfylla begäran.

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

Svaret på det här anropet anger ett åtgärds-ID.

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

Åtgärdsstatusen kan spåras med hjälp av åtgärds-API:et. Du kan ange parametern request_id för att filtrera GET-nodsvaret. Detta kan ge dig information om alla noder som skapats med create-begäran.

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

Lägg till nära kopplade noder

CycleCloud-nodmatriser kan definieras med flera giltiga datortyper i en lista. Anta att ondemand nodearray har både Standard_F32s_v2_och Standard_Hc44rs definierats. Klusterstatus-API:et visar minst två buckets för den här nodmatrisen en för varje VM-storlek. Observera att bucketen Standard_Hc44rs anger att infiniband-tjänsten är tillgänglig. Vissa kvantitativa program skrivs för att skala ut mellan noder och dra nytta av anslutningar med låg latens mellan noder.

Anta att du kör en sådan arbetsbelastning och ett jobb anropar fyra noder som är anslutna via Azure Infiniband-nätverk. För att säkerställa att de fyra noderna hamnar i samma placeringsgrupp, och därmed i samma Infiniband-nätverk, använder du API-anropet create nodes med ett 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" }
        }
    ]
}'

placementGroupId kanske eller kanske inte refererar till en befintlig placeringsgrupp. Det här är en logisk grupp som används i CycleCloud och om det inte finns någon specifik placeringsgrupp när begäran görs skapar CycleCloud en ny placeringsgrupp. Du kan lägga till ytterligare virtuella datorer i samma placeringsgrupp i ytterligare begäranden om att skapa noder.

Ta bort noder

Vid något tillfälle vill chefstjänsten avsluta noder som har skapats.

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