Azure Kubernetes Service (AKS) でノード プールのサイズを変更する
デプロイの数が増加したため、またはより大きなワークロードを実行するため、仮想マシン スケール セットのプランを変更するか、AKS インスタンスのサイズを変更する必要があります。 ただし、AKS のサポート ポリシーに関する記事によると、次のようになります。
AKS エージェント ノードは、Azure portal で通常の Azure IaaS リソースとして表示されます。 しかし、これらの仮想マシンは、カスタムの Azure リソース グループ (通常は先頭に MC_* が付加されている) にデプロイされます。 IaaS の API またはリソースを使用して、これらのノードを直接カスタマイズすることはできません。 AKS API 経由で行われたのではないすべてのカスタム変更は、アップグレード、スケーリング、更新、および再起動後には保持されない可能性があります。
この永続化の欠如は、サイズ変更操作にも適用されるため、この方法での AKS インスタンスのサイズ変更はサポートされていません。 この攻略ガイドでは、このシナリオに対処するための推奨される方法について説明します。
重要
この方法は、仮想マシン スケール セット ベースの AKS クラスターに固有のものです。 仮想マシンの可用性セットを使用する場合は、クラスターごとに 1 つのノード プールのみに制限されます。
リソースの例
nodepool1
と呼ばれる既存のノードプールのサイズを SKU サイズ Standard_DS2_v2 から Standard_DS3_v2 に変更するとします。 このタスクを実行するには、Standard_DS3_v2 を使用して新しいノード プールを作成し、ワークロードを nodepool1
から新しいノード プールに移動して、nodepool1
を削除する必要があります。 この例では、この新しいノード プールを mynodepool
と呼びます。
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31721111-vmss000000 Ready agent 10d v1.21.9
aks-nodepool1-31721111-vmss000001 Ready agent 10d v1.21.9
aks-nodepool1-31721111-vmss000002 Ready agent 10d v1.21.9
kubectl get pods -o wide -A
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
default sampleapp2-74b4b974ff-676sz 1/1 Running 0 93m 10.244.1.6 aks-nodepool1-31721111-vmss000002 <none> <none>
default sampleapp2-76b6c4c59b-pfgbh 1/1 Running 0 94m 10.244.1.5 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system azure-ip-masq-agent-4n66k 1/1 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system azure-ip-masq-agent-9p4c8 1/1 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system azure-ip-masq-agent-nb7mx 1/1 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system coredns-845757d86-dtvvs 1/1 Running 0 10d 10.244.0.2 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system coredns-845757d86-x27pp 1/1 Running 0 10d 10.244.2.3 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system coredns-autoscaler-5f85dc856b-nfrmh 1/1 Running 0 10d 10.244.2.4 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system csi-azuredisk-node-9nfzt 3/3 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system csi-azuredisk-node-bblsb 3/3 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system csi-azuredisk-node-tjhj4 3/3 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system csi-azurefile-node-9pcr8 3/3 Running 0 3d10h 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system csi-azurefile-node-bh2pc 3/3 Running 0 3d10h 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system csi-azurefile-node-h75gq 3/3 Running 0 3d10h 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system konnectivity-agent-6cd55c69cf-ngdlb 1/1 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system konnectivity-agent-6cd55c69cf-rvvqt 1/1 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system kube-proxy-4wzx7 1/1 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system kube-proxy-g5tvr 1/1 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system kube-proxy-mrv54 1/1 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system metrics-server-774f99dbf4-h52hn 1/1 Running 1 3d10h 10.244.1.3 aks-nodepool1-31721111-vmss000002 <none> <none>
目的の SKU を使用して新しいノード プールを作成する
az aks nodepool add コマンドを使用して、Standard_DS3_v2
VM SKU を使用する 3 つのノードを持つ mynodepool
という新しいノード プールを作成します。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name mynodepool \
--node-count 3 \
--node-vm-size Standard_DS3_v2 \
--mode System \
--no-wait
Note
各 AKS クラスターには、少なくとも 1 つのノードを含むシステム ノード プールが、少なくとも 1 つ含まれている必要があります。 上の例では、クラスターが 1 つのノード プールのみを持つと見なされ、System
ノード プールで置き換える必要があるため、System
の --mode
を使用しています。 ノード プールのモードは、いつでも更新できます。
サイズ変更する場合は、他の要件を考慮し、それに応じてノード プールを構成してください。 場合によっては、上記のコマンドを変更する必要があります。 構成オプションの完全な一覧については、az aks nodepool add に関するページを参照してください。
数分後に、新しいノード プールが作成されました。
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-mynodepool-20823458-vmss000000 Ready agent 23m v1.21.9
aks-mynodepool-20823458-vmss000001 Ready agent 23m v1.21.9
aks-mynodepool-20823458-vmss000002 Ready agent 23m v1.21.9
aks-nodepool1-31721111-vmss000000 Ready agent 10d v1.21.9
aks-nodepool1-31721111-vmss000001 Ready agent 10d v1.21.9
aks-nodepool1-31721111-vmss000002 Ready agent 10d v1.21.9
既存のノードの切断
切断では、指定されたノードをスケジュール不可としてマークし、追加のポッドがノードに追加されないようにします。
最初に、kubectl get nodes
で切断するノードの名前を取得します。 出力は次のようになります。
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31721111-vmss000000 Ready agent 7d21h v1.21.9
aks-nodepool1-31721111-vmss000001 Ready agent 7d21h v1.21.9
aks-nodepool1-31721111-vmss000002 Ready agent 7d21h v1.21.9
次に、kubectl cordon <node-names>
を使用して、スペースで区切られたリストで目的のノードを指定します。
kubectl cordon aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002
node/aks-nodepool1-31721111-vmss000000 cordoned
node/aks-nodepool1-31721111-vmss000001 cordoned
node/aks-nodepool1-31721111-vmss000002 cordoned
既存のノードのドレイン
重要
ノードを適切にドレインして実行中のポッドを強制削除するには PodDisruptionBudgets (PDB) で一度に少なくとも 1 つのポッド レプリカを確実に移動できるようにします。 そうしないと、ドレインまたは強制削除操作は失敗します。 これを確認するには、kubectl get pdb -A
を実行して、ALLOWED DISRUPTIONS
が少なくとも 1 以上であることを検証します。
ノードをドレインすると、そのノードで実行されているポッドが強制削除され、スケジュール可能な他のノードで再作成されます。
ノードをドレインするには、次のように、再度スペースで区切られたノード名のリストを使用して、kubectl drain <node-names> --ignore-daemonsets --delete-emptydir-data
を使用します。
重要
AKS で作成された coredns
と metrics-server
ポッドを強制削除するには、--delete-emptydir-data
を使用する必要があります。 このフラグが使用されていない場合は、エラーが発生します。 詳細については、emptydir に関するドキュメントを参照してください。
kubectl drain aks-nodepool1-31721111-vmss000000 aks-nodepool1-31721111-vmss000001 aks-nodepool1-31721111-vmss000002 --ignore-daemonsets --delete-emptydir-data
ドレイン操作が完了すると、デーモン セットによって制御されているポッド以外のすべてのポッドが新しいノード プールで実行されます。
kubectl get pods -o wide -A
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
default sampleapp2-74b4b974ff-676sz 1/1 Running 0 15m 10.244.4.5 aks-mynodepool-20823458-vmss000002 <none> <none>
default sampleapp2-76b6c4c59b-rhmzq 1/1 Running 0 16m 10.244.4.3 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system azure-ip-masq-agent-4n66k 1/1 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system azure-ip-masq-agent-9p4c8 1/1 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system azure-ip-masq-agent-nb7mx 1/1 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system azure-ip-masq-agent-sxn96 1/1 Running 0 49m 10.240.0.9 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system azure-ip-masq-agent-tsq98 1/1 Running 0 49m 10.240.0.8 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system azure-ip-masq-agent-xzrdl 1/1 Running 0 49m 10.240.0.7 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system coredns-845757d86-d2pkc 1/1 Running 0 17m 10.244.3.2 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system coredns-845757d86-f8g9s 1/1 Running 0 17m 10.244.5.2 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system coredns-autoscaler-5f85dc856b-f8xh2 1/1 Running 0 17m 10.244.4.2 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system csi-azuredisk-node-7md2w 3/3 Running 0 49m 10.240.0.7 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system csi-azuredisk-node-9nfzt 3/3 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system csi-azuredisk-node-bblsb 3/3 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system csi-azuredisk-node-lcmtz 3/3 Running 0 49m 10.240.0.9 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system csi-azuredisk-node-mmncr 3/3 Running 0 49m 10.240.0.8 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system csi-azuredisk-node-tjhj4 3/3 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system csi-azurefile-node-29w6z 3/3 Running 0 49m 10.240.0.9 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system csi-azurefile-node-4nrx7 3/3 Running 0 49m 10.240.0.7 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system csi-azurefile-node-9pcr8 3/3 Running 0 3d11h 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system csi-azurefile-node-bh2pc 3/3 Running 0 3d11h 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system csi-azurefile-node-gqqnv 3/3 Running 0 49m 10.240.0.8 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system csi-azurefile-node-h75gq 3/3 Running 0 3d11h 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system konnectivity-agent-6cd55c69cf-2bbp5 1/1 Running 0 17m 10.240.0.7 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system konnectivity-agent-6cd55c69cf-7xzxj 1/1 Running 0 16m 10.240.0.8 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system kube-proxy-4wzx7 1/1 Running 0 10d 10.240.0.4 aks-nodepool1-31721111-vmss000000 <none> <none>
kube-system kube-proxy-7h8r5 1/1 Running 0 49m 10.240.0.7 aks-mynodepool-20823458-vmss000000 <none> <none>
kube-system kube-proxy-g5tvr 1/1 Running 0 10d 10.240.0.6 aks-nodepool1-31721111-vmss000002 <none> <none>
kube-system kube-proxy-mrv54 1/1 Running 0 10d 10.240.0.5 aks-nodepool1-31721111-vmss000001 <none> <none>
kube-system kube-proxy-nqmnj 1/1 Running 0 49m 10.240.0.9 aks-mynodepool-20823458-vmss000002 <none> <none>
kube-system kube-proxy-zn77s 1/1 Running 0 49m 10.240.0.8 aks-mynodepool-20823458-vmss000001 <none> <none>
kube-system metrics-server-774f99dbf4-2x6x8 1/1 Running 0 16m 10.244.4.4 aks-mynodepool-20823458-vmss000002 <none> <none>
トラブルシューティング
次のようなエラーが表示される場合があります。
ポッドの強制削除中にエラーが発生しました /[podname] -n [namespace] (5 秒後に再試行されます): ポッドの中断バジェットに違反するため、ポッドを強制削除できません。
既定で、クラスターには、MinAvailable
が 1 の、AKS_managed ポッド中断バジェット (coredns-pdb
や konnectivity-agent
など) があります。 たとえば、2 つの coredns
ポッドが実行されていて、そのうちの 1 つが再作成されて使用できない場合、ポッド中断バジェットがあるため、もう一方に影響を与えることはできません。 これは、最初の coredns
ポッドがスケジュールされ、実行された後に自動的に解決され、2 つめのポッドが適切に強制削除され、再作成されることが可能になります。
ヒント
削除エクスペリエンスをスムーズにし、スロットリングを回避するために、ノードを 1 つずつドレインすることを検討してください。 詳細については次を参照してください:
既存のノード プールを削除する
既存のノード プールを削除するには、Azure portal または az aks nodepool delete コマンドを使用します。
az aks nodepool delete \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name nodepool1
完了後、最終的な結果として、AKS クラスターに新しいノード プールが 1 つ追加されます。これには、新しい目的の SKU サイズと、適切に実行されているすべてのアプリケーションとポッドが含まれます。
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-mynodepool-20823458-vmss000000 Ready agent 63m v1.21.9
aks-mynodepool-20823458-vmss000001 Ready agent 63m v1.21.9
aks-mynodepool-20823458-vmss000002 Ready agent 63m v1.21.9
次のステップ
切断とドレインによってノード プールのサイズを変更した後は、複数のノードプールの使用について詳細を確認してください。
Azure Kubernetes Service