【EKS】ノードグループバージョンを更新する手順
本記事では、EKS ノードグループのバージョンを更新する手順について解説する。

前提
今回は、下記ケースのEKSノードグループの更新を行う。
- バージョンアップ元:ノードグループ 1.28.x
- バージョンアップ先:ノードグループ 1.29.x
- EKSクラスターバージョン:EKS 1.29
説明
EKSを運用していく上でバージョンアップ必要なサービスは大きく以下の3つに分けられる。
ノードグループとは、アプリケーション(Podやコンテナ)の実行環境であるノード(EC2・Fargate)の集まりである。 そのため、EC2へのパッチ適応や、バージョンアップだと考えればよい。
- EKSクラスター(kubernetes APIサーバー、kubernetes)
- EKSノードグループ
- EKSアドオン
- ALB Load Balancer Controller
ノードグループ以外の3つのバージョンアップ手順についても、本ブログで詳細に解説している。
ダウンタイム・影響
バージョンアップ中のアプリケーションへのダウンタイム
EKSノードグループのバージョンアップ中に、そのEKSでホストしているアプリケーションに対して、ダウンタイムは基本発生しない。
バージョンアップでは、ノードが一つずつバージョンアップされる。そのため、Podは他のノードにスケジュール・移動され、ダウンタイムは基本発生しないが、ノードの最大数やアプリケーションの仕様によってはダウンタイムが発生する可能性がある。
バージョンアップ手順
EKSノードグループのバージョンを更新する
- 下記を実行し、ノードグループをアップデートする。{x.xx} には、EKSクラスターと同じバージョンを記載(1.29など)
eksctl upgrade nodegroup --name=<nodegroup-name> --cluster=<cluster-name> --region-=<region code> --kubernetes-version={x.xx}
- 下記コマンドを実行し、正常にバージョンが更新されたことを確認する
kubectl get node
- 下記コマンドを実行し、正常にImageのバージョンが更新されたことを確認する
txtkubectl describe pod cluster-autoscaler-xxxxxxxx -n kube-system
エラー
PodEvictionFailureエラー
マネージドノードグループの更新時において、アップグレードフェーズでは、Nodeから Pods がドレインされるが、この際 Pods が 15 分以内にノードを離れず、かつ強制フラグがない場合には、エラーが発生し、更新が失敗する。
[root@ip-172-16-10-30 ~]# eksctl upgrade nodegroup --name=test-node-group --cluster=test-cluster --region=ap-northeast-1 --kubernetes-version=1.29
2024-05-09 06:10:56 [ℹ] setting ForceUpdateEnabled value to false
2024-05-09 06:10:56 [ℹ] updating nodegroup stack
2024-05-09 06:10:57 [ℹ] waiting for CloudFormation changeset "eksctl-update-nodegroup-12344803625" for stack "eksctl-test-cluster-nodegroup-test-node-group"
Error: error updating nodegroup stack: waiter state transitioned to Failure
PDB (Pod Disruption Budget) は、Kubernetes クラスタにおける Pod のアップデートや削除の際に、アプリケーションの可用性を確保するための設定で、PDB を使用することで、同時に停止できる Pod の最大数や最小数を制御できる。
そのため、PDB を設定している場合にエラーが発生する場合がある。
解決策
①Podの数を増やす
PDBの設定に合わせて、Podを増やせば、ドレインすることが出来るようになる。
メリットとして、更新によって発生するダウンタイムを避けることが出来る。
②PDB を一時的に削除する。
下記コマンドによって、PDBを確認することができる。
kubectl get pdb -A
一時的に削除することで、Podがドレインされるようになる。
➂強制更新オプションを使用する。
下記オプションを更新コマンドに指定することで、PDBの設定を無視した更新の実行が可能。
--force-upgrade
本問題の詳細や、その他の問題に関しては、Amazon EKS のマネージドノードグループの更新に関する問題をトラブルシューティングするにはどうすればよいですか?を参照