Uso de la API REST de CycleCloud

Cyclecloud proporciona una API REST para agregar administración de clústeres automatizada y mediante programación. El escalado automático personalizado y la integración del programador personalizado requiere una herramienta que evalúe una cola de cargas de trabajo e inicie Virtual Machines (VM) igual a la demanda de carga de trabajo. La API REST de CycleCloud es el punto de conexión adecuado para esta herramienta y admite los requisitos de carga de trabajo que pueden incluir arreglos de máquina virtual estrechamente acoplados o de alto rendimiento.

Determinación del estado del clúster

Puede consultar CycleCloud para determinar el estado del clúster que indica la disponibilidad de la máquina virtual en cada una de las configuraciones del clúster.

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

Nota:

La API de CycleCloud acepta la autenticación básica mediante la combinación de nombre de usuario y contraseña. Estos ejemplos de API de curl son una cadena codificada en base64 "user:password".

La respuesta tendrá el formato siguiente. La respuesta contiene un conjunto completo de atributos de nodo, pero muchos se omiten aquí por motivos de simplicidad.

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

Creación de nodos

La API proporciona una gran flexibilidad en los nodos de inicio. Los únicos atributos necesarios para crear nodos son nodearray y count. Una llamada que use los atributos mínimos necesarios heredará todas las configuraciones de nodo existentes y se colocará en el primer cubo que pueda satisfacer la solicitud.

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

La respuesta a esta llamada proporcionará un identificador de operación.

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

Se puede realizar un seguimiento del estado de la operación mediante la API de operaciones. Puede establecer el request_id parámetro para filtrar la respuesta de los nodos GET. Esto le puede proporcionar detalles para todos los nodos creados con la solicitud de creación.

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

Adición de nodos estrechamente acoplados

CycleCloud nodearrays se puede definir con varios tipos de máquina válidos en una lista. Supongamos que nodearray ondemand tiene Standard_F32s_v2_y Standard_Hc44rs define . La API de estado del clúster mostrará al menos dos buckets para este nodearray uno para cada tamaño de máquina virtual. Observe que el cubo indica que el Standard_Hc44rs servicio infiniband está disponible. Algunos software cuantitativos se escriben para escalar horizontalmente entre nodos y aprovechar las conexiones de baja latencia entre los nodos.

Supongamos que está ejecutando esta carga de trabajo y un trabajo llama a cuatro nodos conectados por redes de Azure Infiniband. Para asegurarse de que los cuatro nodos terminan en el mismo grupo de selección de ubicación y, por tanto, en la misma red infiniband, usará la llamada API de creación de nodos con .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" }
        }
    ]
}'

puede placementGroupId o no hacer referencia a un grupo de selección de ubicación preexistente. Se trata de un grupo lógico que se usa en CycleCloud y, si no existe un grupo de selección de ubicación específico cuando se realiza la solicitud, CycleCloud creará un nuevo grupo de selección de ubicación. Puede agregar máquinas virtuales adicionales al mismo grupo de selección de ubicación en solicitudes adicionales de creación de nodos.

Eliminación de nodos

En algún momento, el servicio de administrador querrá finalizar los nodos que se han creado.

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