본문으로 건너뛰기

1.2. 기본 개념

Karmada 소개

Karmada(Kubernetes Armada)는 CNCF 인큐베이션 프로젝트로, 멀티 클러스터 쿠버네티스 오케스트레이션을 위한 오픈소스 시스템입니다.

아키텍처 개요

MCM 구성

컨트롤 플레인 컴포넌트

karmada-apiserver

  • 컨트롤 플레인의 프론트엔드 역할
  • Karmada 및 Kubernetes API를 제공하는 REST 엔드포인트
  • kubectl과 같은 기존 도구와 호환

karmada-controller-manager

  • Karmada 객체를 모니터링하고 처리하는 컨트롤러 실행
  • 멤버 클러스터의 API 서버와 통신하여 리소스 생성
  • 주요 컨트롤러:
    • Cluster Controller: 클러스터 라이프사이클 관리
    • Policy Controller: PropagationPolicy 처리
    • Binding Controller: ResourceBinding → Work 변환
    • Execution Controller: Work를 멤버 클러스터에 배포

karmada-scheduler

  • 리소스를 적절한 멤버 클러스터에 할당
  • 클러스터 제약 조건 및 가용 리소스 평가
  • 최적의 클러스터 선택 및 바인딩

karmada-webhook

  • API 요청에 대한 검증 및 변환 웹훅
  • Mutating Webhook: 객체 수정 및 기본값 설정
  • Validating Webhook: 정책 위반 요청 거부

karmada-agent

  • Pull 모드 클러스터에 배포
  • 클러스터를 컨트롤 플레인에 등록
  • 매니페스트 동기화 및 상태 보고

리소스 배포 흐름

리소스 배포 흐름

핵심 리소스 유형

Resource Template (리소스 템플릿)

기존 Kubernetes 리소스 정의를 그대로 사용합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
spec:
containers:
- name: nginx
image: nginx:1.21

PropagationPolicy (배포 정책)

리소스를 어떤 클러스터에 배포할지 정의합니다.

apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: nginx-propagation
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
placement:
clusterAffinity:
clusterNames:
- cluster-a
- cluster-b

OverridePolicy (오버라이드 정책)

클러스터별로 리소스 설정을 변경합니다.

apiVersion: policy.karmada.io/v1alpha1
kind: OverridePolicy
metadata:
name: nginx-override
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
overrideRules:
- targetCluster:
clusterNames:
- cluster-b
overriders:
plaintext:
- path: "/spec/replicas"
operator: replace
value: 5

클러스터 등록 모드

Push 모드

  • 컨트롤 플레인이 멤버 클러스터에 직접 접근
  • 클러스터 인증 정보를 컨트롤 플레인에서 관리
  • 설정이 간단하지만 네트워크 접근성 필요

Pull 모드

  • 멤버 클러스터에 karmada-agent 배포
  • Agent가 컨트롤 플레인에 연결하여 작업 수신
  • 방화벽 뒤의 클러스터 등록에 적합

다음 단계

📖 참고: Karmada에 대한 자세한 내용은 Karmada 공식 문서를 참조하세요.