AWS EKS Kubernetesクラスター管理

Amazon Elastic Kubernetes Service (EKS)は、AWSクラウドでKubernetesを実行するためのマネージドサービスです。Kubernetesのコントロールプレーンを自動管理することで、運用負荷を軽減し、アプリケーション開発に集中できる環境を提供します。

この記事では、EKSの基本概念とクラスター構築の流れ、基本的な運用方法について説明します。

EKSの基本概念

EKSアーキテクチャ

EKSクラスターは大きく分けて2つの部分で構成されています。以下の図で全体像を把握しましょう。

コントロールプレーン(AWSマネージド)

AWSが完全に管理する部分で、以下のコンポーネントが含まれます:

  • Kubernetes API Server: クラスター操作の中心となるAPI
  • etcd データストア: クラスター状態を保存する分散データベース
  • スケジューラー: Podをどのノードで実行するかを決定
  • コントローラーマネージャー: クラスターの状態を監視し、必要に応じて調整

AWSがこれらのコンポーネントを完全に管理するため、パッチ適用、高可用性の設定、バックアップが自動化されています。

ワーカーノード(お客様管理)

アプリケーションのPodが実際に動作する部分で、3つの選択肢があります:

1. EKS Managed Node Groups(推奨)

  • AWSが提供するマネージドなEC2インスタンス群
  • ノードの起動、終了、アップデートをAWSが自動化
  • Auto Scalingグループと連携した自動スケーリング

2. セルフマネージドノード

  • お客様が直接管理するEC2インスタンス
  • より細かい制御が可能だが、運用負荷が高い
  • 特殊な要件がある場合に選択

3. AWS Fargate(サーバーレス)

  • サーバーレスでコンテナを実行
  • インスタンス管理が不要
  • ただし、以下の制限があります:
    • DaemonSetは使用不可
    • 特権コンテナは使用不可
    • GPUワークロードは非対応
    • パブリックサブネットでは実行不可
    • EBSボリュームのマウント不可

EKSクラスターの作成

AWS Console を使用した基本的な作成手順

  1. IAMロールの準備

    • EKSサービス用のIAMロールを作成
    • AmazonEKSClusterPolicy を付与
  2. VPCとサブネットの設定

    • パブリック・プライベートサブネットを設定
    • 複数アベイラビリティゾーンに配置
  3. EKSクラスターの作成 Console の EKS サービスから「クラスターの作成」

    • クラスター名、Kubernetesバージョンを指定
      • 現在の推奨バージョン:1.31-1.33(標準サポート)
      • 1.28-1.30は拡張サポート(追加料金あり)
    • 先ほど作成したIAMロールとVPCを選択
  4. ワーカーノードの追加

    • Managed Node Groups を使用(推奨)
    • インスタンスタイプとスケーリング設定を指定

AWS CLI を使用した作成

AWS CLI でも EKS クラスターを作成できます。

bash
# EKSクラスター作成(最新の推奨バージョンを使用)
aws eks create-cluster \
  --name my-cluster \
  --version 1.31 \
  --role-arn arn:aws:iam::ACCOUNT:role/eks-service-role \
  --resources-vpc-config subnetIds=subnet-12345,subnet-67890

# 作成状況確認
aws eks describe-cluster --name my-cluster --query cluster.status

EKS での基本的なワークロード管理

kubectl の設定

EKS クラスターが作成されたら、kubectl コマンドでクラスターにアクセスできます。

bash
# kubeconfig の更新
aws eks update-kubeconfig --region us-west-2 --name my-cluster

# クラスター接続確認
kubectl get nodes

簡単なアプリケーションのデプロイ

サンプルアプリケーションをデプロイしてみます。

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      containers:
      - name: app
        image: nginx:1.20
        ports:
        - containerPort: 80

Helm を使用したパッケージ管理

Helm は Kubernetes のパッケージマネージャーで、複雑なアプリケーションの管理を簡素化します。

bash
# Helmのインストール確認
helm version

# Helmチャートリポジトリの追加(推奨リポジトリを使用)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# サンプルアプリケーションのデプロイ
helm install my-wordpress bitnami/wordpress

EKSのセキュリティ機能

IAMとRBACの統合

EKSでは AWS IAM と Kubernetes RBAC を一緒に使ってセキュリティを実現します。

主なセキュリティ機能

  • IAMロールによるアクセス制御: AWSリソースへの細やかな権限管理
  • Pod Security Standards: コンテナの実行制約を定義(非rootユーザー実行、特権モードの制限など)
  • ネットワークポリシー: Pod間通信の制御とマイクロセグメンテーション
  • 暗号化機能: etcdでのデータ暗号化、EBSボリューム暗号化、通信の暗号化
  • セキュリティグループ: Pod単位でのネットワークアクセス制御
  • イメージスキャン: ECRとの統合による脆弱性検出

基本的なRBAC設定

サービスアカウントとロールの簡単な例:

yaml
# 基本的なサービスアカウント
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-app-sa
  namespace: default

EKSのネットワーキング

VPC CNI Plugin

EKSでは、AWS VPC CNIプラグインがネットワーキングを担当します。これはEKSがサポートする唯一のCNIプラグインで、以下の特徴があります:

主な仕組み

  • 各EC2ノードに複数のElastic Network Interface(ENI)を作成
  • Pod一つ一つにVPCの実際のIPアドレスを直接割り当て
  • PodがVPC内のリソースと直接通信可能

メリット

  • VPCセキュリティグループやNetwork ACLがPodレベルで適用可能
  • AWS Load BalancerやRDSなどとの直接通信
  • ネットワークパフォーマンスの向上

注意点

  • インスタンスタイプごとにENIとIPアドレス数の上限あり
  • IPアドレス不足を避けるため、適切なCIDR設計が重要

Load Balancer 統合

Service タイプ

  • LoadBalancer: AWS ELB/ALB/NLB と統合
  • ClusterIP: クラスター内部通信のみ
  • NodePort: ノードのポートで公開

AWS Load Balancer Controller

より簡単に ALB を作成できるコントローラーで、Ingress リソースで ALB を作成できます。


## EKSの監視とログ

### CloudWatch Container Insights

EKS クラスターのメトリクスとログを CloudWatch で監視できます。

取得可能なメトリクス
- クラスターレベル: CPU、メモリ使用率
- ノードレベル: リソース使用状況
- Podレベル: アプリケーションのパフォーマンス

### ログ管理

EKS では以下のログを収集できます:

- API サーバーログ
- 監査ログ
- 認証ログ
- コントローラーマネージャーログ
- スケジューラーログ

## EKSの主なメリット

### 運用が簡単になる
- コントロールプレーンの完全マネージド
- 自動パッチ適用とアップグレード
- 高可用性の自動保証

### AWSサービスとの統合
- IAM、VPC、ELBなどとシームレス統合
- CloudWatchでの統合モニタリング
- AWSセキュリティ機能の活用

### コスト最適化
- Managed Node Groups での効率的なスケーリング
- Fargate でのサーバーレス実行
- Spot Instance でのコスト削減

## まとめ

AWS EKS は Kubernetes クラスターの管理を簡素化し、企業レベルのコンテナプラットフォームを構築できます。コントロールプレーンの管理をAWSがやってくれるので、開発チームはアプリケーション開発に集中できますね。