Amazon EKS
Kubernetes のコントロールプレーンをフルマネージドで提供するサービスで、オンプレミスの Kubernetes ワークロードをクラウドにシームレスに移行できる
概要
Amazon Elastic Kubernetes Service (EKS) は、Kubernetes のコントロールプレーン (API サーバー、etcd、スケジューラーなど) をフルマネージドで提供するサービスです。Kubernetes の標準 API と完全互換であるため、既存の Kubernetes ツール (kubectl、Helm、Argo CD など) やアプリケーションをそのまま利用できます。ワーカーノードには EC2 インスタンス (マネージドノードグループまたはセルフマネージド)、Fargate、または EKS Anywhere (オンプレミス) を選択できます。EKS は Kubernetes のバージョンアップグレード、セキュリティパッチの適用、コントロールプレーンの高可用性 (3 つの AZ に分散) を自動的に管理します。AWS の IAM、VPC、ELB、EBS、EFS などのサービスとネイティブに統合されており、Kubernetes のワークロードから AWS リソースをシームレスに利用できます。
ECS との選択基準とコスト構造
EKS と ECS はどちらもコンテナオーケストレーションサービスですが、対象とするユースケースが異なります。EKS は Kubernetes エコシステムとの互換性を重視する場合に選択します。既に Kubernetes を使用しているチーム、マルチクラウドやハイブリッドクラウド戦略を採用している組織、Kubernetes の豊富なエコシステム (Istio、Prometheus、Argo CD など) を活用したい場合に適しています。ECS は AWS に特化したシンプルなコンテナ運用を求める場合に選択します。Kubernetes の学習コストを避けたいチーム、AWS サービスとの深い統合を重視する場合、小規模から中規模のコンテナワークロードに適しています。料金面では、EKS はコントロールプレーンに時間あたり 0.10 ドル (月額約 73 ドル) の固定費が発生するのに対し、ECS のコントロールプレーンは無料です。Azure Kubernetes Service (AKS) も Free 層ではコントロールプレーンが無料ですが、SLA が提供されないため本番環境では Standard 層 (月額約 73 ドル) が推奨され、結果的に EKS と同程度のコストになります。
ノードグループと Karpenter によるスケーリング
EKS のノード管理には、マネージドノードグループ、セルフマネージドノードグループ、Fargate プロファイルの 3 つの選択肢があります。マネージドノードグループを使えば、ノードのプロビジョニング、AMI の自動更新、ドレイン (Pod の安全な退避) を AWS に委任できます。Karpenter は AWS が開発したオープンソースのノードプロビジョナーで、Cluster Autoscaler の後継として位置づけられています。Pod の要件 (CPU、メモリ、GPU、アーキテクチャ) に基づいて最適なインスタンスタイプを自動選択し、スポットインスタンスとオンデマンドインスタンスを混在させたコスト効率の高いクラスターを構築できます。Karpenter は Cluster Autoscaler と比較して、ノードの起動が高速 (Auto Scaling Group を経由しない) で、インスタンスタイプの選択が柔軟 (数十種類のインスタンスタイプから最適なものを自動選択) という利点があります。関連書籍 (Amazon) も参考になります。
セキュリティと EKS Anywhere
EKS のセキュリティは、IAM と Kubernetes RBAC の統合が基盤です。IAM Roles for Service Accounts (IRSA) を使えば、Pod 単位で IAM ロールを割り当て、S3 や DynamoDB への最小権限アクセスを実現できます。Pod Identity は IRSA の後継として導入された新しい仕組みで、設定がよりシンプルになっています。Pod Security Standards でセキュリティポリシーを適用し、特権コンテナの実行やホストネットワークの使用を制限します。EKS Anywhere はオンプレミス環境で EKS と同じ Kubernetes ディストリビューションを実行する仕組みで、クラウドとオンプレミスで一貫した運用が可能です。VMware vSphere、Bare Metal、CloudStack 上で動作し、EKS コンソールから一元管理できます。Horizontal Pod Autoscaler でアプリケーションレベルのスケーリングを設定し、Karpenter または Cluster Autoscaler でノードレベルのスケーリングを組み合わせることで、需要変動に自動的に追従するクラスター運用が実現します。