はじめに
この記事は はてなエンジニア Advent Calendar 2024 2025/1/9の記事です。
昨年の11月にAWS EKS AutoModeが発表されました。AWS EKS AutoMode は、Kubernetes クラスターの管理をより簡単になるよう設計された新しい仕組みです。
Node周りが特徴的だったので記事にしました。
EKS AutoMode の概要
EKS AutoMode は、AWS が提供する便利なクラスター管理機能です。これまでの EKS クラスターと異なり、次の特徴があります。
- ノード管理の自動化: ノードプールの作成やスケーリングが Karpenter によって自動的に行われます。
- EKS アドオンの自動管理: CoreDNS、kube-proxy、AWS CNI プラグイン、Karpenter、AWS Load Balancer Controller などの主要アドオンが自動で設定・更新され、手動の手間を省きます。
EKS AutoMode クラスターを試してみた
EKS AutoMode を使ってクラスターを作成し、その初期状態や動作を確認しました。
初期状態
クラスターを作成すると、General-purpose と System という2種類のノードプールが用意されています。これらはKarpenterが管理するリソースでコンソール上からはビルトインノードグループとして見えます。初期状態ではどちらのノードプールにもノードがありません。
$ kubectl get nodepool NAME NODECLASS NODES READY AGE general-purpose default 0 True 2m5s system default 0 True 2m5s
当然ながら、ノードがないためPodが1つも動作していない状態です。このことから、Karpenter などの設定済みアドオンはユーザーから直接は見えない場所で動いていることがわかります。
アプリケーションをデプロイしてみる
試しに Nginx を1 Pod デプロイしてみると、Karpenter によって新しいノードがすぐに作成されました。このノードは c5a.4xlarge インスタンスで起動して以下の通りでした。
- OS: Bottlerocket
- コンテナランタイム: containerd
$ kubectl describe node i-XXXXXXXXXXXXXXXXX ... System Info: OS Image: Bottlerocket (EKS Auto) Container Runtime Version: containerd://1.7.22+bottlerocket Kubelet Version: v1.31.1-eks-1b3e656 ...
このデプロイを削除したらNodeもDrainされ0台の状態に戻りました。
System ノードプールについて
System ノードプールは、クラスター管理用の重要な Pod(例: CoreDNS、kube-proxy、AWS CNI プラグイン)を動かすための専用ノードプールです。このノードプールには、以下のような特徴があります。
- 専用リソースとしての運用:
CriticalAddonsOnlyというテイントで保護されており、通常のワークロードとは分離されています。
- Pod デプロイの条件:
- このノードプールで動作する Pod は、
tolerationsを設定してテイントを許可する必要があります。
- このノードプールで動作する Pod は、
以下のように tolerations を指定することで、System ノードプールでのデプロイを許可できます。
tolerations: - key: "CriticalAddonsOnly" operator: "Exists"
General-purpose ノードプールについて
General-purpose ノードプールは、主にユーザーのアプリケーションを動かすために用意されたノードプールです。
特徴
- 柔軟なスケール:
- アプリケーションのリソース要求に応じてノードをスケールアップ・スケールダウンできます
- 独立したノードプール:
Systemノードプールとは分離されており、アプリケーション優先のスペースとして利用できます
- マネージドなインスタンス:
注意点
デフォルトではオンデマンドインスタンスが使われ、特にインスタンスサイズの指定がないため、大きめのインスタンスが起動することもあります。必要に応じて、カスタム設定を行う必要があります。
ノードプールのカスタマイズ
EKS AutoMode では、独自のノードプールを作成することで、スポットインスタンスの利用や特定のインスタンスサイズの指定が可能です。以下は、スポットインスタンス用ノードプールの例です。
apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: spot-nodepool spec: template: spec: requirements: - key: "karpenter.sh/capacity-type" operator: In values: ["spot"] - key: "eks.amazonaws.com/instance-category" operator: In values: ["c", "m", "r"] limits: cpu: "1000" memory: 1000Gi
まとめ
EKS AutoMode を利用することで、以下のメリットが得られます。
- 簡単なクラスター管理: ノードの作成やスケーリングが自動化され、運用の手間が大幅に減少します。
- 便利なアドオン管理: CoreDNS や kube-proxy など、主要なアドオンの設定や更新が自動化され、さらなる効率化を実現します。
ビルドインノードグループはインスタンスのキャパシティタイプやインスタンスタイプがデフォルトのため注意が必要です。実際の運用でコスト削減したい場合はカスタムのノードプールを作ることになると思います。
ちなみにビルトインノードグループは初期設定時に構築しないことも可能ですし、一度構築した後も削除できそうでした。
実際の運用に利用できたら運用負荷を下げることができそうなので引き続き検証していきたいと思います。






