Share via


クイックスタート: Azure CLI を使用して Azure Nexus Kubernetes クラスターを作成する

  • Azure CLI を使用して Azure Nexus Kubernetes クラスターをデプロイします。

開始する前に

Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

  • 必要な Azure CLI 拡張機能の最新バージョンをインストールします。

  • この記事では、Azure CLI のバージョン 2.49.0 以降が必要です。 Azure Cloud Shell を使用している場合は、最新バージョンが既にインストールされています。

  • 複数の Azure サブスクリプションをお持ちの場合は、az account コマンドを使用して、リソースを課金する適切なサブスクリプション ID を選択してください。

  • サポートされている VM SKU のリストについては、参照セクションの VM SKU の表を参照してください。

  • サポートされている Kubernetes バージョンの一覧については、サポートされている Kubernetes バージョンに関するページを参照してください。

  • az group create コマンドを使用して、リソース グループを作成します。 Azure リソース グループは、Azure リソースが展開され管理される論理グループです。 リソース グループを作成する際は、場所の指定を求めるプロンプトが表示されます。 この場所は、リソース グループのメタデータが格納される場所です。また、リソースの作成時に別のリージョンを指定しない場合は、Azure でリソースが実行される場所でもあります。 次の例では、myResourceGroup という名前のリソース グループを eastus に作成します。

    az group create --name myResourceGroup --location eastus
    

    リソース グループが正常に作成された場合の出力の例は、次のようになります。

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    
  • Bicep ファイルまたは ARM テンプレートをデプロイするには、デプロイしているリソースに対する書き込みアクセス権が必要であり、また、Microsoft.Resources/デプロイ リソース タイプにあらゆる操作を実行するアクセス権かの゛必要です。 たとえば、クラスターをデプロイするには、Microsoft.NetworkCloud/kubernetesclusters/write および Microsoft.Resources/deployments/* アクセス許可が必要です。 ロールとアクセス許可の一覧については、Azure の組み込みロールに関するページを参照してください。

  • Azure Operator Nexus クラスターの custom location リソース ID が必要です。

  • 特定のワークロード要件に従ってさまざまなネットワークを作成する必要があり、ワークロードに適切な IP アドレスを使用できるようにすることが重要です。 円滑な実装を行うには、関連するサポート チームに問い合わせて支援を求めることをお勧めします。

  • このクイックスタートは、Kubernetes の基本的な概念を理解していることを前提としています。 詳細については、「Azure Kubernetes Services (AKS) における Kubernetes の中心概念」を参照してください。

Azure Nexus Kubernetes クラスターを作成する

次の例では、eastus の場所のリソース グループ myResourceGroupmyNexusK8sCluster という名前のクラスターを作成します。

コマンドを実行する前に、クラスターの構成を定義するためにいくつかの変数を設定する必要があります。 設定する必要がある変数と、特定の変数に使用できるいくつかの既定値を次に示します。

変数 説明
LOCATION クラスターを作成する Azure リージョン。
RESOURCE_GROUP クラスターを作成する Azure リソース グループの名前。
SUBSCRIPTION_ID Azure サブスクリプションの ID。
CUSTOM_LOCATION この引数は、Nexus インスタンスのカスタムの場所を指定します。
CSN_ARM_ID CSN ID は、使用するクラウド サービス ネットワークの一意識別子です。
CNI_ARM_ID CNI ID は、コンテナー ランタイムによって使用されるネットワーク インターフェイスの一意識別子です。
AAD_ADMIN_GROUP_OBJECT_ID クラスターに対する管理者特権を持つ必要がある Microsoft Entra グループのオブジェクト ID。
CLUSTER_NAME Nexus Kubernetes クラスターに付ける名前。
K8S_VERSION 使用する Kubernetes のバージョン。
ADMIN_USERNAME クラスター管理者のユーザー名。
SSH_PUBLIC_KEY クラスターとのセキュリティで保護された通信に使用される SSH 公開キー。
CONTROL_PLANE_COUNT クラスターのコントロール プレーン ノードの数。
CONTROL_PLANE_VM_SIZE コントロール プレーン ノードの仮想マシンのサイズ。
INITIAL_AGENT_POOL_NAME 初期エージェント プールの名前。
INITIAL_AGENT_POOL_COUNT 初期エージェント プールのノード数。
INITIAL_AGENT_POOL_VM_SIZE 初期エージェント プールの仮想マシンのサイズ。
POD_CIDR クラスター内の Kubernetes ポッドのネットワーク範囲 (CIDR 表記)。
SERVICE_CIDR クラスター内の Kubernetes サービスのネットワーク範囲 (CIDR 表記)。
DNS_SERVICE_IP Kubernetes DNS サービスの IP アドレス。

これらの変数を定義したら、Azure CLI コマンドを実行してクラスターを作成できます。 最後に --debug フラグを追加すると、トラブルシューティングの目的で、より詳細な出力が提供されます。

これらの変数を定義するには、次の set コマンドを使用し、例の値を任意の値に置き換えます。 次の例に示すように、一部の変数に既定値を使用することもできます。

RESOURCE_GROUP="myResourceGroup"
SUBSCRIPTION_ID="<Azure subscription ID>"
LOCATION="$(az group show --name $RESOURCE_GROUP --query location --subscription $SUBSCRIPTION_ID -o tsv)"
CUSTOM_LOCATION="/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-location-name>"
CSN_ARM_ID="/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/cloudServicesNetworks/<csn-name>"
CNI_ARM_ID="/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/l3Networks/<l3Network-name>"
AAD_ADMIN_GROUP_OBJECT_ID="00000000-0000-0000-0000-000000000000"
CLUSTER_NAME="myNexusK8sCluster"
K8S_VERSION="v1.24.9"
ADMIN_USERNAME="azureuser"
SSH_PUBLIC_KEY="$(cat ~/.ssh/id_rsa.pub)"
CONTROL_PLANE_COUNT="1"
CONTROL_PLANE_VM_SIZE="NC_G6_28_v1"
INITIAL_AGENT_POOL_NAME="${CLUSTER_NAME}-nodepool-1"
INITIAL_AGENT_POOL_COUNT="1"
INITIAL_AGENT_POOL_VM_SIZE="NC_P10_56_v1"
POD_CIDR="10.244.0.0/16"
SERVICE_CIDR="10.96.0.0/16"
DNS_SERVICE_IP="10.96.0.10"

重要

これらのコマンドを実行する前に、CUSTOM_LOCATION、CSN_ARM_ID、CNI_ARM_ID、AAD_ADMIN_GROUP_OBJECT_ID のプレースホルダーを実際の値に置き換える必要があります。

これらの変数を定義したら、次の Azure CLI コマンドを実行して Kubernetes クラスターを作成できます。

az networkcloud kubernetescluster create \
  --name "${CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --subscription "${SUBSCRIPTION_ID}" \
  --extended-location name="${CUSTOM_LOCATION}" type=CustomLocation \
  --location "${LOCATION}" \
  --kubernetes-version "${K8S_VERSION}" \
  --aad-configuration admin-group-object-ids="[${AAD_ADMIN_GROUP_OBJECT_ID}]" \
  --admin-username "${ADMIN_USERNAME}" \
  --ssh-key-values "${SSH_PUBLIC_KEY}" \
  --control-plane-node-configuration \
    count="${CONTROL_PLANE_COUNT}" \
    vm-sku-name="${CONTROL_PLANE_VM_SIZE}" \
  --initial-agent-pool-configurations "[{count:${INITIAL_AGENT_POOL_COUNT},mode:System,name:${INITIAL_AGENT_POOL_NAME},vm-sku-name:${INITIAL_AGENT_POOL_VM_SIZE}}]" \
  --network-configuration \
    cloud-services-network-id="${CSN_ARM_ID}" \
    cni-network-id="${CNI_ARM_ID}" \
    pod-cidrs="[${POD_CIDR}]" \
    service-cidrs="[${SERVICE_CIDR}]" \
    dns-service-ip="${DNS_SERVICE_IP}"

要求されたクラスター ノードをデプロイするのに十分な容量がない場合は、エラー メッセージが表示されます。 ただし、このメッセージでは、使用可能な容量に関する詳細は提供されません。 容量が不足しているため、クラスターの作成を続行できないことが示されています。

Note

容量の計算では、個々のラックに限定されるのではなく、プラットフォーム クラスター全体が考慮されます。 そのため、容量が不十分なゾーン (ラックがゾーンと等しい) にエージェント プールが作成されていても、別のゾーンに十分な容量がある場合、クラスターの作成は続行されますが、最終的にはタイムアウトになります。容量をチェックするこの方法は、クラスターまたはエージェント プールの作成時に特定のゾーンが指定されていない場合にのみ有効です。

数分後、コマンドが完了し、クラスターに関する情報が返されます。 より高度なオプションについては、「クイック スタート: Bicep を使用して Azure Nexus Kubernetes クラスターをデプロイする」を参照してください。

デプロイされているリソースを確認する

デプロイが完了したら、CLI または Azure portal を使用してリソースを表示できます。

myResourceGroup リソース グループ内の myNexusK8sCluster クラスターの詳細を表示するには、次の Azure CLI コマンドを実行します。

az networkcloud kubernetescluster show \
  --name myNexusK8sCluster \
  --resource-group myResourceGroup

さらに、myResourceGroup リソース グループ内の myNexusK8sCluster クラスターに関連付けられているエージェント プール名の一覧を取得するには、次の Azure CLI コマンドを使用できます。

az networkcloud kubernetescluster agentpool list \
  --kubernetes-cluster-name myNexusK8sCluster \
  --resource-group myResourceGroup \
  --output table

クラスターに接続する

Nexus Kubernetes クラスターが正常に作成され、Azure Arc に接続されたので、クラスター接続機能を使用して簡単に接続できます。 クラスター接続を使用すると、どこからでもクラスターに安全にアクセスして管理できるため、対話型の開発、デバッグ、クラスター管理タスクに便利です。

使用可能なオプションの詳細については、「Azure Operator Nexus Kubernetes クラスターに接続する」を参照してください。

Note

Nexus Kubernetes クラスターを作成すると、Nexus によってクラスター リソースの格納専用の管理対象リソース グループが自動的に作成され、このグループ内に Arc 接続クラスター リソースが確立されます。

クラスターにアクセスするには、クラスター接続 kubeconfig を設定する必要があります。 関連する Microsoft Entra エンティティを使用して Azure CLI にログインした後、それを囲むファイアウォールの外側であっても、どこからでもクラスターと通信するために必要な kubeconfig を取得できます。

  1. CLUSTER_NAME 変数、RESOURCE_GROUP 変数、および SUBSCRIPTION_ID 変数を設定します。

    CLUSTER_NAME="myNexusK8sCluster"
    RESOURCE_GROUP="myResourceGroup"
    SUBSCRIPTION_ID=<set the correct subscription_id>
    
  2. az を使用して管理対象リソース グループにクエリを実行し、MANAGED_RESOURCE_GROUP に格納します

     az account set -s $SUBSCRIPTION_ID
     MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)
    
  3. 次のコマンドは、指定された Nexus Kubernetes クラスターの Kubernetes API サーバーに接続できる connectedk8s プロキシを起動します。

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. kubectl を使用して、クラスターに要求を送信します。

    kubectl get pods -A
    

    これで、すべてのノードの一覧が含まれているクラスターからの応答が表示されます。

注意

"アクセス トークンをクライアント プロキシに投稿できませんでした。MSI に接続できませんでした" というエラー メッセージが表示された場合は、az login を実行して Azure で再認証する必要がある場合があります。

エージェント プールを追加する

前の手順で作成したクラスターには、ノード プールが 1 つあります。 az networkcloud kubernetescluster agentpool create コマンドを使用して、2 番目のエージェント プールを追加しましょう。 次の例では、myNexusK8sCluster-nodepool-2 という名前のエージェント プールを作成します。

次の例に示すように、一部の変数に既定値を使用することもできます。

RESOURCE_GROUP="myResourceGroup"
CUSTOM_LOCATION="/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-location-name>"
CLUSTER_NAME="myNexusK8sCluster"
AGENT_POOL_NAME="${CLUSTER_NAME}-nodepool-2"
AGENT_POOL_VM_SIZE="NC_P10_56_v1"
AGENT_POOL_COUNT="1"
AGENT_POOL_MODE="User"

これらの変数を定義したら、次の Azure CLI コマンドを実行してエージェント プールを追加できます。

az networkcloud kubernetescluster agentpool create \
  --name "${AGENT_POOL_NAME}" \
  --kubernetes-cluster-name "${CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --subscription "${SUBSCRIPTION_ID}" \
  --extended-location name="${CUSTOM_LOCATION}" type=CustomLocation \
  --count "${AGENT_POOL_COUNT}" \
  --mode "${AGENT_POOL_MODE}" \
  --vm-sku-name "${AGENT_POOL_VM_SIZE}"

数分後、コマンドが完了し、エージェント プールに関する情報が返されます。 より高度なオプションについては、「クイック スタート: Bicep を使用して Azure Nexus Kubernetes クラスターをデプロイする」を参照してください。

注意

初期エージェント プール構成を使用して、クラスター自体の初期作成時に複数のエージェント プールを追加できます。 ただし、初期作成後にエージェント プールを追加する場合は、上記のコマンドを使用して、Nexus Kubernetes クラスター用の追加のエージェント プールを作成できます。

エージェント プールが正常に作成された場合の出力の例は、次のようになります。

$ az networkcloud kubernetescluster agentpool list --kubernetes-cluster-name myNexusK8sCluster --resource-group myResourceGroup --output table
This command is experimental and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Count    Location    Mode    Name                          ProvisioningState    ResourceGroup    VmSkuName
-------  ----------  ------  ----------------------------  -------------------  ---------------  -----------
1        eastus      System  myNexusK8sCluster-nodepool-1  Succeeded            myResourceGroup  NC_P10_56_v1
1        eastus      User    myNexusK8sCluster-nodepool-2  Succeeded            myResourceGroup  NC_P10_56_v1

リソースをクリーンアップする

不要になったら、リソース グループを削除します。 リソース グループとリソース グループ内のすべてのリソースが削除されます。

az group delete コマンドを使用すると、リソース グループおよび Kubernetes クラスターと、関連するすべてのリソース (Operator Nexus ネットワーク リソース以外) が削除されます。

az group delete --name myResourceGroup --yes --no-wait

次のステップ

直接、またはクラスター接続Azure Operator Service Manager を介して、CNF をデプロイできるようになりました。