Utilização da API cycleCloud REST
Cyclecloud fornece uma API REST para adicionar gestão automatizada e programática de clusters. A integração personalizada de autoscaling e de programador personalizado requer uma ferramenta que avalia uma fila de carga de trabalho e inicia máquinas virtuais (VM) iguais à procura de carga de trabalho. O CycleCloud REST API é o ponto final apropriado para tal ferramenta e suporta requisitos de carga de trabalho que podem incluir arranjos VM de alta potência ou de VM bem acoplados.
Determinar o estado do cluster
Pode consultar o CycleCloud para determinar o estado do cluster que indica a disponibilidade de VM em cada uma das configurações do cluster.
curl --location --request GET '${CC-URL}/clusters/${CLUSTER}/status' \
--header 'Authorization: Basic ****************************'
Nota
A API CycleCloud aceita a autenticação básica utilizando o nome de utilizador e a combinação de palavra-passe. Estes exemplos de API curl são uma cadeia codificada base64 'user:password'.
A resposta será na seguinte forma. A resposta contém um conjunto completo de atributos de nó, mas muitos são omitidos aqui para a simplicidade.
{
"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
}
}
]
}
Criar nódes
A API proporciona uma grande flexibilidade nos nós iniciais. Os únicos atributos necessários para criar nós são nodearray
e count
. Uma chamada utilizando os atributos mínimos exigidos herdará todas as configurações de nó existentes e será colocada no primeiro balde que pode satisfazer o pedido.
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"
}
]
}'
A resposta a esta chamada fornecerá uma identificação de operação.
{
"operationId": "3b53d621-abcd-1234-8876-6ec1158897ac",
"sets": [
{
"added": 1
}
]
}
O estado de funcionamento pode ser rastreado utilizando a API de operações. Pode definir o request_id
parâmetro para filtrar a resposta dos nós GET. Isto pode fornecer-lhe detalhes para todos os nós criados com o pedido de criação.
curl --location --request GET '${CC-URL}/clusters/${CLUSTER}/nodes?request_id=463270ca-abcd-1234-98d6-431ee3ef8ed5' \
Adicione os nómada bem acoplados
Os nodearrays CycleCloud podem ser definidos com vários tipos de máquinas válidos numa lista. Suponha que o ondemand
nó dedearray tem ambos Standard_F32s_v2_
e Standard_Hc44rs
definido. O estado de cluster API mostrará pelo menos dois buckets
para este nó para cada tamanho VM. Observe que o balde indica que o Standard_Hc44rs
serviço de infiniband está disponível. Algum software quantitativo é escrito para escalar em nós e aproveitar as ligações de baixa latência entre nós.
Suponha que esteja a executar tal carga de trabalho e um trabalho requer quatro nós ligados pela rede Azure Infiniband. Para garantir que os quatro nós acabem no mesmo grupo de colocação, e assim na mesma rede Infiniband, utilizará a chamada API de criar nós com um 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" }
}
]
}'
Pode placementGroupId
ou não referir um grupo de colocação pré-existente. Este é um grupo lógico usado no CycleCloud e se um grupo específico de colocação não existir quando o pedido é feito, então o CycleCloud criará um novo grupo de colocação. Pode adicionar VMs adicionais ao mesmo grupo de colocação em pedidos adicionais de criar nós.
Eliminar nós
Em algum momento, o serviço de gerentes quererá terminar os nós que foram criados .
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"
}
]
}