멀티클러스터 관리
여러 Kubernetes 클러스터를 통합 관리하는 방법
여러 Kubernetes 클러스터를 통합 관리하는 방법
목표: 다중 클러스터 환경에서 워크로드를 배포하고 관리할 수 있는 수준
🌐 멀티클러스터 개요
아키텍처
graph TB
subgraph "Control Plane"
HUB["🎯 Hub Cluster"] -->|"관리"| M1["🔷 Member 1"]
HUB -->|"관리"| M2["🔷 Member 2"]
HUB -->|"관리"| M3["🔷 Member 3"]
end
subgraph "네트워크"
M1 -->|"서비스 메시"| M2
M2 -->|"서비스 메시"| M3
end
사용 사례:
- 지역별 배포 (Region/Zone)
- 재해 복구 (DR)
- 환경 분리 (Dev/Staging/Prod)
- 클라우드 이중화 (Multi-Cloud)
🔧 Karmada
개요
Kubernetes Native 멀티클러스터 관리.
graph TB
subgraph "Karmada Control Plane"
API["🔷 Karmada API Server"]
ETCD["🗄️ etcd"]
CM["🎮 Controller Manager"]
SCHED["📅 Scheduler"]
end
subgraph "Member Clusters"
C1["☸️ Cluster 1"]
C2["☸️ Cluster 2"]
C3["☸️ Cluster 3"]
end
API -->|"PropagationPolicy"| C1
API -->|"PropagationPolicy"| C2
API -->|"PropagationPolicy"| C3
설치
# Karmada CLI 설치
curl -s https://raw.githubusercontent.com/karmada-io/karmada/master/hack/install-cli.sh | bash
# Karmada 설치
karmadactl init \
--kubeconfig /root/.kube/config \
--karmada-data /etc/karmada
# kubeconfig 설정
export KUBECONFIG="/etc/karmada/karmada-apiserver.config"
클러스터 등록
# 멤버 클러스터 등록
karmadactl join member1 \
--cluster-kubeconfig=/root/.kube/member1.config \
--cluster-name=member1
# 등록 확인
kubectl get clusters
PropagationPolicy
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: nginx-propagation
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx
- apiVersion: v1
kind: Service
name: nginx
placement:
clusterAffinity:
clusterNames:
- member1
- member2
replicaScheduling:
replicaDivisionPreference: Weighted
replicaSchedulingType: Divided
weightPreference:
staticWeightList:
- targetCluster:
clusterNames:
- member1
weight: 1
- targetCluster:
clusterNames:
- member2
weight: 1
OverridePolicy
apiVersion: policy.karmada.io/v1alpha1
kind: OverridePolicy
metadata:
name: nginx-override
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx
overrideRules:
- targetCluster:
clusterNames:
- member1
overriders:
plaintext:
- path: "/spec/replicas"
operator: replace
value: 3
- targetCluster:
clusterNames:
- member2
overriders:
plaintext:
- path: "/spec/replicas"
operator: replace
value: 5
🌐 서비스 메시 (멀티클러스터)
Istio 멀티클러스터
# 1. Istio 설치 (각 클러스터)
istioctl install --set profile=demo \
--set values.global.meshID=mesh1 \
--set values.global.multiCluster.clusterName=cluster1 \
--set values.global.network=network1
# 2. 서비스 등록
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: service-in-cluster2
spec:
hosts:
- service.cluster2.local
location: MESH_INTERNAL
ports:
- number: 8080
name: http
protocol: HTTP
resolution: DNS
endpoints:
- address: service.cluster2.local
network: network2
EOF
Linkerd 멀티클러스터
# 1. Linkerd 설치
linkerd install | kubectl apply -f -
# 2. 멀티클러스터 게이트웨이
linkerd multicluster install | kubectl apply -f -
# 3. 클러스터 연결
linkerd multicluster link --cluster-name cluster2 | kubectl apply -f -
# 4. 서비스 노출
kubectl label svc my-service mirror.linkerd.io/exported=true
📋 멀티클러스터 체크리스트
- Karmada 설치
- 멤버 클러스터 등록
- PropagationPolicy 작성
- OverridePolicy 작성
- 서비스 메시 연결
- DNS 설정
- 인증서 관리
- 모니터링 통합
🔗 관련 노트
- 03-10-서비스메시-Istio — 서비스 메시
- 03-09-GitOps-ArgoCD — 멀티클러스터 배포
- 01-01-K8s-아키텍처-이해 — 클러스터 아키텍처
마지막 업데이트: 2026-06-01