本記事は、BIPROGY / ユニアデックス社内AWSコミュニティ「BIPROGY AWS SPARK」の定期投稿企画第5回目の記事です。他の定期投稿企画の記事は、インデックスページをご覧ください。
1. はじめに
先日、ある検証環境にて Amazon EKS クラスターのアップグレードを行いました。
その際に「組み込みアドオン」あるいは「セルフマネージド版」なるコンポーネントの取り扱いにやや混乱し、整理する必要があったのでその結果を残します。
本記事では EKS on EC2 を前提とした内容です。考え方は共通ですが、EKS on Fargate や EKS Auto Mode では必ずしも当てはまらない項目もありますのでご注意ください。
2. EKS におけるアドオンの種別
EKS でアドオンというと、代表的なのが「EKS アドオン」です。
「EKS アドオン」とは、ユーザー管理ではなく AWS 管理で EKS クラスターの運用をサポートするソフトウェアを利用できるという仕組みです。AWS 管理となることにより、ユーザは導入と運用の負荷を削減できます。
EKS アドオンはその中でも、提供形態ごとにいくつか分類されています。
-
AWS アドオン
- AWS によって開発・サポートされるアドオン
- VPC CNI、CoreDNS、Kube-proxy、EBS CSI Driver、CloudWatch Observability Agent など
-
AWS Marketplace アドオン
- AWS パートナーのサードパーティによって開発・サポートされるアドオン
- Splunk、Datadog 関連ツール など
-
コミュニティアドオン
- OSS コミュニティによって開発・サポートされ、AWS が提供するアドオン
- Cluster Autoscaler、cert-manager など
本記事の趣旨からそれてしまうため詳細は割愛します。知りたい方は上記のリンクからご覧ください。
それぞれで開発・サポート体制が異なるものの、いずれも基本的にコマンド1つで導入することができ非常に便利です。
検証環境のクラスターでも積極的に EKS アドオンを利用していました。
ところで、EKS におけるアドオンには EKS アドオンとは異なる「ネットワークアドオン」と呼ばれるものが存在します。タイトルの「組み込みアドオン」はネットワークアドオンのうちの1つです。
組み込みアドオンとは、新しい EKS クラスターを作成すると自動的に導入されるアドオンです。
Kubernetes クラスターは、クラスターとして動作させるためにいくつかのネットワーキングコンポーネントが必須です。そのため EKS でも作成時に導入する必要があり、組み込みアドオンはこれに対応したものとなっています。
EKS アドオンとしても存在する VPC CNI、CoreDNS、Kube-proxy が組み込みアドオンに分類されています。
この組み込みアドオンと EKS アドオンの両方に含まれるアドオンがある、というのが当時の私の疑問点であり本記事の整理のポイントです。
次に VPC CNI、CoreDNS、Kube-proxy を視点の中心に変えます。
3. 組み込みアドオンの性質
先述の通り、組み込みアドオンは EKS クラスターの作成時に自動で導入されますが、なんと EKS クラスターをどのツールで作成したかによって管理方法が変わります。執筆時点での公式ドキュメントの記載は以下です。
- AWS コンソールを使用する場合:組み込みのアドオン(CoreDNS、kube-proxyなど)は、Amazon EKS アドオンとして自動的にインストールされます。これらは、AWS コンソール、CLI、または SDK を使用して簡単に設定および更新できます。
- その他の方法(CLI、SDKなど)を使用する場合:同じ組み込みアドオンが、通常のKubernetesデプロイメントとして実行されるセルフマネージドバージョンとしてインストールされます。これらはAWSツールで管理できないため、手動での設定と更新が必要です。
引用元:https://docs.aws.amazon.com/eks/latest/userguide/eks-networking-add-ons.html
つまり、VPC CNI、CoreDNS、Kube-proxy には EKS アドオン版とそうでない版(セルフマネージド版)があるということです。
そしてセルフマネージド版は「これらは AWS ツールで管理できないため、手動での設定と更新が必要です。」とあります。要は「導入は自動で行うけど運用は自身で管理して行ってね」ということです。
| 項目 | EKS アドオン | セルフマネージド |
|---|---|---|
| バージョン管理 | AWS がバージョン一覧を提供、CLI/コンソールで更新可能 | 手動でマニフェストを更新 |
| クラスターバージョンとの互換性チェック | リリース前に AWS 側で検証済 | ユーザ責任 |
| 監視・ヘルスチェック | コンソール上でヘルスステータスを表示可能 | なし(ユーザ責任) |
ただし、EKS アドオン版もセルフマネージド版も同じコンテナイメージを使用しているため、実体は同じです。
これにより、特に理由がない限りは EKS アドオン版を利用する方が楽です。
AWS も EKS アドオン版への移行を推奨しています。
アドオンの管理を簡素化し、AWSサービスを通じた一元的な設定と更新を可能にするため、セルフマネージド版ではなくAmazon EKSアドオンのご利用をお勧めします。
引用元:https://docs.aws.amazon.com/eks/latest/userguide/eks-networking-add-ons.html
ちなみにセルフマネージド版から EKS アドオン版への移行は難しくありません。既存の設定を保持するかどうかを指定して EKS アドオンを導入する AWS CLI コマンドを実行すればすんなり移行できます(こちらも詳細は省略します)。
ここからは推測になりますが、VPC CNI、CoreDNS、Kube-proxy は EKS クラスターの稼働に必須であることから、2020年に EKS アドオンというサービス自体がリリースされる前から存在しているはずです(実際、こちらの記事では VPC CNI が EKS アドオンのリリース以前からあることが読み取れます)。
おそらく、EKS アドオンリリース前の名残でこれら組み込みアドオンは EKS アドオン版とセルフマネージド版の2種類が存在しているのだと思います。
今もクラスターの作成方法ごとに版が異なるのは、徐々にデフォルトを EKS アドオン版に移行している途中なのか、API の何らかの仕様によるものなのでしょうか。
以上により、EKS の世界では VPC CNI、CoreDNS、Kube-proxy の3つは EKS アドオンである前に組み込みアドオンであることが分かります。
これでようやく当時の混乱が解消できました。
4. アドオンの整理
ここまでの話をまとめると、アドオンの分類については以下の2点で整理できます。
- EKS のアドオンには複数の分類基準がある
- 組み込みアドオンには複数の提供形態がある
1について、EKS におけるアドオンとは必ずしも EKS アドオンを指しているわけではありません。他にも異なる基準で分類されるネットワークアドオンというものが存在します。
EKS アドオンとネットワークアドオンは分類基準が異なるだけのため、両立することが可能です。
ネットワークアドオンの小分類の1つに、組み込みアドオンがあります。
次に2について、組み込みアドオンには EKS アドオン版とセルフマネージド版の2つがあります。
(執筆時点では)これらは EKS クラスターの作成方法によってどちらがクラスターに導入されるかが異なります。マネジメントコンソールからだと EKS アドオン版が、AWS CLI などその他の方法ではセルフマネージド版が導入されます。
これらをざっくりと図に表すと以下のイメージです。
(ベン図として一部正確ではありませんが見やすさを重視しています)
そして、VPC CNI、CoreDNS、Kube-proxy の3つは注意が必要です。
これらは前提として組み込みアドオンに分類されるアドオンであり、導入されているものが必ずしも EKS アドオンでもあるとは限りません。
これらのアドオンを運用する際は、それぞれの版の違いを理解し、自身の環境がどちらを利用しているかきちんと把握しておくことが重要です。
またセルフマネージド版を利用している場合は、特段の要件がない限り AWS が推奨している EKS アドオン版への移行を検討しましょう。
5. おわりに
本記事では EKS におけるアドオンの種類について、私自身が混乱したポイントを整理しました。
実は検証環境のクラスターは Terraform で構築したため、セルフマネージド版の組み込みアドオンが導入されており、いくら導入済 EKS アドオンの一覧を探しても見当たらず混乱しました。現在は EKS アドオン版に移行して利用しています。
クラスターのアップグレードを行うまで全く気付かず、当時は組み込みアドオンのこともよく分かっていなかったので良い学びになりました。
本記事が私と同じようにアドオンの種類で混乱している方の助けになれば幸いです。
ここまでお読みいただきありがとうございました。
参考リンク
- Amazon EKS add-ons - https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html
- Manage networking add-ons for Amazon EKS clusters - https://docs.aws.amazon.com/eks/latest/userguide/eks-networking-add-ons.html
- Amazon EKS add-ons のご紹介: Kubernetes 運用ソフトウェアのライフサイクル管理 - https://aws.amazon.com/jp/blogs/news/introducing-amazon-eks-add-ons-jp/
BIPROGYグループの技術への取り組み
We Are Hiring!
