次の方法で共有


Azure CLI を使用してクラスターを作成およびプロビジョニングする

この記事では、Azure コマンド ライン インターフェイス (AzCLI) を使用してクラスターを作成する方法について説明します。 このドキュメントでは、クラスターの状態の確認、更新、または削除の方法についても説明します。

前提条件

  • Azure リージョンにネットワーク ファブリック コントローラーとクラスター マネージャーが存在することを確認する
  • ネットワーク ファブリックが正常にプロビジョニングされたことを確認する

API ガイドとメトリック

API ガイドには、リソース プロバイダーとリソース モデル、API に関する情報が記載されています。

ログ データから生成されたメトリックは、Azure Monitor メトリックで使用できます。

制限事項

  • 名前付け - 名前付けルールについては、こちらを参照してください。

クラスターの作成

インフラストラクチャ クラスター リソースは、クラスター マネージャー内のプラットフォームのオンプレミス デプロイを表します。 他のプラットフォーム固有のリソースはすべて、そのライフサイクルの間、これに依存します。

このオンプレミスの展開の前に、ネットワーク ファブリックを作成する必要があります。 各 Operator Nexus オンプレミス インスタンスとネットワーク ファブリックの間には 1 対 1 の関連付けがあります。

Azure CLI を使用してクラスターを作成します。

az networkcloud cluster create --name "$CLUSTER_NAME" --location "$LOCATION" \
  --extended-location name="$CL_NAME" type="CustomLocation" \
  --resource-group "$CLUSTER_RG" \
  --analytics-workspace-id "$LAW_ID" \
  --cluster-location "$CLUSTER_LOCATION" \
  --network-rack-id "$AGGR_RACK_RESOURCE_ID" \
  --rack-sku-id "$AGGR_RACK_SKU"\
  --rack-serial-number "$AGGR_RACK_SN" \
  --rack-location "$AGGR_RACK_LOCATION" \
  --bare-metal-machine-configuration-data "["$AGGR_RACK_BMM"]" \
  --storage-appliance-configuration-data '[{"adminCredentials":{"password":"$SA_PASS","username":"$SA_USER"},"rackSlot":1,"serialNumber":"$SA_SN","storageApplianceName":"$SA_NAME"}]' \
  --compute-rack-definitions '[{"networkRackId": "$COMPX_RACK_RESOURCE_ID", "rackSkuId": "$COMPX_RACK_SKU", "rackSerialNumber": "$COMPX_RACK_SN", "rackLocation": "$COMPX_RACK_LOCATION", "storageApplianceConfigurationData": [], "bareMetalMachineConfigurationData":[{"bmcCredentials": {"password":"$COMPX_SVRY_BMC_PASS", "username":"$COMPX_SVRY_BMC_USER"}, "bmcMacAddress":"$COMPX_SVRY_BMC_MAC", "bootMacAddress":"$COMPX_SVRY_BOOT_MAC", "machineDetails":"$COMPX_SVRY_SERVER_DETAILS", "machineName":"$COMPX_SVRY_SERVER_NAME"}]}]'\
  --managed-resource-group-configuration name="$MRG_NAME" location="$MRG_LOCATION" \
  --network fabric-id "$NF_ID" \
  --cluster-service-principal application-id="$SP_APP_ID" \
    password="$SP_PASS" principal-id="$SP_ID" tenant-id="$TENANT_ID" \
  --subscription "$SUBSCRIPTION_ID" \
  --secret-archive "{key-vault-id:$KVRESOURCE_ID, use-key-vault:true}" \
  --cluster-type "$CLUSTER_TYPE" --cluster-version "$CLUSTER_VERSION" \
  --tags $TAG_KEY1="$TAG_VALUE1" $TAG_KEY2="$TAG_VALUE2"

クラスター操作のパラメーター

