你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 CycleCloud REST API

Cyclecloud 提供用于添加自动化和编程群集管理的 REST API 。 自定义自动缩放和自定义计划程序集成需要一个工具来评估工作负荷队列,并启动虚拟机 (VM) 与工作负荷需求相等。 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 在启动节点方面提供了极大的灵活性。 创建节点的唯一必需属性是 nodearraycount。 使用最低必需属性的调用将继承所有现有节点配置,并放置在可以满足请求的第一个存储桶中。

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 跟踪操作状态。 可以设置 request_id 参数来筛选 GET 节点响应。 这可以提供使用创建请求创建的所有节点的详细信息。

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

添加紧密耦合节点

可以使用列表中的多个有效计算机类型定义 CycleCloud nodearray。 ondemand假设 nodearray 同时具有Standard_F32s_v2_Standard_Hc44rs已定义。 对于每个 VM 大小,群集状态 API 至少显示此节点数组的两 buckets 个。 Standard_Hc44rs观察存储桶指示 infiniband 服务可用。 一些定量软件将写入到节点之间横向扩展,并利用节点之间的低延迟连接。

假设你运行的是此类工作负荷,作业调用由 Azure Infiniband 网络连接的四个节点。 为了确保四个节点最终位于同一放置组中,因此在同一 Infiniband 网络上,将使用 创建节点 API 调用 与 a 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"
    }
  ]
}