본문으로 건너뛰기

7.1. Propagation Policies (전파 정책)

개요

Propagation Policies 페이지는 MCM 컨트롤 플레인에서 관리하는 모든 전파 정책을 통합적으로 관리하는 페이지입니다. 전파 정책(PropagationPolicy)은 Kubernetes 리소스를 여러 멤버 클러스터에 배포하는 규칙을 정의하는 Karmada의 핵심 리소스입니다.

주요 목적:

  • 멀티클러스터 리소스 배포 전략 정의
  • 대상 클러스터 선택 및 배포 규칙 설정
  • 리소스 전파 상태 모니터링
  • 바인딩 및 스케줄링 상태 확인

전파 정책 사용 사례:

  • 애플리케이션을 특정 클러스터에 배포
  • 동일한 워크로드를 여러 클러스터에 복제
  • 클러스터 레이블 기반 동적 배포
  • 네임스페이스별 리소스 배포 규칙 정의

정책 범위

전파 정책은 두 가지 범위로 구분됩니다:

범위리소스설명
네임스페이스 범위PropagationPolicy특정 네임스페이스 내 리소스에 적용
클러스터 범위ClusterPropagationPolicy클러스터 전체 또는 네임스페이스 리소스에 적용

화면 구성

Propagation Policies 페이지는 테이블 형태로 전파 정책 목록을 표시합니다.

전파 정책 메인 화면

페이지 상단 요소

요소설명
범위 선택네임스페이스 범위 / 클러스터 범위 정책 선택
네임스페이스 필터특정 네임스페이스의 정책만 표시 (네임스페이스 범위)
클러스터 필터특정 클러스터의 정책만 표시 (클러스터 범위)
새로고침 버튼정책 목록 갱신
생성 버튼새 전파 정책 생성
검색창정책 이름으로 검색

테이블 컬럼 (네임스페이스 범위)

컬럼설명정렬
이름정책 이름 (PP 배지 표시)
네임스페이스정책이 속한 네임스페이스
대상 클러스터리소스가 배포될 클러스터 목록
전파 상태전파 진행 상태
리소스 셀렉터대상 리소스 (종류/이름)
경과시간정책 생성 후 경과 시간
작업전파 정책 편집/편집/삭제 버튼-

테이블 컬럼 (클러스터 범위)

컬럼설명정렬
이름정책 이름 (CPP 배지 표시)
대상 클러스터리소스가 배포될 클러스터 목록
전파 상태전파 진행 상태
리소스 셀렉터대상 리소스 (종류/이름)
경과시간정책 생성 후 경과 시간
작업편집/삭제 버튼-
클러스터 범위 정책

전파 상태 표시

상태설명표시
전파중리소스가 대상 클러스터에 전파 중파란색
완료모든 클러스터에 전파 완료녹색
실패전파 실패빨간색
일시중지전파가 일시 중지됨회색

전파 정책 상세 정보

정책 행을 클릭하면 상세 정보 패널이 열립니다.

전파 정책 상세 정보

상세 패널 헤더

요소설명
정책 이름선택한 정책 이름
네임스페이스정책이 속한 네임스페이스
정책 타입PropagationPolicy / ClusterPropagationPolicy
전파 상태현재 전파 상태

액션 버튼

버튼기능
전파 중단리소스 전파 일시 중지
새로고침정책 정보 갱신
전파 정책 편집전파 정책 마법사 편집
편집YAML 편집 모드
삭제정책 삭제

탭 메뉴

개요 탭

정책의 기본 정보, 대상 클러스터, 바인딩 요약, 리소스 셀렉터를 표시합니다.

기본 정보:

항목설명
이름정책 이름
네임스페이스정책이 속한 네임스페이스
범위네임스페이스 범위 정책 / 클러스터 범위 정책
전파 상태현재 전파 상태
우선순위정책 우선순위 (숫자가 높을수록 우선)
충돌 해결충돌 시 처리 방법 (Abort/Overwrite)
선점선점 허용 여부 (Never/Always)
경과시간생성 후 경과 시간
생성일정책 생성 일시
마지막 스케줄 시간마지막 스케줄링 시간

