Amazon Web Services ブログ
Amazon EKS アドオンの高度な設定
この記事は Amazon EKS add-ons: Advanced configuration (記事公開日: 2022 年 12月 14 日) を翻訳したものであり、以前の記事 Amazon EKS add-ons preserve customer edits (日本語訳: Amazon EKS アドオンでのお客様による変更内容の保持) の続きです。
はじめに
2022 年 10 月、Amazon Elastic Kubernetes Service (Amazon EKS) アドオンチームは、変更内容を保持する機能を導入し、お客様が Kubernetes API を使用して Amazon EKS アドオンの設定を安全に変更できるようにしました。この機能強化により、ユーザーは、--resolve-conflicts PRESERVE
パラメータを渡すことで、更新操作中にクラスター上のアドオン設定の変更を保持できるようになりました。
本日、この取り組みを発展させ、Amazon EKS アドオンの高度な設定のサポートを開始します。これにより、お客様は運用ソフトウェアをより自由にコントロールできるようになります。お客様は、Amazon EKS アドオン API を通じて直接設定を提供し、クラスター作成時に運用ソフトウェアのインストールと設定を 1 ステップで行うことができるようになります。これにより、お客様は既存の Infrastructure as Code (IaC) ツールを活用して Amazon EKS が提供する運用ソフトウェアを設定し、デフォルトの構成設定では対応できない、パフォーマンス、コンプライアンス、または追加の要件を満たすことができます。Amazon EKS アドオン API を通じた高度な設定のサポートは、本日より以下のアドオンで利用可能です。
これらのアドオンで利用可能な設定パラメータは、CoreDNS corefile の変更、AWS Fargate で CoreDNS を実行するための設定の簡素化、kube-proxy での IPVS モードの有効化、kube-proxy へのメモリ割り当ての追加、プレフィックス委任などの VPC CNI パラメータの有効化など、Containers Roadmap で最もリクエストの多い問題に対応しています。
高度な設定のサポートはまた、Amazon EKS 上の特定の運用ソフトウェアを使い始めるために必要な入力を簡素化するという、エキサイティングな新しいユースケースを可能にします。その良い例が、AWS Distro for OpenTelemetry (ADOT) です。ADOT は、アプリケーション監視のための分散トレースとメトリクスを収集するためのオープンソースの API、ライブラリ、エージェントを提供する OpenTelemetry の AWS が提供およびサポートするディストリビューションです。Amazon EKS アドオンを使用して、OpenTelemetry Operator をインストールし、OpenTelemetryCollector
CustomResourceDefinition (CRD) を介して OpenTelemetry Collector インスタンスを構成します。この CRD は OpenTelemetry Collector の全領域をサポートしますが、クラスターのオブザーバビリティに取り組み始めるユーザーにとっては情報量が多すぎます。ADOT の Amazon EKS アドオン設定サポートにより、設定入力に cloudwatch: true
、または amp:true
をオプションで指定できるようになりました。これにより、Amazon EKS は自動的にベストプラクティスに沿ったカスタムリソースを適用し、Amazon CloudWatch や Amazon Managed Service for Prometheus など、目的の宛先にテレメトリデータを送信する OpenTelemetry Collector を設定します。
機能の概要
Amazon EKS アドオン API に新しい configurationValues
パラメータが追加されました。ローンチ時点では、このパラメータは、JSON BLOB として設定を受け入れます。YAML のサポートも近日中に開始される予定です。JSON BLOB は、作成または更新しようとしているアドオンの特定バージョンごとの JSON Schema に準拠する必要があります。スキーマは、新しい API である Amazon EKS DescribeAddonConfiguration API を通じて利用可能です。以下で説明するように、configurationValues
パラメータは aws eks create-addon
および aws eks update-addon
AWS CLI コマンドで使用できます。
アドオン作成のワークフロー例
お客様が新しい configurationValues
JSON パラメータをどのように使用できるのかを説明するために、次のシナリオを考えてみましょう。既存の Amazon EKS クラスターがあり、AWS CLI を使用して、create-addon コマンドで既存のクラスタに VPC CNI アドオンを追加したいとします。ただし、デフォルトの設定を変更し、プレフィックス委任を有効にして、Amazon EC2 ノードで利用可能な IP アドレスの数を増やしたいと考えています。アドオンの作成中にアドオンをカスタマイズするには、まず、使用する予定のアドオンバージョンで目的の設定項目が利用可能かどうかを確認する必要があります。新しい API である Amazon EKS DescribeAddonConfiguration
API と、それに対応する describe-addon-configuration
CLI コマンドを使用して、この確認を実行します。
このシナリオでは、2 段階のプロセスで確認します。まず、以下の例で示すように、describe-addon-versions
CLI コマンドを使用して、Amazon EKS API からアドオンのバージョンを取得します。
上記の出力では、アドオン (この場合は VPC CNI) のバージョンが、対応するアーキテクチャとクラスターバージョンとの互換性と共に一覧表示されています。この情報をもとに、ユースケースに最も適したバージョンを選択します。アドオンのバージョンを選択したら、新しい CLI コマンドである describe-addon-configuration
を使用して、構成可能な設定項目を確認できます。
上記の出力では、configurationSchema
要素に、選択したバージョンの VPC CNI アドオンで設定可能な要素が含まれています。
注: 出力される
configurationSchema
は標準の JSON Schema です。各アドオンとアドオンのバージョンの組み合わせごとに独自のconfigurationSchema
を持ちます。JSON Schema は、個々のフィールドに説明などのメタデータを追加し、スキーマが設定オプションのドキュメントとして機能するようにします。JSON Schema は既存の確立された標準であるため、お客様がこれらのスキーマをよりユーザーや開発者に優しい方法で表示するために使用できるさまざまなサードパーティツールもあります。そのようなツールの 1 つは、Atlassian の JSON Schema Viewer です。
configurationSchema
フィールドの設定可能な項目には、環境変数と Kubernetes の設定が含まれています。これは、Amazon EKS がクラスターへのアドオンソフトウェアのインストール、更新、アンインストールに使用する、Helm チャートがベースになっています。出力を確認すると、以下の出力に見られるように、スキーマ要素の中に ENABLE_PREFIX_DELEGATION
環境変数があることがわかります。
ENABLE_PREFIX_DELEGATION
環境変数は、ブール値 (true/false) としてフォーマットされた文字列値をとります。以下の例に示すように、この変数のデフォルトは false です。
describe-addon-configuration
コマンドの出力をより見やすく表示するために、以下の CLI コマンドに示すように、CLI コマンドの出力 (--output
) を text に設定できます。これにより、読みやすく、コピーしやすい、エスケープされていない JSON が出力されます。クエリ (--query
) パラメータを追加することで、クライアントサイドのフィルタリングを行い、この場合、configurationSchema
フィールドのみを返すよう出力を制限しています。
この情報と新しい configurationValues
パラメータで、以下の create-addon
CLI コマンドを組み立て、高度な設定をカスタム JSON として含めることができます。
注: CLI コマンドの
configuration-values
パラメータは、Amazon EKS アドオン API のconfigurationValues
パラメータに対応しています。
上記の出力は、アドオンが CREATING ステータスにあることを示しています。describe-addon
CLI コマンドを使用してステータスを確認し、追加された高度な設定が ACTIVE なアドオンに含まれていることを確認できます。
また、以下の kubectl コマンドにより、対象のクラスター内の aws-node
DaemonSet に指定した高度な設定が反映されていることを確認できます。
JSON 入力ファイル
次の例に示すように、CLI コマンドの configuration-values
パラメータは、リテラル JSON テキストの代わりにファイルパスを受け付けることもできます。
configuration-values
パラメータの引数として入力ファイルを使用すると、CLI 入力のために JSON をエスケープしてフラット化した文字列にフォーマットする必要がなくなります。また、入力ファイルを使用することで、入力値とコマンドを分離でき、DevOps エクスペリエンスが向上します。
アドオン更新のワークフロー例
Amazon EKS アドオン API の新しい機能強化により、お客様は既に作成された (すなわち ACTIVE な) クラスターアドオンを更新し、それぞれの高度な構成設定を指定できます。既存のクラスターに CoreDNS アドオンをインストールしたシナリオを考えてみましょう。corefile
を修正して、キャッシュ間隔を 29 に変更し、サーバーエントリを追加したいと考えています。
以下の kubectl コマンドで、CoreDNS が現在使用している corefile を確認できます。
アドオンを更新して CoreDNS corefile を変更するには、以下の update-addon
コマンドを使用して、corefile の内容を JSON 入力ファイルを介して CLI コマンドの configuration-values
パラメータに渡します。
(訳注: example.json は以下を使用します。)
前述のコマンドは、CoreDNS corefile を更新し、キャッシュ間隔を 29 に変更し、example.org へのクエリを whoami プラグインで処理するサーバーエントリを追加しました。
次に、以下の CLI コマンドを使用して、coredns Deployment リソースのレプリカ数を更新します。
(訳注: example.json は以下を使用します。)
上記の例は、configurationValues
パラメータで指定された高度な設定を使用してアドオンを更新する際の重要な側面を示しています。configurationValues
パラメータを使用する場合、高度な設定はアドオン API の呼び出し間で保持されません。明示的に指定しない限り、デフォルトの設定に上書きされるという仕様です。configurationValues
パラメータを使用し、設定を上書きされたくない場合は、各 UpdateAddon
操作の configurationValues
パラメータに設定を含める必要があります。
CoreDNS の UpdateAddon
の操作では、corefile の内容を update コマンドに追加しなかったため、corefile の内容がデフォルト設定にリセットされました。corefile の設定をレプリカ数の設定に含めるには、以下の例のように、同じ JSON ファイルにそれらの設定を一緒に追加します。
また、--resolve-conflicts
パラメータをいつ、どのように使用するかを理解することも重要です。アドオン構成内の設定を誤って上書きしないことが確実な場合にのみ、--resolve-conflicts OVERWRITE
オプションを使用してください。上書きされる設定は、Amazon EKS アドオン API の外部で、Kubernetes API を介してアドオンコンポーネントの構成に追加された設定です。高度な設定として含める必要がある設定がわかっていて、確認した configurationSchema
を介して設定が可能な場合は、CreateAddon
または UpdateAddon
API 操作の configurationValues
パラメータにその設定を追加してください。
注: 以前の記事 Amazon EKS add-ons preserve customer edits (日本語訳: Amazon EKS アドオンでのお客様による変更内容の保持) では、Amazon EKS API の
UpdateAddon
操作の--resolve-conflicts PRESERVE
オプションを紹介しました。このオプションは、アドオンリソースに加えられた編集を保持し、UpdateAddon
操作中に上書きされないようにします。PRESERVE
オプションは、Amazon EKS アドオン API を介して行われる高度な設定と一緒に使用できます。しかし、アドオン設定の編集は Amazon EKS アドオン API を介して行うことを強くお勧めします。
アドオンの更新と互換性
Amazon EKS アドオンは、より新しい (または古い) バージョンに更新できます。新しい高度な構成設定が指定されない場合、アドオン API は既存の構成設定を適用しようとします。既存の構成設定が、変更されたアドオンのバージョンと互換性がある場合、更新は成功し、これらの既存の設定は維持されます。
現在のアドオン設定がアドオンのターゲットバージョンと互換性がない場合、API によってエラーが返されます。例えば、既存の Amazon EKS クラスターと、Kubernetes Deployment リソースの仕様に {"replicas":4}
という構成設定を持つ既存のアドオンがあるとします。アドオン API は既存の設定がアドオンのターゲットバージョンと互換性があるかどうかを確認します。アドオンのターゲットバージョンが Deployment の代わりに Kubernetes DaemonSet リソースを使用するようになった場合、replicas 設定は互換性がなくなります。以下のコマンドでアドオンを更新しようとしても失敗し、アドオン API からエラーが返されます。
更新によるアドオンのデフォルト設定のリセット
Amazon EKS アドオンの高度な設定を削除し、デフォルト設定を使用したいユースケースでは、アドオン API の UpdateAddon
呼び出しを、空の JSON オブジェクト (空の中括弧) を使用して行います。たとえば、以下の AWS CLI コマンドを使用して、既存のアドオンを更新し、高度な設定を削除できます。これにより、アドオンの更新が実行され、すべての高度な設定がデフォルト値に戻されます。
まとめ
この記事では、新しくリリースされた Amazon EKS アドオンの高度な設定のサポートについて概要を説明しました。既存の DescribeAddonVersions
API 呼び出しと、新しい DescribeAddonConfiguration
API 呼び出しを使用して、アドオンとアドオンバージョンの組み合わせごとの configurationSchema
を調べることにより、利用できる高度な設定を確認できます。この JSON Schema は、お客様が特定のアドオン設定をカスタマイズできるようにする、構成可能な設定を公開します。configuration-values
パラメータは、configurationSchema
要素で確認できるスキーマに従った JSON を介して、高度な構成設定を指定するために使用できます。CreateAddon
および UpdateAddon
呼び出しで configuration-values
パラメータが指定された場合、高度な構成設定が上書きされます。configuration-values
パラメータが指定されない場合、CreateAddon
および UpdateAddon
呼び出しは、これらの設定を変更しません。OVERWRITE
オプションを使用すると、CreateAddon
または UpdateAddon
操作で値を上書きすることにより、潜在的な競合を解決できます。PRESERVE
オプションを使用すると、ある操作から次の操作まで編集を保持できます。
すぐにやって欲しいこと
Amazon EKS アドオンを試してください!
Amazon EKS を運用していて、まだアドオンを試していないのなら、今がその時です。新しい高度な設定は、Amazon EKS のアドオンに、より堅牢な設定管理を追加します。クラスター内のアドオンを管理するために、使用されてている Helm チャートに基づいた追加の設定を確認できるようになりました。これにより、より詳細な設定、より柔軟なユーザーエクスペリエンスが提供され、新規および既存の DevOps 自動化により適合するようになります。
Containers Roadmap をチェックしてください!
Amazon EKS アドオンやその他のコンテナサービスの改善についてアイデアをお持ちの方は、Containers Roadmap を利用してフィードバックを提供し、既存のロードマップアイテムをレビューしてください。
翻訳はプロフェッショナルサービスの杉田が担当しました。原文はこちらです。