パラメーター名 説明
CLUSTER_NAME クラスターのリソース名
LOCATION クラスターがデプロイされる Azure リージョン
CL_NAME Azure portal のクラスター マネージャーのカスタムの場所
CLUSTER_RG クラスター リソース グループ名
LAW_ID クラスターの Log Analytics ワークスペース ID
CLUSTER_LOCATION クラスターのローカル名
AGGR_RACK_RESOURCE_ID アグリゲーター ラックの RackID
AGGR_RACK_SKU アグリゲーター ラックのラック SKU *「Operator Nexus ネットワーク クラウド SKU」を参照してください
AGGR_RACK_SN アグリゲーター ラックのラックのシリアル番号
AGGR_RACK_LOCATION アグリゲーター ラックのラックの物理的な場所
AGGR_RACK_BMM 単一ラック展開の場合にのみ使い、マルチラックの場合は空にします
SA_NAME ストレージ アプライアンス デバイス名
SA_PASS ストレージ アプライアンス管理者のパスワード
SA_USER ストレージ アプライアンス管理者ユーザー
SA_SN ストレージ アプライアンスのシリアル番号
COMPX_RACK_RESOURCE_ID CompX ラックの RackID: compute-rack-definitions 内の各ラックに対して繰り返します
COMPX_RACK_SKU CompX ラックのラック SKU。compute-rack-definitions 内の各ラックに対して繰り返します *「Operator Nexus ネットワーク クラウド SKU」を参照してください
COMPX_RACK_SN CompX ラックのラックのシリアル番号: compute-rack-definitions 内の各ラックに対して繰り返します
COMPX_RACK_LOCATION CompX ラックのラックの物理的な場所: compute-rack-definitions 内の各ラックに対して繰り返します
COMPX_SVRY_BMC_PASS CompX ラック ServerY ベースボード管理コントローラー (BMC) のパスワード (compute-rack-definitions の各ラックとラック内の各サーバーに対して繰り返します)
COMPX_SVRY_BMC_USER CompX ラック ServerY BMC のユーザー (compute-rack-definitions の各ラックとラック内の各サーバーに対して繰り返します)
COMPX_SVRY_BMC_MAC CompX ラック ServerY BMC の MAC アドレス (compute-rack-definitions の各ラックとラック内の各サーバーに対して繰り返します)
COMPX_SVRY_BOOT_MAC CompX ラック ServerY ブート ネットワーク インターフェイス カード (NIC) の MAC アドレス (compute-rack-definitions の各ラックとラック内の各サーバーに対して繰り返します)
COMPX_SVRY_SERVER_DETAILS CompX ラック ServerY の詳細 (compute-rack-definitions の各ラックとラック内の各サーバーに対して繰り返します)
COMPX_SVRY_SERVER_NAME CompX ラック ServerY の名前 (compute-rack-definitions の各ラックとラック内の各サーバーに対して繰り返します)
MRG_NAME クラスター管理対象リソース グループ名
MRG_LOCATION クラスターの Azure リージョン
NF_ID ネットワーク ファブリックへの参照
SP_APP_ID サービス プリンシパルのアプリ ID
SP_PASS サービス プリンシパルのパスワード
SP_ID サービス プリンシパル ID
TENANT_ID サブスクリプション テナント ID
SUBSCRIPTION_ID サブスクリプション ID
KV_RESOURCE_ID Key Vault ID
CLUSTER_TYPE クラスターの種類 (Single または MultiRack)
CLUSTER_VERSION クラスターのネットワーク クラウド (NC) のバージョン
TAG_KEY1 クラスター作成に渡す省略可能な tag1
TAG_VALUE1 クラスター作成に渡す省略可能な tag1 値
TAG_KEY2 クラスター作成に渡す省略可能な tag2
TAG_VALUE2 クラスター作成に渡す省略可能な tag2 値

クラスター ID

2024-07-01 API バージョンから、顧客がクラスターにマネージド ID を割り当てることができます。 システム割り当てとユーザー割り当ての両方のマネージド ID がサポートされています。

マネージド ID は、次のパラメーターを指定することで、作成操作または更新操作中にクラスターに割り当てることができます。

  • --mi-system-assigned - システム割り当てマネージド ID を有効にします。 追加した ID は、現時点では API 呼び出しによってのみ削除できます。
  • --mi-user-assigned - 追加するユーザー割り当てマネージド ID のスペース区切りのリソース ID。 追加した ID は、現時点では API 呼び出しによってのみ削除できます。

Azure Resource Manager テンプレート エディターを使ってクラスターを作成する

クラスターを作成するもう 1 つの方法は、ARM テンプレート エディターを使うことです。

この方法でクラスターを作成するには、テンプレート ファイル (cluster.jsonc) とパラメーター ファイル (cluster.parameters.jsonc) を指定する必要があります。 これら 2 つのファイルを使う 8 ラック 2M16C SKU クラスターの例については、次を参照してください。

cluster.jsonccluster.parameters.jsonc

Note

