💡
Kubernetesを複数クラスタで運用する設定ガイド
Kubernetesを複数クラスタ(Multi-Cluster)で運用する場合、可用性向上やリージョン分散、負荷分散のメリットがあります。本記事では、複数クラスタを管理するための方法と具体的な設定を詳細に解説します。
1. 複数クラスタを使うメリットと用途
🔹 メリット
- 耐障害性の向上:クラスタ間でフェイルオーバーが可能
- リージョン分散:異なるリージョンにデプロイし、遅延を最適化
- ワークロード分散:異なるクラスタに異なるアプリケーションをデプロイ可能
🔹 主な用途
- マルチリージョンのシステム(AWS Tokyo + AWS US-Eastなど)
-
開発・本番環境の分離(
dev-cluster
とprod-cluster
) - 異なるチームや部門ごとの管理
2. 複数クラスタを管理するツール
ツール | 目的 |
---|---|
kubectl | 複数クラスタを手動管理 |
kubeconfig | クラスタのコンテキストを切り替え |
KubeFed(Federation v2) | マルチクラスタの統合管理 |
Istio / Linkerd | マルチクラスタのサービスメッシュ |
Cluster API | Kubernetesクラスタのプロビジョニング管理 |
3. 複数クラスタの設定手順
dev-cluster
と prod-cluster
)
① クラスタの作成(例: クラウド(AWS/GCP)を使う場合:
kind create cluster --name dev-cluster
kind create cluster --name prod-cluster
AWS EKSで作成:
aws eks create-cluster --name dev-cluster --region ap-northeast-1
aws eks create-cluster --name prod-cluster --region us-east-1
② クラスタのコンテキスト設定(kubectlを使う)
kubectl config get-contexts # 現在のコンテキスト一覧
kubectl config use-context dev-cluster # 開発クラスタに切り替え
kubectl config use-context prod-cluster # 本番クラスタに切り替え
コンテキストを確認:
kubectl config current-context
③ 複数クラスタにアプリケーションをデプロイ
開発クラスタにデプロイ:
kubectl --context=dev-cluster apply -f deployment.yaml
本番クラスタにデプロイ:
kubectl --context=prod-cluster apply -f deployment.yaml
④ マルチクラスタのネットワーク設定(Istioを使用)
異なるクラスタ間で通信可能にするために、Istioを設定:
istioctl install --set profile=demo --context=dev-cluster
istioctl install --set profile=demo --context=prod-cluster
各クラスタのサービスをIstioのGateway経由で接続:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: multi-cluster-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*.mydomain.com"
適用:
kubectl --context=dev-cluster apply -f gateway.yaml
kubectl --context=prod-cluster apply -f gateway.yaml
⑤ クラスタ間のリソース共有(KubeFedを使用)
Federation(KubeFed)を利用して、複数クラスタを統合管理:
kubectl --context=dev-cluster apply -f federated-namespace.yaml
kubectl --context=prod-cluster apply -f federated-namespace.yaml
Federated Deployment設定:
apiVersion: types.kubefed.io/v1beta1
kind: FederatedDeployment
metadata:
name: my-app
spec:
template:
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx:latest
ports:
- containerPort: 80
適用:
kubectl --context=dev-cluster apply -f federated-deployment.yaml
kubectl --context=prod-cluster apply -f federated-deployment.yaml
4. クラスタの監視とログ管理
Prometheus + Grafana を使う場合
Prometheusのインストール:
kubectl --context=dev-cluster apply -f prometheus.yaml
kubectl --context=prod-cluster apply -f prometheus.yaml
Grafanaのインストール:
kubectl --context=dev-cluster apply -f grafana.yaml
kubectl --context=prod-cluster apply -f grafana.yaml
各クラスタのメトリクスを統合して表示:
kubectl port-forward svc/grafana 3000:3000 --context=dev-cluster
5. まとめ
✅ 基本設定
- クラスタの作成(
kind
/eks
/gke
) -
kubectl config use-context
でクラスタ切り替え -
kubectl apply -f
で各クラスタにデプロイ
✅ 高度なマルチクラスタ運用
- Istio でクラスタ間の通信設定
- KubeFed でリソース管理を統合
- Prometheus + Grafana でマルチクラスタ監視
マルチクラスタを適切に運用することで、可用性やパフォーマンスを向上させることができます!
Discussion