AWS EKS Kubernetesクラスター管理

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

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

EKSの基本概念

EKSアーキテクチャ

EKSクラスターは主に2つの部分で構成されています。

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

  • Kubernetes API Server
  • etcd データストア
  • スケジューラー
  • コントローラーマネージャー

AWSがこれらのコンポーネントを完全に管理するため、パッチ適用や高可用性の設定を自動化できます。

ワーカーノード

  • EC2インスタンス(セルフマネージド)
  • EKS Managed Node Groups(推奨)
  • AWS Fargate(サーバーレス)

ワーカーノードではアプリケーションのPodが実際に動作します。

EKSクラスターの作成

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

  1. IAMロールの準備

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

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

    • AWS Console の EKS サービスから「クラスターの作成」
    • クラスター名、Kubernetesバージョンを指定
    • 先ほど作成したIAMロールとVPCを選択
  4. ワーカーノードの追加

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

AWS CLI を使用した作成

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

bash
# EKSクラスター作成
aws eks create-cluster \
  --name my-cluster \
  --version 1.28 \
  --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 stable https://charts.helm.sh/stable
helm repo update

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

EKSのセキュリティ機能

IAMとRBACの統合

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

主なセキュリティ機能

  • IAMロールによるアクセス制御
  • Pod Security Standardsによるコンテナセキュリティ
  • ネットワークポリシーによるトラフィック制御
  • 暠号化機能での機密データ保護

基本的なRBAC設定

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

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

EKSのネットワーキング

VPC CNI Plugin

EKS は AWS VPC CNI Plugin を使用し、Pod に直接 VPC IP アドレスを割り当てます。これにより、Pod が AWS サービスと直接通信できます。

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がやってくれるので、開発チームはアプリケーション開発に集中できますね。