正しい書式を取得するには、未加工のコード ファイルをコピーします。 cluster.parameters.jsonc ファイル内の値は顧客固有であり、完全なリストではない可能性があります。 特定の環境に合わせて値フィールドを更新してください。

  1. Web ブラウザーで Azure portal に移動してサインインします。
  2. Azure portal の検索バーで 'カスタム テンプレートのデプロイ' を検索し、使用できるサービスからそれを選びます。
  3. [エディターで独自のテンプレートを作成する] をクリックします。
  4. [ファイルの読み込み] をクリックします。 cluster.jsonc テンプレート ファイルを見つけてアップロードします。
  5. [保存] をクリックします。
  6. [パラメーターの編集] をクリックします。
  7. [ファイルの読み込み] をクリックします。 cluster.parameters.jsonc パラメーター ファイルを見つけてアップロードします。
  8. [保存] をクリックします。
  9. 適切なサブスクリプションを選択します。
  10. リソース グループを検索して、既に存在するかどうかを確認します。 ない場合は、新しいリソース グループを作成します。
  11. すべてのインスタンス詳細が正しいことを確認します。
  12. [Review + create](レビュー + 作成) をクリックします。

クラスターの検証テスト

Operator Nexus クラスターの作成に成功すると、サブスクリプション内に Azure リソースが作成されます。 cluster create が成功すると、クラスター ID、クラスターのプロビジョニング状態、デプロイ状態が返されます。

クラスターの状態を確認する:

az networkcloud cluster show --resource-group "$CLUSTER_RG" \
  --cluster-name "$CLUSTER_RESOURCE_NAME"

リソースの provisioningState が表示されたら、クラスターの作成は完了です: "provisioningState": "Succeeded"

クラスターのログ記録

クラスターの作成ログは、次の場所で確認できます。

  1. Azure portal の Resource または ResourceGroup のアクティビティ ログ。
  2. コマンドラインで--debug フラグを渡した Azure CLI。

クラスターを展開する

クラスターを作成した後、クラスターのデプロイ アクションをトリガーできます。 クラスターのデプロイ アクションによって、ブートストラップ イメージが作成され、クラスターがデプロイされます。

クラスターのデプロイにより、クラスター マネージャーで一連のイベントが開始されます

  1. クラスターとラックのプロパティの検証。
  2. エフェメラル ブートストラップ クラスターの起動可能イメージの生成 (インフラストラクチャの検証)。
  3. 対象のブートストラップ マシンの Intelligent Platform Management Interface (IPMI) インターフェイスの操作。
  4. ハードウェア検証チェックの実行。
  5. クラスターのデプロイ プロセスの監視。

オンプレミスのクラスターを展開する:

az networkcloud cluster deploy \
  --name "$CLUSTER_NAME" \
  --resource-group "$CLUSTER_RG" \
  --subscription "$SUBSCRIPTION_ID" \
  --no-wait --debug

ヒント

az networkcloud cluster deploy コマンドの状態を確認するには、--debug フラグを使用して実行します。 これにより、operationStatuses リソースのクエリに使用する Azure-AsyncOperation または Location ヘッダーを取得できます。 詳細な手順については、「クラスター デプロイ失敗」セクションを参照してください。 必要に応じて、コマンドは --no-wait フラグを使用して非同期的に実行できます。

ハードウェア検証を使用したクラスターのデプロイ

クラスターのデプロイ プロセス中に実行される手順の 1 つは、ハードウェアの検証です。 ハードウェア検証手順では、さまざまなテストを実行し、クラスターのラック定義を通じて提供されたマシンに対してチェックを行います。 これらのチェックの結果と、ユーザーがスキップしたマシンに基づいて、デプロイを続行するために必要なしきい値を満たすのに十分なノードが渡されたかどうか、または使用可能かどうかの判断が行われます。

重要

ハードウェア検証プロセスは、クラスターの作成時に指定した analyticsWorkspaceId に結果を書き込みます。 さらに、クラスター オブジェクトに指定されたサービス プリンシパルは、Log Analytics ワークスペース データ収集 API に対する認証に使用されます。 この機能は、新しいデプロイ中にのみ表示されます (グリーン フィールド)。既存のクラスターでは、ログはさかのぼって使用できません。

Note

クラスターのデプロイ中に RAID コントローラーがリセットされて、サーバーの仮想ディスクからすべてのデータがワイプされます。 通常、ベースボード管理コントローラー (BMC) の仮想ディスク アラートはすべて、物理ディスクや RAID コントローラーにそれ以外のアラートがない限り無視できます。

