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 を使用した基本的な作成手順
IAMロールの準備
- EKSサービス用のIAMロールを作成
- AmazonEKSClusterPolicy を付与
VPCとサブネットの設定
- パブリック・プライベートサブネットを設定
- 複数アベイラビリティゾーンに配置
EKSクラスターの作成
- AWS Console の EKS サービスから「クラスターの作成」
- クラスター名、Kubernetesバージョンを指定
- 先ほど作成したIAMロールとVPCを選択
ワーカーノードの追加
- 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がやってくれるので、開発チームはアプリケーション開発に集中できますね。