Korzystanie z interfejsu API REST usługi CycleCloud

Usługa Cyclecloud udostępnia interfejs API REST do dodawania zautomatyzowanego i programowego zarządzania klastrami. Niestandardowe skalowanie automatyczne i niestandardowa integracja harmonogramu wymaga narzędzia, które ocenia kolejkę obciążenia i uruchamia maszyny wirtualne równe zapotrzebowanie na obciążenie. Interfejs API REST usługi CycleCloud jest odpowiednim punktem końcowym dla takiego narzędzia i obsługuje wymagania dotyczące obciążeń, które mogą obejmować ustalenia dotyczące wysokiej przepływności lub ściśle powiązanej maszyny wirtualnej.

Określanie stanu klastra

Możesz wykonać zapytanie CycleCloud, aby określić stan klastra, który wskazuje 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 podstawowe uwierzytelnianie przy użyciu kombinacji nazwy użytkownika i hasła. Te przykłady interfejsu API curl to ciąg zakodowany w formacie base64 "user:password".

Odpowiedź będzie znajdować się w następującym formularzu. Odpowiedź zawiera kompletny 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ść w węzłach początkowych. Jedynymi wymaganymi atrybutami do utworzenia węzłów są nodearray i count. Wywołanie używające minimalnych wymaganych atrybutów dziedziczy wszystkie istniejące konfiguracje węzłów i zostanie umieszczone w pierwszym zasobniku, który może spełniać żą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 zapewni identyfikator operacji.

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

Stan operacji można śledzić przy użyciu interfejsu API operacji. Parametr można ustawić request_id tak, aby filtrować odpowiedź węzłów GET. Może to zapewnić 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

Nodearrays CycleCloud można zdefiniować z wieloma prawidłowymi typami maszyn na liście. Załóżmy, że środowisko ondemand nodearray ma zarówno środowisko, jak Standard_F32s_v2_i Standard_Hc44rs zdefiniowano. Interfejs API stanu klastra wyświetli co najmniej dwa buckets dla tego węzłaarray jeden dla każdego rozmiaru maszyny wirtualnej. Zwróć uwagę, że zasobnik wskazuje, Standard_Hc44rs że usługa infiniband jest dostępna. Niektóre oprogramowanie ilościowe jest zapisywane w celu skalowania w poziomie między węzłami i korzystania z połączeń o małym opóźnieniu między węzłami.

Załóżmy, że uruchamiasz takie obciążenie, a zadanie wywołuje cztery węzły połączone z siecią Azure Infiniband. Aby upewnić się, że cztery węzły kończą się w tej samej grupie umieszczania, a tym samym w tej samej sieci Infiniband, użyjesz wywołania interfejsu API tworzenia węzłów 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 lub nie może odwoływać się do wstępnie istniejącej grupy umieszczania. Jest to grupa logiczna używana w usłudze CycleCloud, a jeśli określona grupa umieszczania nie istnieje po wysłaniu żądania, usługa CycleCloud utworzy nową grupę umieszczania. Dodatkowe maszyny wirtualne można dodać do tej samej grupy umieszczania w dodatkowych żądaniach tworzenia węzłów.

Usuwanie węzłów

W pewnym momencie usługa menedżera będzie chciała zakończyć węzły , które zostały utworzone.

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