Amazon Elastic Kubernetes Service(Amazon EKS) は、コンテナ化アプリケーションのスケーリング、管理、デプロイを行う AWS のマネージド Kubernetes サービス です。通常は Amazon のパブリッククラウド上で実行されますが、オンプレミスにデプロイすることもできます。Amazon EKS の Kubernetes 管理インフラストラクチャは、複数の アベイラビリティーゾーン(AZ) にまたがって稼働します。AWS EKS は Kubernetes 準拠の認定 を受けているため、既存のツール群に EKS を統合できます。
本記事は、AWS 上の Kubernetes に関する連載の一部です。
EKS クラスターは主に コントロールプレーン と ワーカー ノード で構成されます。各クラスターは、それぞれ専用の完全マネージドな Virtual Private Cloud (VPC) 上で実行されます。
コントロールプレーンは 3 つのマスター ノードから成り、それぞれが異なる AZ(アベイラビリティーゾーン)で稼働して AWS の高可用性を確保します。Kubernetes API 宛ての受信トラフィックは、AWS Network Load Balancer (NLB) を経由してルーティングされます。
ワーカー ノードは、AWS が管理しない VPC 内の Amazon EC2 インスタンス 上で実行されます。ワーカー ノードに割り当てる VPC は、利用者側で制御・設定できます。既存の自動化にアクセスさせたり、ワーカー ノードをプロビジョニングしたりするために SSH を使用することも可能です。
デプロイ方法には 2 つの主要オプションがあります。環境やアプリケーションごとに 個別のクラスターを用意する方法、または IAM セキュリティポリシー と Kubernetes Namespaces を定義して 1 つのクラスターを複数アプリケーションで共有する方法です。
コントロールプレーンとクラスター間の通信を制限するために、EKS は Amazon VPC ネットワークポリシー を提供します。Kubernetes の RBAC(ロールベースアクセス制御) で定義された、権限のあるクラスターおよびアカウントのみが、コントロールプレーンの各コンポーネントを閲覧・通信できます。
次の図は、EKS 上でクラスターをデプロイするプロセスを示しています。EKS にクラスター作成を指示すると、バックグラウンドでクラウドリソースがプロビジョニングされ、その後 Kubernetes クラスターに接続してワークロードを実行できます。
出典: AWS
AWS EKS のアーキテクチャは、主に クラスター、ノード、ネットワーク の各コンポーネントで構成されます。
クラスターは コントロールプレーン と EKS ノード で構成されます。
EKS のコントロールプレーン
コントロールプレーンは、Amazon が管理する AWS アカウント内の専用の EC2 インスタンス群上で動作し、アプリケーションがアクセスする API エンドポイント を提供します。シングルテナント モードで稼働し、API サーバーや etcd といった Kubernetes のマスター コンポーネントを制御します。
etcd 上のデータは AWS Key Management Service (KMS) で暗号化されます。Kubernetes のマスター ノードは複数の アベイラビリティーゾーン (AZ) に分散配置され、トラフィックは Elastic Load Balancer (ELB) によって管理されます。
EKS ノード
Kubernetes のワーカー ノードは、組織の AWS アカウント内の EC2 インスタンス で実行されます。各ノードは証明書ファイルを用いて API エンドポイント に接続し、コントロールプレーンと通信します。クラスターごとに固有の証明書 が使用されます。
関連コンテンツ: AWS Kubernetes クラスター:EC2 と EKS によるクイックセットアップ
Amazon EKS クラスターは、Pod のスケジューリングにおいて主に 3 つの方法を提供します。
自己管理型ノード(Self-managed Nodes)
EKS における「ノード」は、Kubernetes の Pod をスケジュールできる Amazon EC2 インスタンス を指します。Pod は EKS クラスターの API エンドポイント に接続します。ノードはノードグループに編成され、同一グループ内のすべての EC2 インスタンスは次の特性を同一にする必要があります。
1 つのクラスター内に複数のノードグループを持つことができ、グループごとに異なるインスタンスタイプや異なるロールを割り当てられます。
マネージドノードグループ(Managed Node Groups)
Amazon EKS は、ライフサイクル管理を自動化した マネージドノードグループ を提供します。これにより、ノードの作成・更新・終了を一括操作で自動化できます。EKS は、EKS 用に最適化された最新の Linux AMI を使用します。ノードを終了する際、EKS は**ドレイン(安全な排出)**を実施し、中断の少ないデプロイを可能にします。運用上のラベリングも、ノードグループ単位で容易に適用できます。
マネージドノードは、Amazon EKS サービスが管理する EC2 Auto Scaling グループ で動作します。実行する アベイラビリティーゾーン を指定できます。起動方法としては EKS コンソール、eksctl、AWS CLI、AWS API、CloudFormation など複数の選択肢があります。
Amazon Fargate
Amazon Fargate はサーバーレスのコンテナーサービスで、基盤となるサーバーインフラの管理なしで ワーカーノードを実行できます。Fargate の課金は実際に使用した vCPU とメモリに基づきます。クラスターのニーズに応じて、必要な計算リソースを自動的に供給します。
次の図は、EKS クラスターのネットワーク アーキテクチャを示しています。
出典: AWS
Amazon EKS クラスターは Virtual Private Cloud(VPC) 上で稼働し、これは Amazon データセンター内の安全なプライベート ネットワークです。EKS は、あなたが選択した Amazon リージョンの既存サブネット内に、必要なリソースをプロビジョニングします。
EKS コントロールプレーンで使用されるネットワークインターフェース
EKS のコントロールプレーンは Amazon 管理の VPC 上で動作し、作成した各 EKS クラスターに対して、あなたのアカウント内にネットワークインターフェースを作成・管理します。EC2 および Fargate インスタンスは、これらのネットワークインターフェースを介してコントロールプレーンに接続します。
デフォルトでは パブリックエンドポイント が提供されます。クラスターのセキュリティを強化するために、プライベートエンドポイントを有効化 したり、特定 IP アドレスへのアクセス制限 を設定することができます。オンプレミスのネットワークや他の VPC と、クラスターが使用する VPC との接続性も構成可能です。
EKS ノードのネットワーキング
EKS クラスターで使用される各 EC2 インスタンス は、いずれかのサブネットに配置されます。ネットワーク定義には以下の 2 つの方法があります。
特に Cloud Volumes ONTAP は、コンテナ化ワークロード向けの Kubernetes Persistent Volume のプロビジョニングおよび管理要件 をサポートします。
また、Cloud Volumes ONTAP を用いた Kubernetes ワークロードの事例研究 では、コンテナ化アプリケーションの課題に対して Cloud Volumes ONTAP がどのように貢献するかを詳しく解説しています。