AWSのre:Inventはまだ正式に始まっていませんが、EKSにプロのようにKubernetesを使えるような画期的な新機能が追加されました!!
*このブログでは、EKSオートモードとは何かを調査し、既存のクラスタでEKSオートモードを有効にする方法、管理されたノードグループのワークロードを既存クラスタのEKSオートモードに移行しようと試みますが、それができない理由はブログでご説明します! *
*また、EKS Autoの価格と操作のシンプルさを分析し、有効にするかどうかの判断を下すのに役立ちます。 *
このブログを2つのコマンドだけで素早く再現できるTerraformリポジトリを作成しました。「Let's comking, EKS Auto Mode」です。
動機
2024年12月2日(JST)– re:Invent 2024の直前に、AWSはエキサイティングなアップデートを発表しました。EKSオートモードを導入しました。 *
このアップデートはあなたにとって何を意味するのでしょうか?
- EKSクラスターのあらゆる管理を自動化し、AWSがワークロードの円滑な運用を可能にするインフラの構築と管理を可能にします。
- *AWSが管理するクラスターインフラには、計算オートスケーリング、ポッドおよびサービスネットワーキング、アプリケーションロードバランシング、クラスターDNS、ブロックストレージ、GPUサポートなどのアドオンではなく、多くのKubernetes機能がコアコンポーネントとして含まれています*
- 新しいEKSオートモードクラスターを展開するか、既存のクラスタでEKSオートモードを有効にすることができます
注:Terraformのサポート(まだ継続中)はまだ実現していないため、このブログではAWSコンソールを使用します。
このアップデートのコストに関する考慮事項
- https://aws.amazon.com/eks/pricing/ によると
- あなたは2つの要素に対して支払われ続けます:
- Amazon EKSクラスタ料金:*$0.10/クラスタ/時間*(拡張は$0.60/クラスタ)
- しかしオートモードを使う場合は追加料金を支払わなければなりません!!
Amazon EKS Auto Modeは、EKS Auto Modeが起動・管理するAmazon EC2インスタンスの期間と種類に基づいて料金を支払う場合です。以下のAmazon EKS Auto Modeの価格は、EC2インスタンス自体をカバーするAmazon EC2インスタンス価格に加えています。
*簡単に言えば、EKSオートモードは通常のEC2インスタンス費用に加えて、起動されたEC2インスタンスの種類に応じて異なる管理費を請求します。 *

実際に何を自動化しているのか
EKSオートモードはデータプレーンコンポーネントの自動化を目的としているため、以下の自動化されているコンポーネントと機能を示します:
EKSオートモードでの自動データプレーンコンポーネント
- **計算管理:**ノードのプロビジョニング、スケーリング、アップグレード、ロードバランシングなど、クラスター計算の重要な側面を自動化し、手間のかからないKubernetes運用を実現します。
- ノード:
- 必須サービスを持つ最適化されたAMIを自動的に選択します。
- SELinux、読み取り専用ルートファイル、SSH/SSMアクセス禁止でノードを保護する。
- NVIDIA および Neuron GPU のGPUサポートを含む
- 自動スケーリング:
- Karpenterを使って、スケーリング不能なポッドの新しいノードを監視・展開します。
- 未使用ノードを動的に終了させてリソースを最適化します。
- ノード:
- アップグレード:
- OSおよびコンポーネントのアップデートを最小限のワークロードで適用します。
- セキュリティと安定性のために最大21日間のノード寿命を強制します。
- 負荷分散:
- 自動プロビジョニングとスケーリングのためにElastic Load Balancing(ALBおよびNLB)と統合されます。
- AWSのベストプラクティスに沿った本番環境対応のロードバランシングを提供します。
- ストレージ自動化
- 一時的なストレージをボリューム設定、暗号化、削除ポリシーで最適利用に自動管理します。
- ネットワーク自動化
- IPv4/IPv6対応によるポッドおよびサービス接続の管理、セカンダリCIDRブロックを用いたIP空間の拡張。
既存クラスターでオートモードを有効にする
- このブログでは、既存のクラスタで有効化する方法を紹介します。AWSのブログでは新しいクラスタでのEKSオートモードについてすでに触れています
- 既存のクラスタを模倣するために、私のリポジトリ内のTerraformを使ってEKS管理ノードグループとEKSクラスタを展開できます
移行支援

