Udostępnij przez


Korzystanie z interfejsu API REST usługi CycleCloud

Usługa CycleCloud udostępnia interfejs API REST umożliwiający dodawanie zautomatyzowanego i programowego zarządzania klastrami. Niestandardowe skalowanie automatyczne i niestandardowa integracja harmonogramu wymagają narzędzia, które ocenia kolejkę obciążenia i uruchamia maszyny wirtualne, aby odpowiadały zapotrzebowaniu na obciążenie. Interfejs API REST CycleCloud jest odpowiednim punktem końcowym dla takiego narzędzia i obsługuje wymagania dotyczące obciążeń, które mogą obejmować wysoką przepływność lub ściśle powiązane rozwiązania maszyn wirtualnych.

Określanie stanu klastra

Możesz wysłać zapytanie do aplikacji CycleCloud, aby określić stan klastra. Stan pokazuje dostępność maszyny wirtualnej w każdej konfiguracji klastra.

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

Uwaga

Interfejs API CycleCloud akceptuje uwierzytelnianie podstawowe przy użyciu nazwy użytkownika i hasła. Te przykłady interfejsu API curl używają ciągu zakodowanego w formacie base64 dla ciągu "user:password".

Odpowiedź wygląda jak w poniższym przykładzie. Odpowiedź zawiera pełny zestaw atrybutów węzła, ale wiele z tych elementów zostało pominiętych tutaj dla uproszczenia.

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

Tworzenie węzłów

Interfejs API zapewnia dużą elastyczność podczas uruchamiania węzłów. Jedynymi wymaganymi atrybutami do utworzenia węzłów są nodearray i count. Wywołanie korzystające z tych minimalnych wymaganych atrybutów dziedziczy wszystkie istniejące konfiguracje węzłów. Węzły trafiają do pierwszego wiadra, które może spełnić żądanie.

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

Odpowiedź na to wywołanie zawiera identyfikator operacji.

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

Stan operacji można śledzić za pomocą API operacji. Ustaw parametr , request_id aby filtrować odpowiedź węzłów GET. Ten filtr zawiera szczegółowe informacje dotyczące wszystkich węzłów utworzonych za pomocą żądania tworzenia.

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

Dodawanie ściśle powiązanych węzłów

Można zdefiniować tablice węzłów CycleCloud z wieloma prawidłowymi typami maszyn na liście. Załóżmy, że w tablicy węzłów ondemand są zdefiniowane zarówno Standard_F32s_v2_, jak i Standard_Hc44rs. Interfejs API stanu klastra pokazuje co najmniej dwa buckets dla tej tablicy węzłów, po jednym dla każdego rozmiaru maszyny wirtualnej. Zasobnik Standard_Hc44rs wskazuje, że usługa infiniband jest dostępna. Niektóre oprogramowanie analityczne skaluje się w poziomie między węzłami i wykorzystuje połączenia o małych opóźnieniach między węzłami.

Załóżmy, że uruchamiasz takie obciążenie, a zadanie wymaga czterech węzłów połączonych z wykorzystaniem sieci InfiniBand w Azure. Aby zagwarantować, że cztery węzły znajdą się w tej samej grupie lokalizacyjnej, a tym samym w tej samej sieci Infiniband, użyj wywołania API 'create nodes' z elementem 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" }
        }
    ]
}'

Element placementGroupId może odwoływać się do wcześniej istniejącej grupy umieszczania lub nie. Usługa CycleCloud używa tego identyfikatora dla grupy logicznej. Jeśli żądanie określa grupę umieszczania, która nie istnieje, usługa CycleCloud tworzy nową grupę umieszczania. Możesz dodać więcej maszyn wirtualnych do tej samej grupy przyporządkowania w dodatkowych żądaniach utworzenia węzłów.

Usuwanie węzłów

W pewnym momencie usługa menedżera musi zakończyć utworzone węzły .

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