SIG-Multicluster 그리고 Karmada

zzery·2024년 3월 9일

일지(2022~2024)

목록 보기
24/25

아래같은 경우, 쿠버네티스 클러스터를 여러개로 가져가게 된다.

  • 서비스 지역 범위에 따라 (글로벌 서비스 등)
  • 특정 범위의 격리가 필요할 때 (운영 환경, 운영 주체, 성능, 비용 등)
  • 장애 상황 및 범위 대한 고려 (Disaster Recovery, Blast Radius 등)

쿠버네티스 클러스터가 여러개일 때 리소스 관리 복잡도가 증가할 수 있는데, 다수의 쿠버네티스 클러스터와 그 안에 배포되는 application들을 관리하는 방법에 대한 SIG(Special Interst Group)이 있다.


SIG-Multicluster

다수의 쿠버네티스 클러스터를 효율적으로 관리하기 위한 API들의 컨셉들을 정의하고 있다. 모두 클러스터의 정보나, 클러스터에 배포할 내용들을 중앙화하여 관리하는 방식이다.

  • About API

    • 관리할 클러스터의 그룹을 정의한다. (가장 최상위 개념)
  • Work API (★)

    • 멀티 클러스터에 배포할 리소스를 정의한다.
  • Multicluster Services API

    • Service 객체의 범위를 단일 클러스터에서 멀티 클러스터로 확장한다.

여기서 Work API의 개념을 확장한 오픈소스가 몇개 있는데, 그 중 하나가 Karmada 이다.


Karmada

다수의 쿠버네티스 클러스터에 대한 관리 시스템을 쿠버네티스 형태로 제공한다.

구조

Control Plane

  • Karmada 시스템 컴포넌트가 동작하는 쿠버네티스.
  • Karmada는 쿠버네티스와 동일한 구조의 시스템 컴포넌트를 갖는다.
  • Control Plane을 통해 관리할 클러스터의 정보와, 그 클러스터에 배포할 리소스를 정의한다. (Cluster & propagationPolicy)

Member Cluster

  • Control Plane에 의해 중앙화로 관리되는 쿠버네티스 집합.
  • Member Cluster의 관리 방식은 총 2가지가 있다. (참고)
    • Push 모드: Control Plane에서 대상 Member를 직접 바라본다.
    • Pull 모드: Member에 karmada-agent를 구동시키고, 이 agent가 Control Plane에서 정보를 받아온다.

ArgoCD와의 비교

유사하게 멀티 클러스터의 리소스를 관리하는 용도로 ArgoCD를 사용할 수 있다. 아래처럼 ArgoCD를 멀티 클러스터 환경에 사용하는 예시를 쉽게 찾을 수 있다.

또한 Karmada에서 Push 모드만 사용할 경우, ArgoCD를 위 구조로 사용하는 것과 크게 차이점이 없다.

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

클러스터별 리소스 배포 예시

1. ArgoCD를 통한 리소스 배포

  • ArgoCD를 통해 git에 정의한 manifest를 Target Cluster에 배포한다.
  • ArgoCD는 Target Cluster에 배포된 리소스를 바라본다.

2. ArgoCD와 Karmada를 통한 리소스 배포

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

  • ArgoCD를 통해 git에 정의한 manifest(Karmada CR 포함)을 Karmada Cluster에 배포한다.
  • PropagationPolicy에 배포할 Target Cluster를 정의한다.
    • 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 # member
  • ClusterOverridePolicy에 Target별로 변경할 리소스 spec을 정의한다.
    • apiVersion: 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를 통해 위 Policy에 정의한 내용대로 Target Cluster에 배포된다.
  • ArgoCD는 Karmada Cluster에 배포된 리소스를 바라본다.

요약하면...

지금까지 내용을 요약하면 아래와 같다.

  • 다수의 쿠버네티스 클러스터를 중앙화하여 관리하고 싶다면 Karmada를 사용할 수 있다.
  • 클러스터별 리소스 배포 관점에서 보면, ArgoCD와 Karmada Push 모드는 크게 차이가 없다.
  • Karmada와 ArgoCD는 함께 사용할 수 있다. (두 기술이 집중하는 목적이 다르다.)

그리고 Karmada에서는 클러스터간 failOver 등 기능도 지원하기에, ArgoCD로만 멀티 클러스터를 관리할 때보다 중앙화, 자동화 범위를 넓힐 수 있겠다.


(참고) Cluster API는 SIG-ClusterLifecycle에 속함.

profile
이 블로그의 모든 글은 수제로 짜여져 있습니다...

0개의 댓글