Amazon Web Services ブログ

Amazon EKS add-ons のご紹介: Kubernetes 運用ソフトウェアのライフサイクル管理

この記事は、Introducing Amazon EKS add-ons: lifecycle management for Kubernetes operational software を翻訳したものです。

当初から、Amazon Elastic Kubernetes Service (Amazon EKS) の目標は、Kubernetes クラスター管理の専門家ではなくても AWS 上で Kubernetes を簡単に実行できるフルマネージドサービスを構築することでした。Amazon EKS が最初にローンチしたとき、それはフルマネージドな Kubernetes コントロールプレーンを意味していました。やがて、お客様からはクラスターに必要なコンピュートパワーの管理を支援してほしいという要望が出てきました。1 年前には、EKS Managed Node Groups と AWS Fargate のサポートを導入しました。

お客様からはさらなる改善のご要望をいただいていました。本日は、フルマネージドな Kubernetes クラスターを提供するための主要なステップである新機能、EKS add-ons について紹介したいと思います。EKS add-ons を使用すると、Kubernetes アプリケーションをサポートするための重要な機能を提供する運用ソフトウェアまたはアドオンを構成、デプロイ、更新することができます。これらのアドオンには、Amazon VPC CNI のようなクラスタネットワーキングのための重要なツールのほか、可観測性、管理、スケーリング、セキュリティのための運用ソフトウェアが含まれます。

本日より Amazon VPC CNI plugin から、Amazon EKS では、新しいクラスターを作成するとき、またはクラスターの実行後いつでもアドオンを有効にできるようになりました。EKS は、クラスター上でアドオンソフトウェアを起動し、1 つのコマンドで新しいバージョンのアドオンをデプロイできるようにします。すべてのアドオンには最新のセキュリティパッチとバグ修正が含まれており、Amazon EKS で動作することが AWS によって検証されています。これにより、本番環境に対応した Kubernetes クラスターを起動、管理、アップグレードするために必要な作業が削減され、クラスターの安定性とセキュリティを維持することできます。

どのように機能するか

アドオンの構成は、クラスターの作成時、または既存のクラスターに対していつでも行うことができます。クラスター作成時の場合、実行するアドオンのバージョンを指定するだけです。

Add-ons on creating a cluster

クラスターが作成されると、クラスターの Configuration に新たに追加された Add-ons タブで実行されているアドオンを確認することができます。

Add-on Tab on EKS

このクラスターは古いバージョンの VPC CNI plugin で起動されており、アップデートが利用可能であることに気づいたかもしれません。アドオンはいつでも簡単に編集でき、バージョンやサービスアカウントのロールを変更することができます。

アップデートは、実行するアドオンのバージョンを選択するだけで開始されます。オプションの Override existing configuration チェックボックスは、問題が発生した場合に、適用する新しいアドオン構成を優先して、既存のアドオン設定との競合を自動的に解決します。

Update Add-on

変更はクラスター内で適切に処理され、関連する Kubernetes ワークロード全体に更新がロールアウトされます。数分後、アドオンが更新されたことが確認できます。アドオンはクラスター上で実行されている Kubernetes アプリケーションであるため、アップデート中に直接検査することもできます。この例では、VPC CNI plugin (aws-node) の DaemonSet の Pod を監視すると、これらの更新が表示され、イメージが 1.7.5 に更新されたことがわかります。

Update Pod

IAM Roles for service accounts

EKS add-ons の重要な機能は、IAM roles for service accounts のサポートです。クラスターが最初に作成されたとき、IAM アクセス許可を必要とするアドオンソフトウェア (VPC CNI plugin など) は、実行されている Amazon EC2 インスタンス (またはノード) からアクセス許可を継承します。IAM roles for service accounts を使用すると、クラスターのノード上で稼働するアプリケーションが共有する広範な IAM アクセス許可を付与するのではなく、Kubernetes アプリケーションに直接 IAM アクセス許可を割り当てることができます。

IAM roles for service accounts を構成するにはクラスターがアクティブである必要があるため、クラスター作成時に有効化されたアドオンは常にノードのロールを使用して起動されます。これはクラスターが起動した後であればいつでも変更できます。

