karmada 란

  1. CNCF 프로젝트
  2. kubefed 단점 보완
  3. 클러스터간 리소스 공유&배포
  4. 워크로드 분산 가능
  5. 정책기반 배포 및 관리가 가능
  6. 클러스터간 고가용성 지원

아키텍쳐

  • 기본적인 통신 플로우는 k8s 통신과 동일하게
    api서버를 기반으로 통신
  • karmada의 컨트롤플레인이 각 클러스터의 API 서버와 통신하는 구조

 

리소스 배포 흐름

  1. PropagationPolicy 추가시 PolicyController가 Resource Binding 생성
  2. Resource Binding 시 Binding Controller가 Manifest 를 토대로 목적 클러스터에 Execution 생성
  3. Execution 생성시 Execution Controller가 목적 클러스터에 리소스를 배포

 

propagation policy란 
PropagationPolicy란 워크로드를 어떤 클러스터에 어떻게 분산할지 정의하는 규칙으로 멀티클러스터환경을 위해 진행되는 karmada의 핵심 개념

  • ClusterAffinity: ClusterName, Label, Field에 기반 스케쥴링
  • SpreadConstraint: 여러 클러스터에 고르게 분산
  • ReplicasScheduling: 워크로드복제본(동일 pod)을 여러 클러스터에 어떻게(Duplicated, Wdighted, Custom) 스케쥴링할지 결정
  • Toleration: 기존 k8s 스케쥴링기법을 그대로 사용

 

karmada 설치 방법

git clone https://github.com/karmada-io/karmada.git; karmada/hack/local-up-karmada.sh

karmada join CLUSTER_NAME --cluster-kubeconfig=/path/to/your/cluster-kubeconfig.yaml

 

 

karmada 를통해 리소스 배포 방법

placement:

    clusterAffinity:

      clusterNames:

        - member1

        - member2

를 통해서 배포할 클러스터를 정해준다 - clusterAffinity 방식 weighted 를 기준으로 분산하는데 target cluster 모두 가중치는 1로 줬기에 균등분산하여 nginx 애플리케이션을 member1,2 각각의 클러스터에 분산 배치하여 고가용성 및 부하분산 향상

+ Recent posts