💡

Kubernetesを複数クラスタで運用する設定ガイド

に公開

Kubernetesを複数クラスタ(Multi-Cluster)で運用する場合、可用性向上やリージョン分散、負荷分散のメリットがあります。本記事では、複数クラスタを管理するための方法と具体的な設定を詳細に解説します。


1. 複数クラスタを使うメリットと用途

🔹 メリット

  • 耐障害性の向上:クラスタ間でフェイルオーバーが可能
  • リージョン分散:異なるリージョンにデプロイし、遅延を最適化
  • ワークロード分散:異なるクラスタに異なるアプリケーションをデプロイ可能

🔹 主な用途

  • マルチリージョンのシステム(AWS Tokyo + AWS US-Eastなど)
  • 開発・本番環境の分離dev-clusterprod-cluster
  • 異なるチームや部門ごとの管理

2. 複数クラスタを管理するツール

ツール 目的
kubectl 複数クラスタを手動管理
kubeconfig クラスタのコンテキストを切り替え
KubeFed(Federation v2) マルチクラスタの統合管理
Istio / Linkerd マルチクラスタのサービスメッシュ
Cluster API Kubernetesクラスタのプロビジョニング管理

3. 複数クラスタの設定手順

① クラスタの作成(例: dev-clusterprod-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