既定では、ハードウェア検証プロセスによって、構成されたクラスター analyticsWorkspaceId に結果が書き込まれます。 ただし、Log Analytics ワークスペースのデータ収集とスキーマ評価の性質上、インジェストの遅延が発生し、数分以上かかる場合があります。 このため、Log Analytics ワークスペースに結果を書き込めなかった場合でも、クラスターのデプロイが続行されます。 この可能性のあるイベントに対処するために、冗長性のために結果もクラスター マネージャー内に記録されます。

指定されたクラスター オブジェクトの Log Analytics ワークスペースに、クラスター名がプレフィックスとして、サフィックスが *_CL である新しいカスタム テーブルが表示されます。 LAW リソースの Logs セクションでは、新しい *_CL カスタム ログ テーブルに対してクエリを実行できます。

特定のベア メタル マシンをスキップするクラスター デプロイ

--skip-validation-for-machines パラメーターは、ハードウェア検証の間にスキップする必要がある、クラスター内のベア メタル マシンの名前を表します。 スキップされたノードは検証されず、ノード プールに追加されません。 さらに、スキップされたノードは、しきい値の計算で使用された合計に対してカウントされません。

az networkcloud cluster deploy \
  --name "$CLUSTER_NAME" \
  --resource-group "$CLUSTER_RG" \
  --subscription "$SUBSCRIPTION_ID" \
  --skip-validations-for-machines "$COMPX_SVRY_SERVER_NAME"

クラスター デプロイ失敗

非同期操作の状態を追跡するには、--debug フラグを有効にして実行します。 --debug を指定すると、要求の進行状況を監視できます。 操作の状態 URL は、作成要求に対する HTTP 応答で Azure-AsyncOperation または Location ヘッダーを探してデバッグ出力を調べることで確認できます。 ヘッダーは、HTTP API 呼び出しで使用される OPERATION_ID フィールドを提供できます。

OPERATION_ID="12312312-1231-1231-1231-123123123123*99399E995..."
az rest -m GET -u "https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/providers/Microsoft.NetworkCloud/locations/${LOCATION}/operationStatuses/${OPERATION_ID}?api-version=2022-12-12-preview"

出力は JSON 構造体の例に似ています。 エラー コードが HardwareValidationThresholdFailed の場合、ハードウェアの検証が失敗したベアメタル コンピューターの一覧がエラー メッセージに含まれます (COMP0_SVR0_SERVER_NAMECOMP1_SVR1_SERVER_NAME など)。 これらの名前を使用して、ログを解析して詳細を確認できます。

{
  "endTime": "2023-03-24T14:56:59.0510455Z",
  "error": {
    "code": "HardwareValidationThresholdFailed",
    "message": "HardwareValidationThresholdFailed error hardware validation threshold for cluster layout plan is not met for cluster $CLUSTER_NAME in namespace nc-system with listed failed devices $COMP0_SVR0_SERVER_NAME, $COMP1_SVR1_SERVER_NAME"
  },
  "id": "/subscriptions/$SUBSCRIPTION_ID/providers/Microsoft.NetworkCloud/locations/$LOCATION/operationStatuses/12312312-1231-1231-1231-123123123123*99399E995...",
  "name": "12312312-1231-1231-1231-123123123123*99399E995...",
  "resourceId": "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$CLUSTER_RESOURCE_GROUP/providers/Microsoft.NetworkCloud/clusters/$CLUSTER_NAME",
  "startTime": "2023-03-24T14:56:26.6442125Z",
  "status": "Failed"
}

別の例については、「Azure CLI を使用した非同期操作の追跡」に関する記事を参照してください。 特定のマシンが検証またはデプロイに失敗した場合に役立つ可能性のある情報については、「BMM プロビジョニングのトラブルシューティング」の記事を参照してください。

クラスターのデプロイ検証

ポータル上で、または Azure CLI を使用して、クラスターの状態を表示します。

az networkcloud cluster show --resource-group "$CLUSTER_RG" \
  --name "$CLUSTER_NAME"

detailedStatus が Deploying に設定され、detailedStatusMessage にデプロイの進行状況が示される場合、クラスターのデプロイは進行中です。 detailedStatusMessage で示されるデプロイの進行状況の例としては、Hardware validation is in progress. (クラスターがハードウェア検証を使ってデプロイされている場合)、Cluster is bootstrapping.KCP initialization in progress.Management plane deployment in progress.Cluster extension deployment in progress.waiting for "<rack-ids>" to be ready などがあります。

