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 の例では、'user:password' に base64 でエンコードされた文字列を使用します。
応答は次の例のようになります。 応答にはノード属性の完全なセットが含まれていますが、わかりやすくするために、多くはここでは省略されています。
{
"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"
}
]
}'
この呼び出しに対する応答は、操作 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 ノード配列を定義できます。
ondemandノード配列にStandard_F32s_v2_とStandard_Hc44rsの両方が定義されているとします。 クラスターの状態 API には、このノード 配列に対して少なくとも 2 つの buckets が表示されます。1 つは VM サイズごとに 1 つです。
Standard_Hc44rs バケットは、infiniband サービスが使用可能であることを示します。 一部の定量的ソフトウェアはノード間でスケールアウトされ、ノード間の待機時間の短い接続を利用します。
あるワークロードを実行中で、Azure Infiniband ネットワークによって接続された 4 つのノードをジョブが要求する場合を想定しましょう。 4 つのノードが同じ配置グループに含まれるようにするため、同じ Infiniband ネットワーク上で、placementGroupIdでノード作成 API 呼び出しを使用します。
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 では、論理グループにこの ID が使用されます。 要求で存在しない配置グループが指定されている場合、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"
}
]
}