はじめに
Amazon EKS Auto Mode は、AWS re:Invent 2024 で発表された Amazon EKS の新しい実行モードです。Auto Mode は、Kubernetes クラスターのノード管理を大幅に自動化し、運用の負荷を軽減することを目的としています。「Amazon EKS Auto Mode を始めよう」では、Auto Mode が持つ機能やアーキテクチャ、具体的に運用をどのように効率化できるかについて記載されていますのでぜひご参照ください。
Auto Mode では、Amazon EKS が皆さんに代わって自律的にノードを管理します。そのため、 Auto Mode が管理している Kubernetes のノードには以下のような動的な性質があります。
AMI の自動更新 : Auto Mode 用の新しい Amazon Machine Image (AMI) がリリースされると、ノードが自動的に新しい AMI で再作成されます
ノードの有効期限 : セキュリティを強化するため、ノードには最大 21 日の有効期限が設定されています。期限が来ると自動的にノードが終了し、最新の状態に更新されます
自動的なノード管理 : 詳しくは後述しますが、Auto Mode がノードのライフサイクルを自動化しており、様々な条件でノードが終了・削除され、必要に応じて新しいノードが作成されます。
Auto Mode は、このような動的な性質により、Kubernetes クラスターのセキュリティを強化し、常に最新の環境が使えるようにしています。同時に、手動で運用する手間を最小限に抑えることができるようになっています。
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
builders.flash メールメンバー登録
builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。
1. 長期実行ワークロードの課題
2. Auto Mode におけるノードの自動終了
3. ノード終了のプロセス
Auto Mode におけるノード終了のプロセスは、ワークロードの安全性と可用性を確保しつつ、システムの健全性を維持するように設計されています。このセクションでは、ノード終了の具体的なステップと、それに関連する時間的な制約について説明します。
Forceful、Graceful にかかわらず、Auto Mode でノードの終了がトリガーされると、ワークロードを安全にノードから退避させるために以下のステップが実行されます。
新しい Pod のデプロイをブロック : ノードにスケジュール不能な Taints が付与されます。これにより、新しい Pod がこのノードにスケジュールされることを防ぎます。
Pod の排出 : Eviction API を使用して、ノード上の Pod の排出プロセスが開始されます。
ノードの削除 : すべての Pod が正常に排出された場合、ノードが削除されます。一定時間 (NodePool の terminationGracePeriod) が経過しても Pod が排出されない場合、ノードは強制的に削除されます。
プロセス図

NodePool の設定
Auto Mode におけるノード終了プロセスでは、NodePool の以下の設定が重要です。
3-1. terminationGracePeriod
デフォルトでは 24 時間に設定されています。この期間内に Pod の排出が完了しない場合、ノードは強制的に削除されます。NodePoolの設定で変更可能ですが、最大値には以下の制限があります。
3-2. expireAfter
ノードの自動終了をトリガーする期間を指定します。デフォルトでは 2 週間に設定されています。 Auto Mode では、ノードの最大生存期間は 21 日間です。つまり、expireAfter と NodePool の terminationGracePeriod の合計値は 21 日を超えることはできません。

4. ワークロードの安全な終了方法
前提として、Kubernetes において、ワークロードは、Pod に設定された終了時間のうちに安全に終了する必要があります。具体的には、Pod の終了処理が開始されてから terminationGracePeriodSeconds に設定された時間が経過する前にワークロードが安全に処理を完了させて終了する必要があります。このベストプラクティスについては こちらのドキュメント も合わせてご参照ください。
上記は Pod レベルの話ですが、前述の通り Auto Mode ではノードの管理が自動化されており、ワークロードが稼働しているノードが Auto Mode によりシャットダウンされる可能性があります。その状況下で、ワークロードを安全に運用するにはどのようにするべきでしょうか。
大きく分けて、「Pod の安全な終了処理」と「可用性」から考えることができます。
4-1. Pod の安全な終了処理
まず、「Pod の安全な終了処理」です。Auto Mode におけるノードの終了で重要な点は、
ノードの終了がトリガーされてから、NodePool の terminationGracePeriod に設定された時間が経過したら強制的に削除される
ノードに設定された expireAfter が経過したらノードの終了がトリガーされる
ノードの最大生存時間は 21 日間。つまり、expireAfter と terminationGracePeriod の合計値を 21 日より長く設定することはできない
という点です。
これはすなわち、Pod の terminationGracePeriodSeconds 期間内に安全に Pod が終了するという前提において、NodePool の terminationGracePeriod はノードで稼働する全ての Pod の terminationGracePeriodSeconds よりも長く設定されている必要がある、ということです。
NodePool の terminationGracePeriod が過ぎ、Auto Mode によってノードの強制終了が実行されると、Pod の設定にかかわらず Pod は強制終了されます。
Pod の安全な終了処理のプロセス図

4-2. 可用性の確保
Kubernetes においてワークロードの可用性を確保するには、Pod Disruption Budget (PDB) を活用することが重要です。PDB は、ノードの終了時にワークロードの可用性を維持するために重要な Kubernetes の仕組みです。
PDB の例
PDB を使用すると、同時に中断可能な Pod の数を制限できます。例えば、以下のような PDB を定義できます。 この設定により、app: sample-app ラベルを持つ Pod のうち、最大 1 つのみが同時に利用不可能になることを保証します。 Auto Mode は PDB の設定を尊重しながらノードを終了します。つまり、PDB 制約のもとで Pod が全て排出されてからノードを削除します。
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: sample-pdb
spec:
maxUnavailable: 1
selector:
matchLabels:
app: sample-app
4-3. 可用性と性能のトレードオフ
PDB を厳格に設定すると高い可用性が確保できますが、同時に Pod の終了処理の開始が遅くなります。Auto Mode においては、ワークロードの強制的な削除につながることもあります。
PDB により、Pod の終了がブロックされている間に NodePool の terminationGracePeriod が過ぎた場合、ノードとそこで稼働するPodも強制的に削除されます。特に、Pod の終了に時間がかかるワークロードでは、Pod Disruption Budget により Pod の終了にかかる時間がさらに大きくなるでしょう。NodePool のterminationGracePeriod には、PDB を考慮した値を設定する必要があります。
可用性と性能のトレードオフのプロセス図

5. ワークロードタイプ別の対応策
これまでの内容を踏まえて、いくつかの代表的な種類のワークロードで Auto Mode における中断を適切に取り扱う方法を考えてみましょう。
6. まとめ
本記事では、Amazon EKS Auto Mode におけるノードの自動更新メカニズムについて詳しく解説しました。Auto Mode は、多くのワークロードに対して運用の自動化と最適化をもたらしますが、ワークロードの特性を十分に理解し、適切な設定を行うことが成功の鍵となります。
本記事で解説した考え方や対応策を参考に、皆さんの環境に最適な Auto Mode の活用を検討いただければ幸いです。
筆者プロフィール
林 政利 (@literalice)
アマゾン ウェブ サービス ジャパン合同会社
コンテナスペシャリスト ソリューションアーキテクト
フリーランスや Web 系企業で業務システムや Web サービスの開発、インフラ運用に従事。近年はベンダーでコンテナ技術の普及に努めており、現在、AWS Japan で Amazon ECS や Amazon EKS でのコンテナ運用や開発プロセス構築を中心にソリューションアーキテクトとして活動中。

Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages