아래같은 경우, 쿠버네티스 클러스터를 여러개로 가져가게 된다.
쿠버네티스 클러스터가 여러개일 때 리소스 관리 복잡도가 증가할 수 있는데, 다수의 쿠버네티스 클러스터와 그 안에 배포되는 application들을 관리하는 방법에 대한 SIG(Special Interst Group)이 있다.
다수의 쿠버네티스 클러스터를 효율적으로 관리하기 위한 API들의 컨셉들을 정의하고 있다. 모두 클러스터의 정보나, 클러스터에 배포할 내용들을 중앙화하여 관리하는 방식이다.
Work API (★)

여기서 Work API의 개념을 확장한 오픈소스가 몇개 있는데, 그 중 하나가 Karmada 이다.
다수의 쿠버네티스 클러스터에 대한 관리 시스템을 쿠버네티스 형태로 제공한다.

Push 모드: Control Plane에서 대상 Member를 직접 바라본다.Pull 모드: Member에 karmada-agent를 구동시키고, 이 agent가 Control Plane에서 정보를 받아온다.유사하게 멀티 클러스터의 리소스를 관리하는 용도로 ArgoCD를 사용할 수 있다. 아래처럼 ArgoCD를 멀티 클러스터 환경에 사용하는 예시를 쉽게 찾을 수 있다.

또한 Karmada에서 Push 모드만 사용할 경우, ArgoCD를 위 구조로 사용하는 것과 크게 차이점이 없다.
즉, 클러스터별 리소스를 배포하는 관점에서 두 오픈소스는 크게 차이가 없으나, 멀티 클러스터를 중앙화하여 관리하고 싶다면 Karmada의 기능을 ArgoCD와 연동해서 사용할 수 있겠다.

이 방식을 사용했을 때, ArgoCD에서 확인 가능한 정보는 아래와 같다.

apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: sample-policy
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: app-0
placement:
clusterAffinity:
clusterNames:
- target-1 # member
- target-2 # memberapiVersion: policy.karmada.io/v1alpha1
kind: ClusterOverridePolicy
metadata:
name: sample-override
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: app-0
overrideRules:
- targetCluster:
clusterNames:
- target-1
overriders:
plaintext:
- path: "/metadata/labels"
operator: add
value:
cluster: target-1
- targetCluster:
clusterNames:
- target-2
overriders:
plaintext:
- path: "/metadata/labels"
operator: add
value:
cluster: target-2지금까지 내용을 요약하면 아래와 같다.
그리고 Karmada에서는 클러스터간 failOver 등 기능도 지원하기에, ArgoCD로만 멀티 클러스터를 관리할 때보다 중앙화, 자동화 범위를 넓힐 수 있겠다.
(참고) Cluster API는 SIG-ClusterLifecycle에 속함.