대상 클러스터:

리소스가 배포될 대상 클러스터 목록을 표시합니다.

바인딩 요약:

항목설명
전체 바인딩생성된 ResourceBinding 수
스케줄됨스케줄 완료된 바인딩 수
완전 적용됨모든 클러스터에 적용 완료된 바인딩 수
비정상 / 정상비정상 및 정상 바인딩 수

리소스 셀렉터:

정책이 적용되는 리소스 목록을 테이블로 표시합니다:

컬럼설명
API 버전리소스 API 버전 (예: apps/v1)
종류리소스 종류 (예: Deployment)
이름리소스 이름
네임스페이스리소스 네임스페이스

바인딩 상태 탭

리소스 바인딩의 상세 상태를 표시합니다.

바인딩 상태 탭

바인딩 요약:

전체 바인딩 현황을 요약 표시합니다.

리소스 바인딩:

각 리소스 바인딩별로 다음 정보를 표시합니다:

항목설명
바인딩 이름ResourceBinding 이름
상태 배지비정상/스케줄됨/완전 적용됨 상태 표시
대상 리소스바인딩된 리소스 종류 및 이름
클러스터 상태각 클러스터별 적용 상태 테이블
마지막 스케줄 시간마지막 스케줄링 시간

클러스터 상태 테이블:

컬럼설명
클러스터대상 클러스터 이름
적용됨리소스 적용 여부 (Yes/No)
상태클러스터 상태 (Healthy/Unhealthy)
메시지상세 메시지

전파 상태 탭

전파 조건(Conditions)의 상세 정보를 표시합니다.

전파 상태 탭

정렬 옵션:

  • 최신순: 마지막 전환 시간 기준 최신순
  • 오래된순: 마지막 전환 시간 기준 오래된순
  • 상태순 (성공 우선): 성공 상태 우선 정렬
  • 타입순: 조건 타입 알파벳순

조건 카드:

각 조건별로 다음 정보를 표시합니다:

항목설명
조건 타입Scheduled, FullyApplied 등
바인딩 이름관련 ResourceBinding 이름
상태True/False/Unknown
사유상태 사유 (예: Success)
메시지상세 메시지
마지막 전환 시간상태 전환 시간

주요 조건 타입:

조건설명
Scheduled바인딩이 스케줄됨
FullyApplied모든 클러스터에 적용 완료

레이블 탭

정책에 적용된 Kubernetes 레이블 목록을 표시합니다.

어노테이션 탭

정책에 적용된 어노테이션 목록을 표시합니다.

파드 탭

정책으로 배포된 파드 목록을 표시합니다.

이벤트 탭

정책 관련 Kubernetes 이벤트를 표시합니다.

전파 정책 생성

새로운 전파 정책을 생성합니다. "생성" 버튼을 클릭하면 전파 정책 생성 Dialog가 표시됩니다.

Dialog 창을 통한 전파 정책 생성

전파 정책 생성 Dialog

전파 정책 생성 Dialog는 직관적인 UI를 통해 전파 정책을 쉽게 생성할 수 있도록 지원합니다.

Dialog 구성 요소

요소필수설명
정책 이름정책 이름 (소문자, 숫자, '-'만 사용 가능)
네임스페이스정책이 속할 네임스페이스 선택
대상 클러스터-리소스를 배포할 클러스터 선택 (비워두면 모든 클러스터에 전파)
리소스 선택전파할 리소스 선택

리소스 선택 패널

네임스페이스를 선택하면 해당 네임스페이스에서 사용 가능한 리소스 목록이 카테고리별로 표시됩니다.

리소스 선택 패널

카테고리 분류:

  • 워크로드: Deployment, StatefulSet, DaemonSet, Job, CronJob
  • 네트워킹: Service, Ingress
  • 설정: ConfigMap, Secret
  • 스토리지: PersistentVolumeClaim

