CycleCloud REST API 사용

Cyclecloud는 자동화된 프로그래밍 방식 클러스터 관리를 추가하기 위한 REST API 를 제공합니다. 사용자 지정 자동 크기 조정 및 사용자 지정 스케줄러 통합에는 워크로드 큐를 평가하고 워크로드 수요와 동일한 VM(Virtual Machines)을 시작하는 도구가 필요합니다. CycleCloud REST API는 이러한 도구에 적합한 엔드포인트이며 높은 처리량 또는 긴밀하게 결합된 VM 배열을 포함할 수 있는 워크로드 요구 사항을 지원합니다.

클러스터 상태 확인

CycleCloud를 쿼리하여 각 클러스터 구성에서 VM 가용성을 나타내는 클러스터 상태를 확인할 수 있습니다.

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

참고

CycleCloud API는 사용자 이름 및 암호 조합을 사용하여 기본 인증을 허용합니다. 이러한 curl API 예제는 base64로 인코딩된 문자열 'user:password'입니다.

응답은 다음 형식입니다. 응답에는 전체 노드 특성 집합이 포함되어 있지만 단순성을 위해 여기에서는 많은 특성이 생략됩니다.

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

노드 만들기

API는 노드를 시작할 때 뛰어난 유연성을 제공합니다. 노드를 만드는 데 필요한 특성은 다음과 count같습니다nodearray. 필요한 최소 특성을 사용하는 호출은 모든 기존 노드 구성을 상속하고 요청을 충족할 수 있는 첫 번째 버킷에 배치됩니다.

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

이 호출에 대한 응답은 작업 ID를 제공합니다.

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

작업 API를 사용하여 작업 상태를 추적할 수 있습니다. GET 노드 응답을 필터링하는 매개 변수를 설정할 request_id 수 있습니다. 이렇게 하면 만들기 요청으로 만든 모든 노드에 대한 세부 정보를 제공할 수 있습니다.

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

긴밀하게 결합된 노드 추가

CycleCloud nodearray는 목록에 여러 개의 유효한 컴퓨터 형식으로 정의할 수 있습니다. nodearray에 ondemand 둘 다 Standard_F32s_v2_정의되어 있다고 Standard_Hc44rs 가정합니다. 클러스터 상태 API는 각 VM 크기에 대해 이 nodearray에 대해 2 buckets 개 이상을 표시합니다. 버킷이 Standard_Hc44rsinfiniband 서비스를 사용할 수 있음을 나타내는지 확인합니다. 일부 정량적 소프트웨어는 노드 간에 스케일 아웃하고 노드 간의 짧은 대기 시간 연결을 활용하기 위해 작성되었습니다.

이러한 워크로드를 실행하고 Azure Infiniband 네트워킹으로 연결된 4개의 노드에 대한 작업 호출을 실행한다고 가정합니다. 4개의 노드가 동일한 배치 그룹에 있으므로 동일한 Infiniband 네트워크에서 종료되도록 하려면 노드 만들기 API 호출 을 함께 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 기존 배치 그룹을 참조할 수 있거나 참조하지 않을 수 있습니다. CycleCloud에서 사용되는 논리 그룹이며 요청이 수행될 때 특정 배치 그룹이 없는 경우 CycleCloud는 새 배치 그룹을 만듭니다. 추가 노드 만들기 요청에서 동일한 배치 그룹에 추가 VM을 추가할 수 있습니다.

노드 삭제

어느 시점에서 관리자 서비스는 생성된 노드를 종료 하려고 합니다.

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