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