리소스 선택 상태:

  • ✅ 선택 가능한 리소스: 체크박스로 선택 가능
  • 🔒 이미 사용 중인 리소스: 다른 정책에서 사용 중인 리소스는 비활성화되며, 사용 중인 정책 이름이 표시됨

전파 정책 생성 완료

모든 필수 항목을 입력하면 "생성" 버튼이 활성화됩니다.

전파 정책 생성 완료

Dialog 하단 패널:

  • 선택된 리소스: 현재 선택된 리소스 목록이 표시되며, X 버튼으로 개별 삭제 가능
  • 취소: Dialog를 닫고 생성을 취소
  • 생성: 전파 정책 생성 실행 (모든 필수 항목 입력 시 활성화)

💡 : 키보드 단축키 Ctrl+S (macOS: Cmd+S)로 빠르게 저장할 수 있습니다.

입력 항목 요약

항목필수설명
이름정책 이름
네임스페이스정책 네임스페이스 (네임스페이스 범위)
리소스 셀렉터대상 리소스 선택
클러스터 선택-배포 대상 클러스터 (비워두면 전체)
우선순위-정책 우선순위
충돌 해결-충돌 처리 방법

PropagationPolicy 예시

기본 전파 정책:

apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: my-propagation-policy
namespace: default
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: my-deployment
placement:
clusterAffinity:
clusterNames:
- cluster1
- cluster2

레이블 기반 클러스터 선택:

apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: label-based-policy
namespace: default
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: my-deployment
placement:
clusterAffinity:
labelSelector:
matchLabels:
environment: production

복제본 분산 배포:

apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: replica-scheduling-policy
namespace: default
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: my-deployment
placement:
clusterAffinity:
clusterNames:
- cluster1
- cluster2
replicaScheduling:
replicaDivisionPreference: Weighted
replicaSchedulingType: Divided
weightPreference:
staticWeightList:
- targetCluster:
clusterNames:
- cluster1
weight: 2
- targetCluster:
clusterNames:
- cluster2
weight: 1

ClusterPropagationPolicy 예시

클러스터 범위 전파 정책:

apiVersion: policy.karmada.io/v1alpha1
kind: ClusterPropagationPolicy
metadata:
name: my-cluster-propagation-policy
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: cluster-wide-deployment
placement:
clusterAffinity:
clusterNames:
- cluster1
- cluster2
- cluster3

전파 정책 작업

전파 정책 편집

  1. 정책 선택
  2. 상세 패널에서 "전파 정책 편집" 또는 "편집" 버튼 클릭
  3. 마법사 또는 YAML 에디터에서 정책 수정
  4. "저장" 버튼 클릭

전파 중단/재개

  1. 정책 선택
  2. 상세 패널에서 "전파 중단" 버튼 클릭
  3. 확인 다이얼로그에서 확인
  4. 재개하려면 다시 "전파 재개" 버튼 클릭

전파 정책 삭제

⚠️ 주의: 전파 정책을 삭제하면 멤버 클러스터의 리소스는 그대로 유지됩니다. 리소스도 함께 삭제하려면 먼저 리소스를 삭제한 후 정책을 삭제하세요.

  1. 삭제할 정책 선택
  2. 상세 패널에서 "삭제" 버튼 클릭
  3. 확인 다이얼로그에서 정책 이름 입력
  4. "삭제" 버튼 클릭

사용 예시

시나리오 1: Deployment를 특정 클러스터에 배포

  1. "생성" 버튼 클릭
  2. 정책 정보 입력:
    • 이름: my-app-propagation
    • 네임스페이스: production
    • 리소스 선택: Deployment/my-app
    • 대상 클러스터: cluster1, cluster2 선택
  3. "생성" 버튼 클릭
  4. 바인딩 상태 탭에서 전파 상태 확인

시나리오 2: 바인딩 상태 확인

  1. 확인할 전파 정책 클릭
  2. 바인딩 상태 탭 선택
  3. 각 리소스 바인딩의 상태 확인:
    • 스케줄됨 여부
    • 클러스터별 적용 상태
    • 비정상 클러스터 확인
  4. 문제가 있으면 클러스터 상태 테이블에서 상세 정보 확인

