Использование REST API CycleCloud
Cyclecloud предоставляет REST API для добавления автоматизированного и программного управления кластерами. Для пользовательского автомасштабирования и интеграции настраиваемого планировщика требуется средство, которое оценивает очередь рабочей нагрузки и запускает виртуальные машины, равные требованию рабочей нагрузки. REST API CycleCloud — это подходящая конечная точка для такого средства и поддерживает требования к рабочей нагрузке, которые могут включать в себя высокую пропускную способность или тесно связанные расположения виртуальных машин.
Определение состояния кластера
Вы можете запросить CycleCloud, чтобы определить состояние кластера, указывающее доступность виртуальной машины в каждой конфигурации кластера.
curl --location --request GET '${CC-URL}/clusters/${CLUSTER}/status' \
--header 'Authorization: Basic ****************************'
Примечание
API CycleCloud принимает обычную проверку подлинности с использованием сочетания имени пользователя и пароля. Эти примеры API curl представляют собой строку в кодировке 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 обеспечивает большую гибкость в начальных узлах. Единственными обязательными атрибутами для создания узлов являются nodearray
и count
. Вызов, использующий минимальные обязательные атрибуты, наследует все существующие конфигурации узлов и помещается в первый контейнер, который может удовлетворить запрос.
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"
}
]
}'
Ответ на этот вызов предоставит идентификатор операции.
{
"operationId": "3b53d621-abcd-1234-8876-6ec1158897ac",
"sets": [
{
"added": 1
}
]
}
Состояние операции можно отслеживать с помощью API операций. Можно задать request_id
параметр для фильтрации ответа get nodes. Это позволяет получить подробные сведения обо всех узлах, созданных с помощью запроса на создание.
curl --location --request GET '${CC-URL}/clusters/${CLUSTER}/nodes?request_id=463270ca-abcd-1234-98d6-431ee3ef8ed5' \
Добавление тесно связанных узлов
Nodearrays CycleCloud можно определить с несколькими допустимыми типами компьютеров в списке. Предположим, что ondemand
nodearray имеет оба Standard_F32s_v2_
и Standard_Hc44rs
определены. API состояния кластера будет отображать по крайней мере два buckets
для этого nodearray по одному для каждого размера виртуальной машины. Обратите внимание, что контейнер Standard_Hc44rs
указывает, что доступна служба infiniband . Некоторые количественные программы записываются для горизонтального масштабирования между узлами и используют преимущества подключений с низкой задержкой между узлами.
Предположим, что вы используете такую рабочую нагрузку и вызовы задания для четырех узлов, подключенных к сети Azure Infiniband. Чтобы убедиться, что четыре узла в конечном итоге в одной группе размещения и, таким образом, в той же сети 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 создаст новую группу размещения. Дополнительные виртуальные машины можно добавить в ту же группу размещения в дополнительных запросах на создание узлов.
Удаление узлов
В какой-то момент службе диспетчера потребуется завершить созданные узлы .
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"
}
]
}