- 本ブログ執筆時点では、EKSサポート:KarpenterからEKSオートモードへの移行、EKSマネージドノードグループからEKSオートモードへの移行、EKS FargateからEKSオートモードノードへの移行
- このブログを簡単にするために、EKS管理ノードグループからEKSオートモードへの移行方法(できれば:))
**注意:**また、KubernetesベースのリソースをセルフマネージドコントローラーまたはEKSオートモードのいずれかに所有する設定方法も確認してください。
前提条件
- IAM権限の更新およびコアEKSオートモード設定の設定
- 特定のAmazon EKSアドオンの最低必要バージョンの視点。
IAM権限の更新とコアEKSオートモード設定の設定
- EKSクラスタのIAM役割はクラスタ作成後に変更できません。EKSオートモードではこのロールに追加の権限が必要です。現在の役割に追加ポリシーを付与する必要があります。
- クラスタIAMロールへナビゲーションし、以下のポリシーを追加してください
- AmazonEKSComputePolicy
- AmazonEKSBlockStoragePolicy
- AmazonEKSLoadBalancingPolicy
- AmazonEKSNetworkingPolicy
- AmazonEKSClusterPolicy(私にはすでに存在しています)

- トラストポリシーを編集し、「sts:TagSession」を追加してアクションを許可します。

特定のAmazon EKSアドオンの最低必要バージョン
視点。
- Terraformのコードはアドオンの最新バージョンを取得するように設定しておいたので、何もしなくて済みます。
カーペンターノードプールを作成
- EKSの自動では、裏でカーペンターを使ってスケーリングを行っています。
Karpenterは、クラスタのスケーリングとリソース利用率の最適化を支援するノードプロビジョニングツールです。KarpenterのNodePoolリソースを使えば、インスタンスタイプ、可用性ゾーン、アーキテクチャ、容量タイプなど、計算資源の具体的な要件を定義できます。

ノードIAMロールのために推奨ロールを作成する
私は事前に設定されたノードプールを使っていますが、この例のように自分でyamlファイルを使って設定することもできます

デフォルト権限を選択し、役割を作成する

- 役割が作成されて次を選んだ後、自動モードが有効になっている通知が表示されます

- 有効化後は、コンソールの「Overview」タブでオートモードのオプションを確認できます

- 有効化ステップで有効化された場合、EKSはノードプールも作成しました。
EKS Auto Modę を無効化
既存のEKSクラスターでEKSオートモードを無効にできます。これは破壊的な操作です。
- EKSはEKSオートモードで動作するすべてのEC2インスタンスを終了します。
- EKSはEKSオートモードで動作するすべてのロードバランサーを削除します。
EKSマネージドノードグループからEKSオートモードへの移行
Amazon EKSクラスターをEKSオートモードに移行する際、eksctl CLIツールを使って既存のワークロードを管理ノードグループからスムーズに移行できます。
このプロセスはアプリケーションの継続的な可用性を確保しつつ、EKSの自動モードは計算資源を最適化します。移行は実行中のアプリケーションへの最小限の混乱で実行可能です。
前提条件
- EKSオートモードを有効にしたクラスター
- eksctl CLIがインストールされ、クラスタに接続されています。詳細については、「Amazon EKSを使用する設定」をご覧ください。
- Karpenterはクラスタにインストールされていません。
ポッドの現状
- 2つのポッドがマネージドノードグループで稼働しています。
jatin.mehrotra@CK0662-001 eks-auto-mode % kubectl get po -o wide
名前:準備完了状態 再起動 年齢 IP ノード ノミネーション ノード 準備ゲート
test-65b7dbddd4-jdxhw 1/1 Running 0 2m29s 10.0.2.52 ip-10-0-2-85.ec2.internal <none><none>
test-65b7dbddd4-lzd4r 1/1 Running 0 2m29s 10.0.1.118 ip-10-0-1-128.ec2.internal <none><none>

- ドキュメントに従い、以下のeksctl CLIコマンドを使用して、既存の管理ノードグループインスタンスからポッドの排水を開始してください。EKSオートモードでは、置き去りになったポッドをバックアップする新しいノードが作成されます。
EkSCTL Update auto-mode-config --cluster eks-auto-test --drain-nodegroup --region us-east-1 --profile ck-test
これは私のeksctlバージョンかと思いましたが、今のところこのフラグの更新がEksctlに反映されていないようです。公式のeksctlリポジトリにも未解決の問題があります