시나리오 3: 전파 실패 문제 해결

  1. 전파 상태가 "실패"인 정책 클릭
  2. 전파 상태 탭 선택
  3. 조건 카드에서 실패 원인 확인:
    • 사유 필드의 오류 메시지
    • 마지막 전환 시간
  4. 이벤트 탭에서 상세 오류 확인
  5. 문제 해결 후 새로고침하여 상태 확인

시나리오 4: 클러스터 범위 정책 생성

  1. "클러스터 범위 정책" 탭 선택
  2. "생성" 버튼 클릭
  3. ClusterPropagationPolicy 정의:
    • 이름: global-config-policy
    • 리소스: ConfigMap/global-config
    • 대상 클러스터: 모든 클러스터
  4. "생성" 버튼 클릭

시나리오 5: 레이블 기반 동적 클러스터 선택

  1. 새 전파 정책 생성
  2. 클러스터 선택에서 "레이블 셀렉터" 사용
  3. 레이블 조건 입력:
    • 예: environment=production
  4. 해당 레이블을 가진 클러스터에 자동 배포

관련 개념

PropagationPolicy vs ClusterPropagationPolicy

특성PropagationPolicyClusterPropagationPolicy
범위네임스페이스클러스터 전체
적용 대상네임스페이스 리소스클러스터 및 네임스페이스 리소스
우선순위낮음높음
배지PPCPP

리소스 셀렉터

정책이 적용될 리소스를 선택합니다:

resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: my-deployment
namespace: default
- apiVersion: v1
kind: Service
labelSelector:
matchLabels:
app: my-app
필드설명
apiVersion리소스 API 버전
kind리소스 종류
name리소스 이름 (선택적)
namespace리소스 네임스페이스 (선택적)
labelSelector레이블 기반 선택 (선택적)

클러스터 선택 방법

1. 클러스터 이름 직접 지정:

placement:
clusterAffinity:
clusterNames:
- cluster1
- cluster2

2. 레이블 셀렉터 사용:

placement:
clusterAffinity:
labelSelector:
matchLabels:
region: asia
environment: production

3. 필드 셀렉터 사용:

placement:
clusterAffinity:
fieldSelector:
matchExpressions:
- key: provider
operator: In
values:
- AWS
- GCP

복제본 스케줄링

워크로드 복제본을 클러스터 간에 분산하는 방법:

타입설명
Duplicated각 클러스터에 전체 복제본 배포
Divided클러스터 간 복제본 분할 배포

가중치 기반 분할:

replicaScheduling:
replicaDivisionPreference: Weighted
replicaSchedulingType: Divided
weightPreference:
staticWeightList:
- targetCluster:
clusterNames:
- cluster1
weight: 2
- targetCluster:
clusterNames:
- cluster2
weight: 1

충돌 해결

동일한 리소스에 여러 정책이 적용될 때의 처리 방법:

옵션설명
Abort충돌 시 전파 중단 (기본값)
Overwrite기존 정책 덮어쓰기

우선순위

정책 우선순위 (숫자가 높을수록 우선):

  • 기본값: 0
  • 범위: 정수 값

ResourceBinding

전파 정책이 적용되면 MCM이 자동으로 ResourceBinding을 생성합니다:

필드설명
이름{리소스이름}-{리소스종류} 형식
상태Scheduled, FullyApplied 등
클러스터대상 클러스터 및 적용 상태

문제 해결

전파가 시작되지 않는 경우:

  • 리소스 셀렉터가 올바른지 확인
  • 대상 리소스가 존재하는지 확인
  • 네임스페이스가 올바른지 확인

특정 클러스터에 전파되지 않는 경우:

  • 클러스터 상태가 Ready인지 확인
  • 클러스터 연결 상태 확인
  • 바인딩 상태 탭에서 클러스터별 오류 메시지 확인

전파 상태가 "비정상"인 경우:

  • 전파 상태 탭에서 조건 확인
  • 이벤트 탭에서 오류 메시지 확인
  • 대상 클러스터의 리소스 상태 직접 확인

다음 단계