Azure portal のスクリーンショット。クラスター デプロイ進捗の kcp init を示しています。

Azure portal のスクリーンショット。クラスター デプロイ進捗の拡張機能アプリケーションを示しています。

detailedStatus が Running に設定され、detailedStatusMessage にメッセージ Cluster is up and running が表示されると、クラスターのデプロイは完了します。

Azure portal のスクリーンショット。クラスター デプロイの完了を示しています。

クラスターの管理バージョンを表示します:

az k8s-extension list --cluster-name "$CLUSTER_NAME" --resource-group "$MRG_NAME" --cluster-type connectedClusters --query "[?name=='nc-platform-extension'].{name:name, extensionType:extensionType, releaseNamespace:scope.cluster.releaseNamespace,provisioningState:provisioningState,version:version}" -o table --subscription "$SUBSCRIPTION_ID"

クラスターのデプロイ ログ

クラスターの作成ログは、次の場所で確認できます。

  1. Azure portal の Resource または ResourceGroup のアクティビティ ログ。
  2. コマンドラインで--debug フラグを渡した Azure CLI。

Azure portal のスクリーンショット。クラスター デプロイ進捗のアクティビティ ログを示しています。

API 経由でクラスター ID を更新する

クラスターのマネージド ID は、CLI 経由で割り当てることができます。 ID の割り当ての解除は、API 呼び出し経由で行うことができます。 <APIVersion> は API バージョン 2024-07-01 以降であることに注意してください。

  • すべてのマネージド ID を削除するには、次を実行します。

    az rest --method PATCH --url /subscriptions/$SUB_ID/resourceGroups/$CLUSTER_RG/providers/Microsoft.NetworkCloud/clusters/$CLUSTER_NAME?api-version=<APIVersion> --body "{\"identity\":{\"type\":\"None\"}}"
    
  • ユーザー割り当てマネージド ID とシステム割り当てマネージド ID の両方が追加された場合は、typeSystemAssigned に更新することで、ユーザー割り当て ID を削除できます。

    az rest --method PATCH --url /subscriptions/$SUB_ID/resourceGroups/$CLUSTER_RG/providers/Microsoft.NetworkCloud/clusters/$CLUSTER_NAME?api-version=<APIVersion> --body @~/uai-body.json
    

    要求本文 (uai-body.json) の例:

    {
      "identity": {
          "type": "SystemAssigned"
      }
    }
    
  • ユーザー割り当てマネージド ID とシステム割り当てマネージド ID の両方が追加された場合は、typeUserAssigned に更新することで、システム割り当て ID を削除できます。

    az rest --method PATCH --url /subscriptions/$SUB_ID/resourceGroups/$CLUSTER_RG/providers/Microsoft.NetworkCloud/clusters/$CLUSTER_NAME?api-version=<APIVersion> --body @~/uai-body.json
    

    要求本文 (uai-body.json) の例:

    {
      "identity": {
          "type": "UserAssigned",
      	"userAssignedIdentities": {
      		"/subscriptions/$SUB_ID/resourceGroups/$UAI_RESOURCE_GROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$UAI_NAME": {}
      	}
      }
    }
    
  • 複数のユーザー割り当てマネージド ID が追加された場合は、次を実行してそのうちの 1 つを削除できます。

    az rest --method PATCH --url /subscriptions/$SUB_ID/resourceGroups/$CLUSTER_RG/providers/Microsoft.NetworkCloud/clusters/$CLUSTER_NAME?api-version=<APIVersion> --body @~/uai-body.json
    

    要求本文 (uai-body.json) の例:

    {
      "identity": {
          "type": "UserAssigned",
      	"userAssignedIdentities": {
      		"/subscriptions/$SUB_ID/resourceGroups/$UAI_RESOURCE_GROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$UAI_NAME": null
      	}
      }
    }
    

クラスターの削除

クラスターを削除すると、Azure 内のリソースと、オンプレミス環境に存在するクラスターが削除されます。

Note

クラスター内に置かれたテナント リソースがある場合、それらのリソースが削除されるまで削除されません。

テナント リソースが原因で削除に失敗したことを示すポータルのスクリーンショット。

az networkcloud cluster delete --name "$CLUSTER_NAME" --resource-group "$CLUSTER_RG"