Amazon EKS と Kubernetes の基本
Amazon EKS のマネージドコントロールプレーン、Kubernetes クラスター・ノード・Pod の関係と、AWS 上やオンプレミスでの実行方法を整理します。
Amazon EKS と Kubernetes の基本
Amazon Elastic Kubernetes Service(Amazon EKS)は、AWS 上で Kubernetes を利用するためのマネージドサービスです。AWS が Kubernetes のコントロールプレーンを運用するため、利用者はコントロールプレーンのサーバーを自分で構築・保守せずに、Kubernetes API を使ってコンテナ化アプリケーションをデプロイできます。
ただし、EKS を選べばクラスター内の運用すべてが AWS に移るわけではありません。ワークロードの設計、権限、ネットワーク、ストレージ、監視、更新方針などは利用者が決めます。実行基盤には EC2 ノード、EKS Auto Mode、EKS Hybrid Nodes、AWS Fargate などを選べます。どこまで AWS がノードやクラスター機能を管理するかは実行方式で異なります。
EKS と Kubernetes のクラスター
Kubernetes の視点では、クラスターはアプリケーションを管理する単位であり、クラスター全体を制御するコントロールプレーンと、アプリケーションを実行するノードで構成されます。一方、Amazon EKS の AWS リソースとしての「クラスター」は、AWS が提供するマネージドコントロールプレーンを指します。ノードは別途、EC2 のノードグループや Fargate などで用意してクラスターに接続します。
この違いは、AWS コンソールや API 上の EKS クラスターを作成しただけでは、アプリケーションを実行する計算資源まで必ず用意されたとは限らない、という点に表れます。実行方式を選び、ノードまたは Fargate の設定、ネットワークや権限を整えたうえで、ワークロードを配置します。
コントロールプレーン
コントロールプレーンは、クラスターの状態を受け付けて記録し、望ましい状態に近づけるための管理機能です。Kubernetes API サーバーは kubectl などからの要求を受け取り、スケジューラーは Pod の配置先を決め、コントローラーマネージャーはノードやワークロードなどの状態を監視して必要な調整を行います。etcd はクラスターの状態データを保持します。
EKS では、AWS がコントロールプレーンの可用性や基盤運用を管理します。コントロールプレーンは AWS 側の管理された環境で実行され、利用者が EC2 インスタンスとして直接操作するものではありません。利用者は Kubernetes API に対するアクセス権を管理し、クラスターの Kubernetes バージョンやアドオンの更新などを計画します。
ノードと実行基盤
ノードは Pod を実際に実行する計算資源です。ノードでは kubelet がコントロールプレーンと連携し、コンテナランタイムがコンテナを起動します。Kubernetes は複数のノードへ Pod を配置できます。ノード数や Pod の配置先を増やすと、処理能力を高めたり障害時の影響を分散したりできますが、そのためにはノード容量、配置条件、オートスケーリングなどを適切に構成する必要があります。
EKS では、主に次の実行方式を選びます。
| 実行方式 | 特徴と運用上の考慮点 |
|---|---|
| Amazon EC2 ノード | OS やインスタンスタイプを選び、ノード上で Pod を実行する。自己管理ノードでは EC2 容量、更新、スケーリングを設計する。マネージドノードグループを使うとノードの作成や更新を支援できる |
| EKS Auto Mode | AWS が EC2 ノードのライフサイクルに加え、コンピューティングのスケーリング、Pod ネットワーク、ロードバランサー連携、ブロックストレージなどの機能を管理する。利用者は Kubernetes の NodePool やワークロードを構成する |
| AWS Fargate | Pod ごとにサーバーレスのコンピューティング基盤を提供する。利用者はワーカーノードをプロビジョニングしない。Pod を Fargate で実行するには Fargate profile で対象を定める |
| EKS Hybrid Nodes | オンプレミスやエッジ環境の顧客管理サーバーを、AWS リージョンの EKS クラスターのノードとして接続する。AWS がコントロールプレーンを管理し、利用者が拠点側ノードを管理する |
EKS コントロールプレーンの管理と、ワークロードの計算資源の管理は別の責任範囲です。標準の EKS では AWS がコントロールプレーンを管理し、利用者が実行方式を選びます。Auto Mode を有効にすると、AWS がノードと複数のクラスター機能も管理します。Fargate を選んでも EKS クラスターの料金やアプリケーション設計がなくなるわけではなく、EC2 を選んでも EKS のコントロールプレーンを自分で立てる必要はありません。料金体系は実行方式やリソース、稼働時間によって異なるため、Amazon EKS 料金ページを確認します。
可用性を高めるには、ノードを複数のアベイラビリティーゾーンに配置し、Pod のレプリカ数や分散ルールも合わせて設計します。ノードが複数あるだけで、アプリケーションの複製や負荷分散が自動的に完成するわけではありません。Kubernetes の Deployment、Service、Pod のトポロジー分散などを使って、望ましい実行数と配置を宣言します。
Pod とコンテナ
Podは Kubernetes がスケジュールする最小のデプロイ単位です。Pod は1つ以上のコンテナを含みます。通常はアプリケーションコンテナを1つ配置しますが、密接に連携する補助コンテナを同じ Pod に含めることもできます。
同じ Pod 内のコンテナは、ネットワーク名前空間を共有し、同じ IP アドレスを使います。そのため、コンテナ同士は localhost を介して通信できます。また、共有ボリュームをマウントしてファイルを受け渡す構成も可能です。たとえば、リクエストをアプリケーションコンテナへ中継するプロキシや、アプリケーションのログを読み出して転送するコンテナをサイドカーとして同じ Pod に配置できます。
Pod は永続的なサーバーそのものではありません。障害や更新に伴い Pod が削除・再作成されることがあり、そのとき Pod 固有の一時領域に保存したデータは失われる可能性があります。保持が必要なデータは Kubernetes の永続ボリュームなど適切なストレージへ保存します。また、Pod が一時的であることとステートレスであることは同じではありません。アプリケーションの状態管理を設計し、永続データを Pod の外部に置く必要があります。
Fargate を利用する場合は Pod の実行時間や要求リソースに応じた料金が発生しますが、すべての EKS Pod がサーバーレスで稼働時だけ課金されるわけではありません。EC2 ノード上の Pod では、ノードの EC2 インスタンス料金が発生します。EKS コントロールプレーンにも別の料金があります。
kubectl によるクラスター操作
kubectl(「キューブ・コントロール」と読むことが多い)は、Kubernetes クラスターを操作するコマンドラインツールです。Kubernetes API サーバーへ認証付きで要求を送り、リソースを作成・更新したり、配置状態やログを確認したりします。たとえば、Deployment のマニフェストを適用してアプリケーションをデプロイし、Pod の状態やイベントを調べられます。
EKS への接続では、AWS CLI などを使ってクラスター接続用の kubeconfig を設定し、IAM 認証と Kubernetes 側の認可設定を整えたうえで kubectl を利用します。AWS CloudShell はコマンドを実行する環境の一つですが、CloudShell からでなければ操作できないわけではありません。ローカル端末や CI/CD 環境からも、必要なネットワーク接続と認証・権限があればアクセスできます。なお、AWS CLI で EKS クラスター自体を作成・更新する操作と、kubectl でクラスター内の Kubernetes リソースを操作することは役割が異なります。
実行場所とディストリビューションの選択
EKS と Kubernetes をどこで動かし、誰が管理するかによって選択肢が変わります。
AWS リージョンの EKS
標準的な EKS クラスターでは、AWS リージョン上のマネージドコントロールプレーンを使い、EC2 ノードまたは Fargate 上で Pod を実行します。EKS Auto Mode を有効にすると、ノードの調達・スケーリングに加えてネットワークやストレージなど一部の基盤機能も AWS が管理します。AWS 内の他サービスと統合しやすく、Kubernetes API や周辺エコシステムを利用しながら、運用を任せる範囲を選べます。
EKS on AWS Outposts
Amazon EKS on AWS Outpostsは、AWS Outposts 上にある顧客拠点のインフラストラクチャで EKS ワークロードを実行するための選択肢です。構成によって、コントロールプレーンを AWS リージョンで管理しながら Outposts 上のノードで実行する方法と、Outposts ラック上でコントロールプレーンも実行するローカルクラスターがあります。必要な Outposts の種類や利用条件が異なるため、低遅延やローカル処理の要件に合わせて公式の前提条件を確認します。
Amazon EKS Hybrid Nodes
Amazon EKS Hybrid Nodesでは、オンプレミスやエッジ環境にある利用者所有のサーバーを、AWS リージョン上の EKS クラスターにノードとして参加させます。Outposts のような AWS 提供の機器に限定されず、対応する物理サーバーや仮想マシンを拠点側で管理しながら、コントロールプレーンを AWS に任せられます。拠点側ノードの OS、キャパシティ、接続性は利用者が管理し、AWS はリージョンのコントロールプレーンを提供します。
Hybrid Nodes は「拠点に独立した Kubernetes クラスターを作る EKS Anywhere」と異なり、リージョンの EKS クラスターへ拠点のノードを接続する構成です。拠点でノードを管理する必要はありますが、コントロールプレーンは AWS が管理します。
Amazon EKS Anywhere
Amazon EKS Anywhereは、オンプレミスなど利用者が管理するインフラストラクチャ上に Kubernetes クラスターを作成・運用するためのソフトウェアです。顧客環境にクラスターのコントロールプレーンとノードを配置でき、EKS と共通性のある Kubernetes 環境を構築できます。AWS リージョン上の標準 EKS クラスターに顧客サーバーを追加する仕組みとは異なり、基盤の運用、可用性、更新、クラスター管理は基本的に利用者側が担います。AWS Support や EKS Anywhere Curated Packages、Kubernetes バージョンの延長サポートを利用する場合は、有効な EKS Anywhere Enterprise Subscription が必要です。
Amazon EKS Distro
**Amazon EKS Distro(EKS-D)**は、Amazon EKS で使われる Kubernetes コンポーネントを基に、利用者が取得して独自環境を構築できるオープンソースの Kubernetes ディストリビューションです。EKS のマネージドコントロールプレーンを提供する AWS サービスそのものではありません。EKS-D を使ってクラスターを構築する場合は、インストール、コンポーネントの組み合わせ、運用、更新、サポートの体制を自分たちで整えます。
| 選択肢 | 主な実行場所 | コントロールプレーンとクラスター運用 |
|---|---|---|
| Amazon EKS | AWS リージョン | AWS がコントロールプレーンを管理し、利用者がワークロードや実行方式を構成する |
| EKS Auto Mode | AWS リージョン | AWS がコントロールプレーンとノードおよび一部のクラスター機能を管理する |
| EKS Hybrid Nodes | 顧客拠点・エッジ環境のサーバーと AWS リージョン | AWS がリージョンのコントロールプレーンを管理し、利用者が拠点側ノードを管理する |
| EKS on Outposts | Outposts を設置した顧客拠点 | 構成により、リージョン管理のコントロールプレーンまたは Outposts 上のローカルクラスターを利用する。どちらも EKS のマネージドコントロールプレーン |
| Amazon EKS Anywhere | オンプレミスなど顧客管理の環境 | 利用者がクラスター全体を管理する。AWS サポートや追加パッケージには有効な Enterprise Subscription が必要 |
| Amazon EKS Distro | 利用者が選ぶ環境 | オープンソースのコンポーネントを使い、利用者がクラスターを構築・運用する |
試験では、AWS がコントロールプレーンをマネージドサービスとして運用する EKSと、顧客環境へソフトウェアを配置し、利用者がクラスターを運用する EKS Anywhere/EKS Distroを区別します。EKS on Outposts は AWS Outposts を利用する拠点向け構成であり、単に EKS Anywhere と同じものではありません。
参考資料
- Amazon EKS ユーザーガイド:Amazon EKS とは
- Amazon EKS ユーザーガイド:EKS アーキテクチャ
- Amazon EKS ユーザーガイド:コンピューティングリソース
- Amazon EKS ユーザーガイド:EKS Auto Mode
- Amazon EKS ユーザーガイド:EKS Hybrid Nodes
- Amazon EKS ユーザーガイド:Fargate
- Amazon EKS ユーザーガイド:AWS Outposts
- EKS Anywhere:サポート範囲と Enterprise Subscription
- Amazon EKS Distro
- Kubernetes ドキュメント:Pod
- Kubernetes ドキュメント:kubectl
- Amazon EKS 料金
重要ポイント
- ▸Amazon EKS は Kubernetes のコントロールプレーンを AWS が管理するサービスであり、ワーカーノードやワークロードの運用まで自動で引き受けるわけではない
- ▸Kubernetes クラスターはコントロールプレーンとノードで構成されるが、Amazon EKS のクラスターリソースはマネージドコントロールプレーンを指す
- ▸ノードは Pod を実行する計算資源であり、EC2 ノード、EKS Auto Mode、EKS Hybrid Nodes、AWS Fargate などから要件に応じて選ぶ
- ▸Pod は Kubernetes が配置する最小の実行単位で、1つ以上の協調するコンテナを含む。Pod が常にステートレスまたはサーバーレスという意味ではない
- ▸kubectl は Kubernetes API を通じてリソースを操作する CLI で、CloudShell は接続元の選択肢の一つ
- ▸EKS Auto Mode、EKS Hybrid Nodes、EKS on Outposts、EKS Anywhere、EKS Distro は、実行場所・管理主体・サポート形態がそれぞれ異なる
このトピックの学習を完了しますか?
完了状態はいつでも切り替えられます