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