最初のステップは、使用するサービスアカウントの OpenID Connect (OIDC) プロバイダーを作成することです。まず、クラスターの Configuration タブに移動し、Details を選択して OIDC プロバイダーの URL を確認します。

Select OIDC URL

続いて、コピーした URL を使用して AWS IAM コンソールで OIDC プロバイダーを作成します。Audience にはsts.amazonaws.com を指定します。

Add Identity Provider

OIDC プロバイダーを作成したら、それを利用する IAM ロールを作成します。この IAM ロールがアドオン、私たちの場合は VPC CNI Plugin の ‘aws-node’ Pod にアクセス許可を与えます。

Create Role

管理ポリシーである AmazonEKS_CNI_Policy を検索し、アタッチします。このポリシーは、VPC CNI Plugin に対して適切なアクセス許可が既に定義されています。

Assign Policy

ロールを作成したら、クラスターと Amazon VPC CNI のサービスアカウント (aws-node) を含めるようにロールの信頼ポリシーを変更する必要があります。

Trust Relationship

ロールを引き受けることができるエンティティの正しい形式は、"oidc.eks.<region>.amazonaws.com/id/<oidc provider ID>:sub": "system:serviceaccount:kube-system:aws-node" です。

信頼ポリシーを編集するとき、前半の部分はすでに入力されているはずです。:aud:sub に変更し、"system:serviceaccount:kube-system:aws-node" を追加します。

Trust Policy

1 つのクラスターに対してこのロールを構成しましたが、信頼ポリシーを編集することで、複数のクラスターにまたがってこのアプリケーションに同じロールを使用することもできます。

ロールが作成されたので、クラスターに戻り、新しい IAM ロールを使用するようにアドオンを更新します。アドオンを編集し、ドロップダウンからロールを選択します。

Update Addon Role

1 分ほどで、新しい IAM ロールを使用するように、クラスター上のアドオンが更新されます。

Addon Ready

ロールが適用されたら、ノードのロールから VPC CNI ポリシーを削除することができます。IAM roles for service accounts を設定する方法についての詳細な説明は、EKS のドキュメントに記載されています。

Server-side apply の導入

では、これらのアドオンはどのようにしてクラスターに組み込まれ、CNI カスタムネットワークなどの重要な構成変更を上書きしないようにするのでしょうか。EKS add-ons は、Server-side apply と呼ばれる Kubernetes バージョン 1.18 で利用可能な新機能を使用します。Server-side apply は、‘kubectl apply’ の機能を Kubernetes API server に移行し、構成変更時に発生する競合の解決をきめ細かく制御します。

Server-side apply では、Kubernetes コントロールプレーン内に新しい構成マージアルゴリズムとフィールド所有権の追跡が導入され、Kubernetes が競合を自動的に検出して解決できるようになります。Kubernetes リソースは、時間の経過とともに複数のユーザーや他のシステムコンポーネントによって変更される可能性があるため、この新機能は、どのフィールドがどのエンティティによって変更されたかを追跡し、この情報を使用して競合を解決します。

Server-side apply を使用することで、EKS add-ons はクラスター上に運用ソフトウェアをデプロイおよび更新できると同時に、ユーザーは Kubernetes API を介してアドオンへのカスタム構成変更を実装でき、この変更は EKS によって誤って上書きされることはありません。Server-side apply は Kubernetes の高度な機能です。Kubernetes blog でどのように機能するかについて詳しく紹介されています。

現在利用可能なものと今後の予定

EKS add-ons は、プラットフォームバージョン eks.3 以降で Kubernetes バージョン 1.18 を実行しているすべてのクラスターで利用できます。Server-side apply は、EKS add-ons を有効にする重要な機能であり、Kubernetes バージョン 1.18 以降でのみ利用可能であるため、EKS add-ons は古い Kubernetes バージョンとの互換性がありません。

現在、EKS add-ons は Amazon VPC CNI をサポートしており、来年には kube-proxy、CoreDNS、その他の可観測性、スケーリング、管理、セキュリティに関する一般的なツールなど、サポートするアドオンを拡大していく予定です。サポートしてほしい特定のアドオンがある場合は、AWS containers roadmap でお知らせください。

– Nate & Jesse

翻訳はプロフェッショナルサービスの杉田が担当しました。