EKSとは?IT業務初心者向けに仕組み・役割・ECSとの違いをやさしく解説
IT業務に従事していると、「EKS」という言葉を聞くことがあります。
例えば、システム開発やインフラ運用の現場では、次のような会話が行われます。
- EKSクラスターへアプリケーションをデプロイします
- Podが正常に起動しているか確認してください
- ノードのCPU使用率が高くなっています
- Deploymentの設定を変更します
- kubectlでログを確認してください
IT業務を始めたばかりの人は、「EKSはサーバーのこと?」「ECSとは何が違うの?」「Kubernetesとは別のサービスなの?」と疑問に感じるかもしれません。
EKSを理解するには、Kubernetesやコンテナについても知っておく必要があります。
この記事では、IT業務に従事する初心者向けに、EKSの意味や仕組み、重要な用語、実際の業務で行う作業をわかりやすく解説します。
EKSとは?
EKSとは、Amazon Elastic Kubernetes Serviceの略称です。
AWSが提供している、Kubernetesを利用するためのマネージドサービスです。
簡単に説明すると、EKSは次のようなサービスです。
Kubernetesを使って、複数のコンテナをAWS上で実行・管理するためのサービス
Kubernetesを自分たちだけで構築・運用する場合、アプリケーションを動かすサーバーだけでなく、Kubernetes全体を管理する仕組みも準備しなければなりません。
EKSでは、Kubernetesの管理機能にあたる「コントロールプレーン」をAWSが管理します。
そのため、利用者はKubernetesの管理機能を一から構築する必要がなく、アプリケーションや実行環境の管理に集中しやすくなります。
EKSを理解するためにコンテナを知ろう
EKSを理解するには、最初に「コンテナ」という言葉を理解しておく必要があります。
コンテナとは、アプリケーションを動かすために必要なプログラムや設定をひとまとめにした実行環境です。
例えば、Webアプリケーションを動かすためには、次のようなものが必要です。
- アプリケーションのプログラム
- JavaやPythonなどの実行環境
- 必要なライブラリ
- ミドルウェア
- 設定ファイル
これらをひとつの箱のようにまとめたものがコンテナです。
コンテナを利用すると、開発者のパソコン、テスト環境、本番環境で同じ実行環境を再現しやすくなります。
そのため、次のような問題を減らせます。
「開発者のパソコンでは正常に動いたのに、本番環境では動かない」
Kubernetesとは?
Kubernetesとは、複数のコンテナを効率よく実行・管理するための仕組みです。
「クバネティス」と読み、「K8s」と略されることもあります。
コンテナが1個や2個であれば、人が手作業で起動や停止を管理できるかもしれません。
しかし、大規模なシステムでは、数十個から数百個以上のコンテナが動くことがあります。
コンテナの数が増えると、次のような管理が必要になります。
- 必要な数のコンテナを起動する
- 停止したコンテナを再作成する
- 複数のサーバーへコンテナを配置する
- アクセスを複数のコンテナへ振り分ける
- 新しいバージョンへ順番に入れ替える
- アクセス数に応じてコンテナ数を増減する
Kubernetesを利用すると、これらの作業を自動化しやすくなります。
EKSとKubernetesの違い
EKSとKubernetesは、同じものではありません。
| 用語 | 役割 |
|---|---|
| Kubernetes | 複数のコンテナを管理するためのオープンソースの仕組み |
| EKS | KubernetesをAWS上で利用しやすくするマネージドサービス |
簡単に整理すると、Kubernetesという技術をAWS上で利用するためのサービスがEKSです。
KubernetesはAWS以外のクラウドサービスや、自社のサーバーでも利用できます。
一方、EKSはAWSが提供しているサービスであり、AWSのネットワーク、権限管理、監視などのサービスと連携しやすい特徴があります。
EKSは何を管理してくれるの?
Kubernetesの環境は、大きく「コントロールプレーン」と「データプレーン」に分けられます。
コントロールプレーン
コントロールプレーンとは、Kubernetesクラスター全体を管理する部分です。
主に次のような処理を担当します。
- 利用者からの操作を受け付ける
- アプリケーションをどのノードで動かすか決める
- 現在の状態を管理する
- 設定した状態と実際の状態を比較する
- 必要に応じてPodを起動・停止する
EKSでは、このコントロールプレーンをAWSが管理します。
利用者がコントロールプレーン用のサーバーを直接構築・保守する必要はありません。
データプレーン
データプレーンとは、実際にアプリケーションのコンテナが動く部分です。
アプリケーションは、ノードと呼ばれる実行環境上でPodとして動作します。
データプレーンには、主に次の選択肢があります。
- Amazon EC2を使用する
- EKSマネージドノードグループを使用する
- AWS Fargateを使用する
- EKS Auto Modeを使用する
- オンプレミスなどの環境を接続する
コントロールプレーンはAWSが管理しますが、アプリケーション、Kubernetesの設定、権限、ネットワークなどについては利用者側の管理も必要です。
EKSを構成する重要な用語
EKSの実務では、Kubernetesに関する多くの専門用語が登場します。
初心者は、まず次の用語を理解しましょう。
クラスター
クラスターとは、Kubernetesでアプリケーションを実行・管理する環境全体です。
コントロールプレーン、ノード、Pod、ネットワークなどをまとめた大きな単位と考えるとわかりやすいでしょう。
実務では、本番環境、検証環境、開発環境でクラスターを分けることがあります。
ノード
ノードとは、Podを動かすための実行環境です。
EC2を使用する構成では、EC2インスタンスがノードとしてEKSクラスターに参加します。
ノードには、複数のPodを配置できます。
ノードのCPUやメモリが不足すると、新しいPodを配置できなかったり、アプリケーションの動作が不安定になったりすることがあります。
ノードグループ
ノードグループとは、複数のノードをまとめて管理する単位です。
EKSマネージドノードグループを利用すると、EC2を使用したノードの作成や更新などをAWSの機能を使って管理しやすくなります。
例えば、同じインスタンスタイプや設定を持つ複数のノードを、ひとつのノードグループとして管理できます。
Pod
Podとは、Kubernetesでコンテナを実行する最小単位です。
「ポッド」と読みます。
通常は、ひとつのPodの中でひとつのメインコンテナを動かします。
ただし、必要に応じて、関連する複数のコンテナをひとつのPodで動かすこともあります。
Podの中にあるコンテナは、ネットワークやストレージの一部を共有できます。
Deployment
Deploymentとは、Podをどのような状態で動かすかを管理する仕組みです。
Deploymentでは、主に次のような内容を指定します。
- 使用するコンテナイメージ
- 起動するPodの数
- Podに割り当てるCPUやメモリ
- 環境変数
- 更新方法
例えば、Podを3個動かすように設定すると、KubernetesはPodが3個動いている状態を維持しようとします。
Podが1個停止した場合は、新しいPodを作成して3個の状態へ戻します。
ReplicaSet
ReplicaSetとは、指定した数のPodを維持するための仕組みです。
通常はDeploymentを作成すると、そのDeploymentによってReplicaSetが管理されます。
初心者の段階では、ReplicaSetを直接操作するよりも、Deploymentを通じてPod数を管理することが一般的と覚えておけばよいでしょう。
Service
KubernetesのServiceとは、複数のPodへ安定して通信するための仕組みです。
Podは作り直されると、IPアドレスが変わることがあります。
そのため、利用者やほかのアプリケーションがPodのIPアドレスを直接指定すると、Podが入れ替わったときに通信できなくなる可能性があります。
Serviceを利用すると、Podが入れ替わっても、一定の接続先を通じて対象のPodへ通信できます。
Namespace
Namespaceとは、ひとつのKubernetesクラスター内を論理的に分けるための仕組みです。
「ネームスペース」と読みます。
例えば、次のように環境やチームを分けることがあります。
- 開発環境用
- 検証環境用
- 本番環境用
- チームA用
- チームB用
Namespaceを分けることで、同じクラスター内のリソースを整理しやすくなります。
ConfigMap
ConfigMapとは、アプリケーションで使用する設定情報を保存するための仕組みです。
例えば、次のような設定を保存できます。
- 動作モード
- 接続先のホスト名
- ログレベル
- 機能の有効・無効
パスワードや秘密鍵などの機密情報を保存する用途には、通常ConfigMapではなくSecretを使用します。
Secret
Secretとは、パスワードやトークンなどの機密情報を扱うための仕組みです。
例えば、次のような情報を扱います。
- データベースのパスワード
- APIキー
- アクセストークン
- TLS証明書に関する情報
ただし、Secretを使用しただけで、すべての機密情報が自動的に安全になるわけではありません。
アクセス権限、暗号化、外部の秘密情報管理サービスとの連携なども含めて設計する必要があります。
Ingress
Ingressとは、クラスターの外部から内部のServiceへHTTPやHTTPS通信を振り分けるための仕組みです。
例えば、アクセスされたURLに応じて、異なるアプリケーションへ通信を振り分けられます。
- example.com/app1はアプリケーション1へ送る
- example.com/app2はアプリケーション2へ送る
AWSでは、Application Load Balancerなどと連携して外部からの通信を受け付ける構成があります。
EKSでアプリケーションが動く流れ
EKSでアプリケーションを動かす基本的な流れを確認しましょう。
- アプリケーションからコンテナイメージを作成する
- コンテナイメージをAmazon ECRなどへ保存する
- Deploymentなどの設定ファイルを作成する
- 設定ファイルをEKSクラスターへ適用する
- Kubernetesが実行先のノードを決める
- ノード上でPodが起動する
- Podの中でコンテナが起動する
- ServiceやIngressを通じて通信できるようにする
アプリケーションの更新時には、新しいコンテナイメージを作成し、Deploymentで使用するイメージを更新します。
Kubernetesは、設定に従って古いPodから新しいPodへ順番に入れ替えます。
EKSで使用する主なAWSサービス
EKSは、AWSのさまざまなサービスと組み合わせて利用されます。
Amazon ECR
Amazon ECRは、コンテナイメージを保存するためのサービスです。
Dockerなどで作成したコンテナイメージをECRへ登録し、EKSのPodがそのイメージを取得してコンテナを起動します。
Amazon EC2
Amazon EC2は、AWS上で利用できる仮想サーバーです。
EC2をノードとしてEKSクラスターへ参加させ、そのノード上でPodを動かせます。
AWS Fargate
AWS Fargateを利用すると、EC2インスタンスを直接管理せずにPodを実行できます。
サーバーのOS管理やノード管理の負担を減らしたい場合に利用されます。
Elastic Load Balancing
Elastic Load Balancingは、複数のアプリケーションへ通信を振り分けるサービスです。
EKSでは、Application Load BalancerやNetwork Load Balancerと連携する構成があります。
Amazon CloudWatch
Amazon CloudWatchは、AWS環境の監視やログ管理に使用するサービスです。
次のような情報を確認するときに利用します。
- アプリケーションのログ
- ノードのCPU使用率
- ノードのメモリ使用状況
- エラーの発生状況
- 各種メトリクス
AWS IAM
AWS IAMは、AWS上の操作権限を管理するサービスです。
EKSクラスターを操作できる利用者や、PodからAWSサービスへアクセスするときの権限などを管理します。
Amazon VPC
Amazon VPCは、AWS上に作成する仮想ネットワークです。
EKSのノードやPodは、VPCのネットワーク内で動作します。
サブネット、ルートテーブル、セキュリティグループなどの設定が不適切だと、Podが外部サービスへ接続できないなどの問題が発生します。
EKSでPodを動かす主な方法
マネージドノードグループ
マネージドノードグループは、EKSのノードとして使用するEC2インスタンスを管理しやすくする仕組みです。
主な特徴は次のとおりです。
- EC2インスタンス上でPodを動かす
- ノードの作成や更新を管理しやすい
- インスタンスタイプを選択できる
- ノードのOSや容量を考慮する必要がある
- 複数のPodでノードのリソースを共有できる
Fargate
Fargateでは、利用者がEC2インスタンスを直接管理せずにPodを実行できます。
主な特徴は次のとおりです。
- ノード用EC2を直接準備する必要がない
- OSの管理負担を減らせる
- Pod単位でCPUやメモリを指定する
- 一部のKubernetes機能や構成には制限がある
EKS Auto Mode
EKS Auto Modeは、EKSクラスターで必要になるコンピューティング、ネットワーク、ストレージなどの一部の管理を自動化する仕組みです。
ノードや関連インフラの管理負担を減らしながら、Kubernetesアプリケーションを運用したい場合の選択肢になります。
利用できる機能や既存構成との違いを確認したうえで採用する必要があります。
EKSとECSの違い
AWSでコンテナを動かすサービスとして、EKSとECSがよく比較されます。
| 比較項目 | EKS | ECS |
|---|---|---|
| 正式名称 | Amazon Elastic Kubernetes Service | Amazon Elastic Container Service |
| コンテナ管理の仕組み | Kubernetesを使用する | AWS独自の仕組みを使用する |
| 主な設定単位 | Pod、Deployment、Serviceなど | タスク定義、タスク、サービスなど |
| 学習項目 | Kubernetesに関する幅広い知識が必要 | EKSと比較すると構成を理解しやすい |
| 他環境への展開 | Kubernetesを利用できる環境へ展開しやすい | AWSへの依存度が比較的高い |
| AWSとの連携 | AWSサービスと連携できる | AWSサービスと直接連携しやすい |
| 向いているケース | Kubernetesを標準技術として利用したい場合 | AWS上でシンプルにコンテナを管理したい場合 |
EKSとECSのどちらが優れているということではありません。
システムの要件、運用体制、担当者の知識、将来の展開などを考慮して選択します。
EKSとDockerの違い
EKS、Kubernetes、Dockerの違いも整理しておきましょう。
| 用語 | 主な役割 |
|---|---|
| Docker | コンテナイメージの作成やコンテナの実行に使用する技術 |
| Kubernetes | 複数のコンテナをまとめて管理する仕組み |
| EKS | KubernetesをAWS上で利用しやすくするサービス |
簡単に表現すると、次のような関係です。
- Dockerなどを使ってコンテナイメージを作る
- Kubernetesを使って複数のコンテナを管理する
- EKSを使ってKubernetesをAWS上で運用する
EKSでよく使用するkubectlとは?
kubectlとは、Kubernetesクラスターを操作するためのコマンドラインツールです。
「キューブコントロール」「キューブシーティーエル」などと呼ばれます。
EKSの実務では、kubectlを使ってPodの状態確認、ログ確認、設定の反映などを行います。
Podの一覧を確認する
kubectl get pods
現在のNamespaceにあるPodの一覧を表示します。
特定のNamespaceのPodを確認する
kubectl get pods -n sample-namespace
「sample-namespace」の部分には、確認したいNamespace名を指定します。
Podの詳細を確認する
kubectl describe pod sample-pod
Podの設定、状態、イベントなどを確認できます。
Podが起動しない場合の原因調査でよく使用します。
Podのログを確認する
kubectl logs sample-pod
Pod内のコンテナが出力したログを確認します。
Deploymentの一覧を確認する
kubectl get deployments
Deploymentの状態や、起動しているPod数などを確認できます。
Serviceの一覧を確認する
kubectl get services
KubernetesのServiceと、その接続情報を確認できます。
実際の業務でコマンドを実行するときは、対象のAWSアカウント、クラスター、Namespaceが正しいことを必ず確認しましょう。
IT業務ではEKSをどのように使う?
EKSは、開発担当者だけでなく、インフラ担当者、クラウド担当者、運用保守担当者も操作します。
IT業務初心者が担当する可能性がある作業を紹介します。
Podの状態を確認する
障害発生時やデプロイ後に、Podが正常に起動しているか確認します。
Podでは、次のような状態を目にすることがあります。
| 状態 | おおまかな意味 |
|---|---|
| Running | Podが実行中 |
| Pending | Podを起動する準備中 |
| Completed | 処理が正常に完了した |
| CrashLoopBackOff | コンテナが起動と異常終了を繰り返している |
| ImagePullBackOff | コンテナイメージを取得できていない |
状態名だけで原因を決めつけず、Podの詳細、イベント、ログを合わせて確認することが重要です。
アプリケーションのログを確認する
アプリケーションでエラーが発生した場合は、PodのログやCloudWatchなどへ転送されたログを確認します。
ログでは、次のような点を調査します。
- エラーが発生した時刻
- エラーメッセージ
- 接続に失敗したサービス
- 処理対象となったデータ
- 直前に行われた処理
デプロイ後の状態を確認する
新しいバージョンをデプロイした後は、次の点を確認します。
- 新しいPodが正常に起動しているか
- 必要な数のPodがそろっているか
- 古いPodが正常に終了しているか
- エラーログが発生していないか
- WebサイトやAPIが正常に動作するか
- CPUやメモリ使用量に異常がないか
ノードの状態を確認する
EC2をノードとして使用している場合は、ノードが正常にクラスターへ参加しているか確認します。
ノードに問題があると、そのノード上のPodが正常に動作できなくなる可能性があります。
主に次の項目を確認します。
- ノードがReadyになっているか
- CPUやメモリが不足していないか
- ディスク容量が不足していないか
- ノードへ配置されているPod数
- ネットワークに異常がないか
Pod数を変更する
アクセス数の増加などに対応するため、Deploymentで起動するPod数を増やすことがあります。
反対に、アクセスが少ない時間帯には、Pod数を減らしてリソースの使用量を抑えることもあります。
手動で変更するだけでなく、負荷に応じてPod数を自動的に変更する仕組みも利用できます。
Kubernetesのバージョンを管理する
Kubernetesには複数のバージョンがあり、サポート期間も設定されています。
古いバージョンを使い続けると、新しい機能を利用できなかったり、追加費用やセキュリティ上のリスクにつながったりする可能性があります。
アップグレードするときは、次の点を確認します。
- EKSコントロールプレーンのバージョン
- ノードのバージョン
- 各種アドオンのバージョン
- 使用しているAPIの互換性
- アプリケーションへの影響
EKSでよくあるトラブル
PodがPendingのまま起動しない
PodがPendingのままの場合は、実行先のノードが決まっていない可能性があります。
主な原因として、次のようなものがあります。
- ノードのCPUが不足している
- ノードのメモリが不足している
- 条件に合うノードが存在しない
- ボリュームを割り当てられない
- Fargateプロファイルの条件に一致していない
Podの詳細とイベントを確認し、スケジュールできない理由を調査します。
CrashLoopBackOffが表示される
CrashLoopBackOffは、コンテナが起動した後に異常終了し、再起動を繰り返しているときに表示される状態です。
主な原因には、次のようなものがあります。
- アプリケーションの起動エラー
- 環境変数の設定ミス
- 接続先データベースへ接続できない
- 必要な設定ファイルが存在しない
- ヘルスチェックに失敗している
- メモリ不足で終了している
Podのログ、直前に終了したコンテナのログ、イベントなどを確認します。
ImagePullBackOffが表示される
ImagePullBackOffは、コンテナイメージの取得に失敗している場合に表示されます。
主な原因には、次のようなものがあります。
- イメージ名が間違っている
- タグ名が間違っている
- 指定したイメージが存在しない
- ECRへアクセスする権限が不足している
- ネットワーク経由でECRへ接続できない
Serviceへ接続できない
Serviceを作成したものの通信できない場合は、次の項目を確認します。
- Serviceの接続先となるPodが起動しているか
- Serviceのセレクターが正しいか
- ポート番号が正しいか
- Podが正しいポートで待ち受けているか
- ネットワークポリシーで通信が拒否されていないか
外部からアクセスできない
外部からEKS上のアプリケーションへアクセスできない場合は、KubernetesだけでなくAWS側の設定も確認します。
- IngressやServiceの設定
- ロードバランサーの状態
- ターゲットのヘルスチェック
- セキュリティグループ
- サブネット
- ルートテーブル
- DNS設定
kubectlでクラスターへ接続できない
kubectlからEKSクラスターへ接続できない場合は、次のような原因が考えられます。
- 操作対象のクラスター設定が登録されていない
- 異なるAWSアカウントを使用している
- 使用しているリージョンが違う
- IAM権限が不足している
- クラスターへのアクセス設定が不足している
- ネットワーク経由でAPIエンドポイントへ接続できない
操作対象を間違えると、本番環境へ意図しない変更を加える可能性があります。
コマンドを実行する前に、使用中のAWSアカウント、リージョン、クラスター、Namespaceを確認しましょう。
実務でよくあるEKSに関する会話
EKSを使用する現場では、次のような会話が行われます。
先輩:本番環境でPodが1個落ちているので確認してください。
新人:Podの状態、イベント、ログを確認します。
先輩:新しいコンテナイメージをEKSへデプロイしました。
新人:Deploymentの状態と、新しいPodが正常に起動していることを確認します。
先輩:PodがPendingのままなので、ノードの状態を確認してください。
新人:ノードのCPUとメモリ、Podのイベントを確認します。
先輩:外部からアプリケーションへ接続できません。
新人:Ingress、Service、ロードバランサー、セキュリティグループを順番に確認します。
初心者がEKSで注意したいポイント
本番環境でいきなりコマンドを実行しない
kubectlのコマンドには、リソースを削除したり設定を変更したりするものがあります。
対象を間違えると、本番システムへ影響を与える可能性があります。
コマンドを実行する前に、次の項目を確認しましょう。
- 接続しているAWSアカウント
- 操作対象のEKSクラスター
- 操作対象のNamespace
- 操作対象のリソース名
- コマンドが変更系か参照系か
Podを削除すれば必ず直るとは限らない
Deploymentで管理されているPodを削除すると、新しいPodが作成されます。
一時的な問題であれば改善する場合がありますが、設定ミスやアプリケーションの不具合が原因の場合は、新しいPodでも同じ問題が発生します。
Podを削除する前に、ログやイベントを確認することが重要です。
状態名だけで原因を判断しない
CrashLoopBackOffやPendingなどの状態は、問題の種類を知るための手掛かりです。
しかし、同じ状態でも原因は複数考えられます。
Podの詳細、イベント、ログ、ノード、ネットワークなどを組み合わせて調査しましょう。
AWSとKubernetesの両方を確認する
EKSは、KubernetesとAWSを組み合わせたサービスです。
問題の原因がKubernetesの設定にある場合もあれば、IAM、VPC、セキュリティグループ、ロードバランサーなどのAWS側にある場合もあります。
どちらか片方だけを見るのではなく、通信や処理の流れに沿って確認する必要があります。
EKSを学ぶおすすめの順番
IT業務初心者は、次の順番で学ぶと理解しやすくなります。
- Linuxの基本操作を学ぶ
- ネットワークの基礎を学ぶ
- コンテナの意味を理解する
- Dockerの基本を学ぶ
- KubernetesのPod、Deployment、Serviceを理解する
- kubectlの基本コマンドを学ぶ
- AWSのIAM、VPC、EC2、ECRを理解する
- EKSクラスターの構成を理解する
- ログやイベントを使った障害調査を練習する
- 検証環境で簡単なアプリケーションを動かす
EKSは覚える用語が多いため、最初からすべてを暗記しようとする必要はありません。
まずは、Podがどこで動き、どのように外部と通信するのかを図や実際の環境で確認すると理解しやすくなります。
EKSについて初心者が最初に覚えたい関係
EKSの基本的な関係を整理すると、次のようになります。
- コンテナイメージは、コンテナを起動するためのひな型
- ECRは、コンテナイメージを保存する場所
- Podは、Kubernetesでコンテナを動かす最小単位
- Deploymentは、Podの数や更新を管理する仕組み
- Serviceは、複数のPodへ安定して通信する仕組み
- ノードは、Podが実際に動く実行環境
- クラスターは、EKSの環境全体を表す単位
- EKSは、KubernetesをAWS上で利用するためのサービス
まとめ
EKSは、AWSが提供しているKubernetesのマネージドサービスです。
Kubernetesを使って、複数のコンテナをAWS上で実行・管理するときに利用します。
IT業務初心者は、まず次のポイントを覚えておきましょう。
- Kubernetesは、複数のコンテナを管理する仕組み
- EKSは、KubernetesをAWS上で利用するためのサービス
- クラスターは、Kubernetesの環境全体
- ノードは、Podを動かす実行環境
- Podは、コンテナを実行する最小単位
- Deploymentは、Podの数や更新を管理する
- Serviceは、Podへ安定して通信するために使用する
- kubectlは、Kubernetesクラスターを操作するコマンドラインツール
実務では、Podの状態確認、ログ調査、デプロイ後の確認、ノードの監視、ネットワークや権限の調査などを行います。
EKSはECSと比べて覚える要素が多く、最初は難しく感じやすいサービスです。
まずは「EKSは、Kubernetesを使ってAWS上のコンテナを管理するためのサービス」と理解し、Pod、Deployment、Service、ノードの順番で学んでいきましょう。

コメント