私のeksctlバージョン出力(最新バージョンです)
Eksctl情報
eksctl バージョン: 0.194.0
- 他のeksctlコマンドは私のクラスターで実行されているので、接続の問題ではない
jatin.mehrotra@CK0662-001 eks-auto-mode % eksctl get addons --cluster eks-auto-test --region us-east-1 --profile ck-test
2024-12-02 12:29:41 [i] Kubernetes バージョン「1.30」がクラスタ「eks-auto-test」で使用中
2024-12-02 12:29:41 [i] すべてのアドオンを入手
2024-12-02 12:29:44 [i] アドオン実行の問題を見るために 'eksctl get addon --name <addon-name> --cluster <cluster-name>'
名前 バージョン 発行 IAMROLE 可用性 設定値更新 POD 識別 アソシエーション ロール
amazon-cloudwatch-observability v2.5.0-eksbuild.1 ACTIVE 0
aws-ebs-csi-driver v1.37.0-eksbuild.1 ACTIVE 0
coreDNS v1.11.1-eksbuild.8 ACTIVE 0 v1.11.3-eksbuild.2, v1.11.3-eksbuild.1,v1.11.1-eksbuild.13, v1.11.1-eksbuild.11, v1.11.1-eksbuild.9
kube-proxy v1.30.6-eksbuild.3 ACTIVE 0
VPC-CNI v1.19.0-eksbuild.1 ACTIVE 0
更新:12月3日 午前0時20分 JST
- AWSチームが新バージョンのeksctlをリリースしたにもかかわらず、問題は依然として存在し、ドキュメントも誤っています。
「--drain-all-nodegroups」とcluster-configファイルが必要ですが、これはコンソールやterraformで作成された既存のクラスタで生成するのが非常に難しいです。
EkSCTL Update Auto-Mode-Config --drain-All-NodeGroups -f eks-config.yaml --profile CK-Test
AWSがこのバグを修正するまで、もう少し待つ必要があります。このバグには新たな問題があります。
EKSオートモードクラスターのKubernetesバージョンのアップデートを調査中
- Amazon EKS オートモードの計算能力は、Kubernetes版ノードを制御します。コントロールプレーンをアップグレードした後、EKSオートモードは管理ノードを段階的に更新し始めます。EKSオートモードはポッドの妨害予算を尊重します。
- Amazon EKSオートモードの機能、例えばコンピュートの自動スケーリング、ブロックストレージ、ロードバランシング機能の手動アップグレードは不要です。
- オートモードは、コントロールプレーンの更新とノードの置き換えの調整を処理し、ポッドの混乱予算を通じてワークロードの可用性を維持することで、バージョン更新プロセスを簡素化します。
- オートモードクラスターのアップグレード時、従来手動更新が必要だった多くのコンポーネントがサービスの一部として管理されるようになりました。
- コントロールプレーンのアップグレードを開始すると、EKSオートモードはクラスタ内のノードの置き換えを開始します。新しいノードは対応する新しいKubernetesバージョンを持っています。EKSオートモードはノードのアップグレード時にポッドのディスラプション予算を観測します。
- CoreDNS
- KubeProxy
- AWS ロードバランサーコントローラ
- カーペンター
- AWS EBS CSIドライバー
- しかし、更新は引き続き責任があります:
- クラスタにデプロイされたアプリやワークロード
- セルフマネージドのアドオンとコントローラー
- Amazon EKS アドオン
ソリューションアーキテクトの視点から
- このブログでは、EKSオートモードがインフラ管理をAWSに移すことでKubernetesの運用を簡素化する方法を紹介しました。
- 最適なEC2インスタンスを自動的に選択し、計算コストを最適化し、需要に応じてリソースを動的にスケールします。
- この機能はセキュリティ、パフォーマンス、可用性を向上させるとともに、深い専門知識、容量計画、手動管理の必要性を減らします。
- しかし、ブログでも見た通り、まだ新しい機能なので**、アップデートやバグ修正**が必要かもしれません。
- *はい、確かに操作を簡素化し、ユーザーがProのように安全にKubernetesを動かせるようにしますが、それには代償が必要です。 *
最初はコストが上がると思いますが、本当のメリットは長時間使用すれば、操作しやすく追加料金を相殺するでしょう。