Azure Kubernetes Service (AKS) のクラスターでノード プールを作成する
Azure Kubernetes Service (AKS) で同じ構成のノードは、ノード プールにグループ化できます。 これらのノード プールには、お使いのアプリケーションを実行する基になる VM が含まれています。 AKS クラスターを作成するときは、ノードの初期数とそのサイズ (SKU) を定義し、システム ノード プールを作成します。
コンピューティングまたは記憶域の要件が異なるアプリケーションをサポートするには、ユーザー ノード プールを作成します。 システム ノード プールは、CoreDNS や konnectivity
などの重要なシステム ポッドをホストするという主要な目的を果たします。 ユーザー ノード プールは、アプリケーション ポッドをホストするという主要な目的を果たします。 たとえば、より多くのユーザー ノード プールを使用して、コンピューティング集中型アプリケーションに GPU を提供したり、高パフォーマンスな SSD ストレージへのアクセスを提供したりします。 ただし、AKS クラスター内にプールを 1 つだけ持つ必要がある場合は、システム ノード プールでアプリケーション ポッドをスケジュールできます。
Note
この機能により、複数のノード プールの作成と管理をより詳細に制御できるようになり、作成/更新/削除 (CRUD) 操作に個別のコマンドが必要になります。 以前は、az aks create
または az aks update
を介したクラスター操作は、managedCluster API を使用するものであり、コントロール プレーンと単一ノード プールを変更する唯一の方法でした。 この機能は、agentPool API を介した、エージェント プールに対する個別の操作セットを公開するものであり、個々のノード プールに対して操作を実行するには az aks nodepool
コマンド セットを使用する必要があります。
この記事では、AKS クラスターで 1 つ以上のノード プールを作成する方法について説明します。
開始する前に
- Azure CLI バージョン 2.2.0 以降がインストールされて構成されている必要があります。 バージョンを確認するには、
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 - 「Azure Kubernetes Service でのアプリケーションのストレージ オプション」を確認して、ストレージ構成を計画します。
制限事項
複数のノード プールをサポートする AKS クラスターを作成する場合には、次の制限があります。
- 「Azure Kubernetes Service (AKS) のクォータ、仮想マシンのサイズの制限、およびリージョンの可用性」を参照してください。
- AKS クラスター内に代わりになる別のシステム ノード プールがある場合、システム ノード プールを削除できます。 それ以外の場合は、システム ノード プールを削除できません。
- システム プールには少なくとも 1 つのノードを含める必要があり、ユーザー ノード プールには 0 以上のノードを含めることができます。
- 複数ノード プールする場合、AKS クラスターは Standard SKU ロード バランサーを使用する必要があります。 この機能は、Basic SKU ロード バランサーではサポートされていません。
- AKS クラスターでは、ノードに仮想マシン スケール セットを使用する必要があります。
- ノード プールの名前は、小文字の英数字のみを含めることができ、小文字で始める必要があります。
- Linux のノード プールの長さは、1 から 12 文字の範囲内である必要があります。
- Windows のノード プールの長さは、1 から 6 文字の範囲内である必要があります。
- すべてのノード プールは、同じ仮想ネットワーク内に存在する必要があります。
- クラスターの作成時に複数のノード プールを作成する場合は、ノード プールのすべての Kubernetes のバージョンが、コントロール プレーンに設定されたバージョンと一致している必要があります。
AKS クラスターを作成する
重要
運用環境内のお使いの AKS クラスターで 1 つのシステム ノード プールを実行する場合、そのノード プールには少なくとも 3 つのノードを使用することをお勧めします。 1 つのノードがダウンすると、コントロール プレーン リソースが失われ、冗長性が損なわれます。 コントロール プレーン ノードを増やすことによって、このリスクを軽減できます。
az group create
コマンドを使用して、Azure リソース グループを作成します。az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
az aks create
コマンドを使用して、1 つのノード プールを持つ AKS クラスターを作成します。az aks create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --vm-set-type VirtualMachineScaleSets \ --node-count 2 \ --location $LOCATION \ --load-balancer-sku standard \ --generate-ssh-keys
クラスターの作成には数分かかります。
クラスターの準備ができたら、
az aks get-credentials
コマンドを使用してクラスターの資格情報を取得します。az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
ノード プールの追加
前の手順で作成したクラスターには、ノード プールが 1 つあります。 このセクションでは、クラスターに 2 番目のノード プールを追加します。
az aks nodepool add
コマンドを使用して、新しいノード プールを作成します。 次の例では、3 つのノードを実行する mynodepool という名前のノード プールを作成します。az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 3
az aks node pool list
コマンドを使用し、お使いのリソース グループとクラスター名を指定して、ノード プールの状態を確認します。az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
次の出力例では、mynodepool が 3 つのノードと共に正常に作成されたことを示しています。 前の手順で AKS クラスターを作成したとき、既定の nodepool1 がノード数 2 で作成されました。
[ { ... "count": 3, ... "name": "mynodepool", "orchestratorVersion": "1.15.7", ... "vmSize": "Standard_DS2_v2", ... }, { ... "count": 2, ... "name": "nodepool1", "orchestratorVersion": "1.15.7", ... "vmSize": "Standard_DS2_v2", ... } ]
ARM64 ノード プール
ARM64 プロセッサは、Kubernetes ワークロードに低電力コンピューティングを提供します。 ARM64 ノード プールを作成するには、Dpsv5、Dplsv5、または Epsv5 シリーズの仮想マシンを選択する必要があります。
制限事項
- ARM64 ノード プールは、Kubernetes のバージョンが 1.29.0 以前の Defender 対応クラスターではサポートされていません。
- FIPS 対応ノード プールは ARM64 SKU ではサポートされていません。
- Windows ノード プールは ARM64 SKU ではサポートされていません。
ARM64 ノード プールを追加する
az aks nodepool add
を使用して、既存のクラスターに ARM64 ノード プールを追加します。az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $ARM_NODE_POOL_NAME \ --node-count 3 \ --node-vm-size Standard_D2pds_v5
Azure Linux ノード プール
AKS 用 Azure Linux コンテナー ホストは、AKS コンテナー ホストとして使用できるオープンソースの Linux ディストリビューションです。 高い信頼性、セキュリティ、整合性を提供します。 これには、コンテナー ワークロードの実行に必要な最小限のパッケージ セットのみが含まれているため、ブート時間と全体的なパフォーマンスが向上します。
Azure Linux ノード プールを追加する
az aks nodepool add
コマンドを使用し、--os-sku AzureLinux
を指定して、既存のクラスターに Azure Linux ノード プールを追加します。az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $AZ_LINUX_NODE_POOL_NAME \ --os-sku AzureLinux
Ubuntu ノードを Azure Linux ノードに移行する
次のいずれかの方法を使って、既存の Ubuntu ノードを Azure Linux に移行できます。
一意のサブネットを持つノード プール
ワークロードでは、クラスターのノードを論理的に分離するために個別のプールに分割することが必要になる場合があります。 クラスター内の各ノード プール専用の個別のサブネットは、この分離のサポートに役立ち、ノード プール間で分割する非連続の仮想ネットワーク アドレス空間などの要件に対処できます。
注意
必ず Azure CLI バージョン 2.35.0
以降を使用してください。
制限事項
- ノード プールに割り当てられるサブネットはすべて、同じ仮想ネットワークに属している必要があります。
- DNS 解決や kubectl logs/exec/port-forward プロキシのトンネリングなど、重要な機能を提供するために、システム ポッドはクラスター内のすべてのノードとポッドにアクセスできる必要があります。
- クラスターを作成した後で VNET を拡張する場合、元の CIDR ブロックの外でサブネットを追加するには、クラスターを更新する必要があります。 エージェント プールの追加時に AKS でエラーが出力される一方で、
aks-preview
Azure CLI 拡張機能 (バージョン 0.5.66 以降) では、必須の-g <resourceGroup> -n <clusterName>
引数のみでaz aks update
コマンドを実行できるようになりました。 このコマンドは、変更を加えることなく更新操作を実行します。これにより、障害が発生した状態で停止しているクラスターを復旧できます。 - 1.23.3 より前の Kubernetes バージョンのクラスターでは、kube-proxy によって新しいサブネットからのトラフィックが SNAT されるため、Azure ネットワーク ポリシーによってパケットがドロップされる可能性があります。
- Windows ノードでは、ノード プールが再イメージ化されるまで、新しいサブネットへのトラフィックを SNAT します。
- 内部ロード バランサーは、既定でノード プール サブネットの 1 つに設定されます。
一意のサブネットを持つノード プールを追加する
az aks nodepool add
コマンドを使用して、一意のサブネットを持つノード プールを既存のクラスターに追加し、--vnet-subnet-id
を指定します。az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 3 \ --vnet-subnet-id $SUBNET_RESOURCE_ID
FIPS 対応ノード プール
AKS クラスターで連邦情報処理規格 (FIPS) を有効にする方法の詳細については、「Azure Kubernetes Service (AKS) ノード プールの連邦情報処理規格 (FIPS) を有効にする」を参照してください。
containerd
を含む Windows Server ノード プール
Kubernetes バージョン1.20 以降では、Windows Server 2019 ノード プールのコンテナー ランタイムとして containerd
を指定できます。 Kubernetes 1.23 以降では、containerd
のみが Windows の既定のコンテナー ランタイムです。
重要
Windows Server 2019 ノードプールで containerd
を使用する場合:
- コントロール プレーンと Windows Server 2019 の両方のノードプールで、Kubernetes バージョン 1.20 以上を使用する必要があります。
- Windows Server のコンテナーを実行するためのノード プールを作成または更新する場合、
--node-vm-size
の既定値は Standard_D2s_v3 です。これは、Kubernetes バージョン 1.20 より前の Windows server 2019 ノードプールの最小推奨サイズです。containerd
を使用した Windows Server 2019 ノードプールの最小推奨サイズは Standard_D4s_v3です。--node-vm-size
パラメーターを設定する場合は、制限された VM サイズの一覧を確認してください。 - ワークロードが正しくスケジュールされていることを保証するには、
containerd
を実行している Windows Server 2019 ノードプールで テイントまたはラベル を使用し、容認またはノードのセレクターをデプロイで使用することをお勧めします。
containerd
を使用して Windows Server ノード プールを追加する
az aks nodepool add
を使用して、containerd
を持つ Windows Server ノード プールを既存のクラスターに追加します。Note
WindowsContainerRuntime=containerd
カスタムヘッダーを指定しない場合、既定でノード プールはcontainerd
をコンテナー ランタイムとして使用します。az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --os-type Windows \ --name $CONTAINER_D_NODE_POOL_NAME \ --node-vm-size Standard_D4s_v3 \ --kubernetes-version 1.20.5 \ --aks-custom-headers WindowsContainerRuntime=containerd \ --node-count 1
特定の既存の Windows Server ノード プールを containerd
にアップグレードする
containerd
コマンドを使用して、特定のノード プールを Docker からaz aks nodepool upgrade
にアップグレードします。az aks nodepool upgrade \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $CONTAINER_D_NODE_POOL_NAME \ --kubernetes-version 1.20.7 \ --aks-custom-headers WindowsContainerRuntime=containerd
既存のすべての Windows Server ノード プールを containerd
にアップグレードする
az aks nodepool upgrade
コマンドを使用して、すべてのノード プールを Docker からcontainerd
にアップグレードします。az aks nodepool upgrade \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --kubernetes-version 1.20.7 \ --aks-custom-headers WindowsContainerRuntime=containerd
エフェメラル OS ディスクを使用するノード プール
--node-osdisk-type
フラグがEphemeral
に設定されたaz aks nodepool add
コマンドを使用して、エフェメラル OS ディスクを使用するノード プールを既存のクラスターに追加します。Note
az aks create
コマンドで--node-osdisk-type
フラグを使用して、クラスターの作成時にエフェメラル OS ディスクを指定できます。- ネットワークに接続された OS ディスクを使用してノード プールを作成する場合は、
--node-osdisk-type Managed
を指定することで行うことができます。
az aks nodepool add --name $EPHEMERAL_NODE_POOL_NAME --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME -s Standard_DS3_v2 --node-osdisk-type Ephemeral
重要
エフェメラル OS を使用すると、VM およびインスタンス イメージを、最大で VM キャッシュのサイズまでデプロイできます。 AKS の既定のノード OS ディスク構成では 128 GB が使われます。つまり、キャッシュが 128 GB より大きい VM サイズが必要になります。 既定の Standard_DS2_v2 のキャッシュ サイズは 86 GB であり、十分な大きさではありません。 Standard_DS3_v2 VM SKU のキャッシュ サイズは 172 GB であり、十分な大きさがあります。 --node-osdisk-size
を使用して OS ディスクの既定のサイズを小さくすることもできますが、AKS イメージの最小サイズは 30 GB であることにご注意ください。
ノード プールの削除
ノード プールが不要になったら、それを削除して、基になっている VM を削除します。
注意事項
ノード プールを削除しても、AKS では切断とドレインは実行されません。また、ノード プールを削除したときに実行できる、データ損失の回復オプションもありません。 他のノード プールでポッドをスケジュールできない場合、それらのアプリケーションは利用できなくなります。 使用中のアプリケーションにデータ バックアップがない場合や、お使いのクラスター内の他のノード プールで実行する機能がない場合は、ノード プールは削除しないでください。 削除するノード プールで現在実行されているポッドの再スケジュールの中断を最小限に抑えるために、削除する前にノード プール内のすべてのノードで cordon と drain を実行します。
az aks nodepool delete
コマンドを使用し、ノード プール名を指定して、ノード プールを削除します。az aks nodepool delete --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --no-wait
ノードおよびノード プールの削除には数分かかります。
次のステップ
この記事では、AKS クラスターで複数のノード プールを作成する方法を学習しました。 複数のノード プールを管理する方法については、「Azure Kubernetes Service (AKS) でクラスターの複数のノード プールを管理する」を参照してください。
Azure Kubernetes Service