본문으로 건너뛰기

7.2. Override Policies (오버라이드 정책)

개요

Override Policies 페이지는 MCM 컨트롤 플레인에서 관리하는 모든 오버라이드 정책을 통합적으로 관리하는 페이지입니다. 오버라이드 정책(OverridePolicy)은 리소스가 멤버 클러스터에 전파될 때 클러스터별로 리소스 속성을 변경하는 MCM의 핵심 리소스입니다.

주요 목적:

  • 클러스터별 리소스 속성 커스터마이징
  • 컨테이너 이미지, 명령어, 인자 오버라이드
  • 레이블 및 어노테이션 추가/수정
  • JSON 패치를 통한 세밀한 리소스 수정

오버라이드 정책 사용 사례:

  • 클러스터별로 다른 컨테이너 이미지 레지스트리 사용
  • 환경별로 다른 환경 변수 설정
  • 클러스터별로 다른 리소스 요청/제한 설정
  • 클러스터별로 다른 레이블/어노테이션 적용

정책 범위

오버라이드 정책은 두 가지 범위로 구분됩니다:

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

화면 구성

Override Policies 페이지는 테이블 형태로 오버라이드 정책 목록을 표시합니다.

오버라이드 정책 메인 화면

페이지 상단 요소

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

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

컬럼설명정렬
이름정책 이름 (OP 배지 표시)
네임스페이스정책이 속한 네임스페이스
오버라이드 타입적용된 오버라이더 타입 (image, plaintext 등)
리소스 셀렉터대상 리소스 (종류/이름)
경과시간정책 생성 후 경과 시간
작업편집/편집/삭제 버튼-

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

컬럼설명정렬
이름정책 이름 (COP 배지 표시)
오버라이드 타입적용된 오버라이더 타입
리소스 셀렉터대상 리소스 (종류/이름)
경과시간정책 생성 후 경과 시간
작업편집/삭제 버튼-

오버라이드 정책 상세 정보

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

오버라이드 정책 상세 정보

상세 패널 헤더

요소설명
정책 이름선택한 정책 이름
네임스페이스정책이 속한 네임스페이스
정책 타입OverridePolicy / ClusterOverridePolicy

액션 버튼

버튼기능
새로고침정책 정보 갱신
오버라이드 정책 편집오버라이드 정책 마법사 편집
편집YAML 편집 모드
삭제정책 삭제

탭 메뉴

개요 탭

정책의 기본 정보, 리소스 셀렉터, 오버라이드 규칙을 표시합니다.

기본 정보:

항목설명
이름정책 이름
네임스페이스정책이 속한 네임스페이스
범위네임스페이스 범위 정책 / 클러스터 범위 정책
경과시간생성 후 경과 시간
생성일정책 생성 일시

리소스 셀렉터:

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

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

오버라이드 규칙:

적용된 오버라이드 규칙 목록을 표시합니다:

항목설명
대상 클러스터오버라이드가 적용될 클러스터
오버라이더 타입image, command, args, labels, annotations, plaintext, field
오버라이더 내용오버라이드 상세 설정

바인딩 상태 탭

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

전파 상태 탭

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

레이블 탭

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

어노테이션 탭

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

파드 탭

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

이벤트 탭

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

오버라이드 정책 생성

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

Dialog 창을 통한 오버라이드 정책 생성

오버라이드 정책 생성 Dialog

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

Dialog 구성 요소

요소필수설명
정책 이름정책 이름 (소문자, 숫자, '-'만 사용 가능)
네임스페이스정책이 속할 네임스페이스 선택
리소스 선택오버라이드를 적용할 리소스 선택
오버라이드 규칙오버라이드 규칙 정의

리소스 선택 패널

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

리소스 선택 패널

카테고리 분류:

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

리소스 선택 상태:

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

오버라이드 규칙 설정

오버라이드 규칙은 대상 클러스터와 오버라이더로 구성됩니다.

대상 클러스터:

  • 오버라이드가 적용될 클러스터를 선택합니다
  • 여러 클러스터를 동시에 선택할 수 있습니다

오버라이더 탭:

설명용도
이미지 오버라이더컨테이너 이미지 오버라이드클러스터별 레지스트리 변경
커맨드 오버라이더컨테이너 명령어 오버라이드클러스터별 시작 명령어 변경
인자 오버라이더컨테이너 인자 오버라이드클러스터별 인자 변경
레이블 오버라이더레이블 추가/수정클러스터별 레이블 설정
어노테이션 오버라이더어노테이션 추가/수정클러스터별 어노테이션 설정
플레인텍스트 오버라이더JSON 패치 적용모든 필드에 대한 세밀한 수정
필드 오버라이더필드 값 오버라이드특정 필드 값 변경

이미지 오버라이더 설정:

필드설명예시
컴포넌트오버라이드할 이미지 구성 요소Repository, Tag, Registry
연산자오버라이드 연산자replace, add, remove
오버라이드 값my-registry.io/library

오버라이드 정책 생성 완료

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

오버라이드 정책 생성 완료

Dialog 하단 패널:

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

💡 : 여러 오버라이더 타입을 동시에 설정할 수 있습니다. 각 탭에서 + 버튼을 클릭하여 오버라이더를 추가하세요.

입력 항목 요약

항목필수설명
이름정책 이름
네임스페이스정책 네임스페이스 (네임스페이스 범위)
리소스 셀렉터대상 리소스 선택
대상 클러스터-오버라이드가 적용될 클러스터
오버라이더하나 이상의 오버라이더 설정

OverridePolicy 예시

이미지 오버라이드:

apiVersion: policy.karmada.io/v1alpha1
kind: OverridePolicy
metadata:
name: image-override-policy
namespace: default
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: my-deployment
overrideRules:
- targetCluster:
clusterNames:
- cluster1
overriders:
imageOverrider:
- component: Repository
operator: replace
value: my-registry.io/library

레이블 추가:

apiVersion: policy.karmada.io/v1alpha1
kind: OverridePolicy
metadata:
name: label-override-policy
namespace: default
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: my-deployment
overrideRules:
- targetCluster:
clusterNames:
- cluster1
overriders:
labelsOverrider:
- operator: addIfAbsent
value:
environment: production
region: asia

플레인텍스트 오버라이드 (JSON 패치):

apiVersion: policy.karmada.io/v1alpha1
kind: OverridePolicy
metadata:
name: plaintext-override-policy
namespace: default
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: my-deployment
overrideRules:
- targetCluster:
clusterNames:
- cluster1
overriders:
plaintextOverrider:
- path: /spec/replicas
operator: replace
value: 5

커맨드 오버라이드:

apiVersion: policy.karmada.io/v1alpha1
kind: OverridePolicy
metadata:
name: command-override-policy
namespace: default
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
name: my-deployment
overrideRules:
- targetCluster:
clusterNames:
- cluster1
overriders:
commandOverrider:
- containerName: app
operator: add
value:
- "--log-level=debug"

ClusterOverridePolicy 예시

클러스터 범위 오버라이드 정책:

apiVersion: policy.karmada.io/v1alpha1
kind: ClusterOverridePolicy
metadata:
name: global-image-override
spec:
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
overrideRules:
- targetCluster:
clusterNames:
- cluster1
- cluster2
overriders:
imageOverrider:
- component: Registry
operator: replace
value: private-registry.company.com

오버라이드 정책 작업

오버라이드 정책 편집

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

오버라이드 정책 삭제

⚠️ 주의: 오버라이드 정책을 삭제하면 해당 정책으로 적용된 오버라이드가 제거되고, 리소스가 원래 상태로 복원됩니다.

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

사용 예시

시나리오 1: 클러스터별 다른 이미지 레지스트리 사용

  1. "생성" 버튼 클릭
  2. 정책 정보 입력:
    • 이름: image-registry-override
    • 네임스페이스: production
    • 리소스 선택: Deployment/my-app
  3. 오버라이드 규칙 설정:
    • 대상 클러스터: cluster1 선택
    • 이미지 오버라이더 탭에서 + 클릭
    • 컴포넌트: Repository
    • 연산자: replace
    • 값: private-registry.cluster1.local/my-app
  4. "생성" 버튼 클릭

시나리오 2: 클러스터별 환경 변수 설정

  1. 새 오버라이드 정책 생성
  2. 플레인텍스트 오버라이더 사용:
    path: /spec/template/spec/containers/0/env
    operator: add
    value:
    - name: CLUSTER_NAME
    value: cluster1
  3. 정책 저장

시나리오 3: 개발/운영 환경 분리

  1. 개발 클러스터용 오버라이드 정책:

    • 레이블 오버라이더로 environment: development 추가
    • 플레인텍스트 오버라이더로 replicas: 1 설정
  2. 운영 클러스터용 오버라이드 정책:

    • 레이블 오버라이더로 environment: production 추가
    • 플레인텍스트 오버라이더로 replicas: 5 설정

시나리오 4: 클러스터별 리소스 제한 설정

  1. 새 오버라이드 정책 생성
  2. 플레인텍스트 오버라이더로 리소스 요청/제한 설정:
    path: /spec/template/spec/containers/0/resources
    operator: replace
    value:
    requests:
    memory: "256Mi"
    cpu: "100m"
    limits:
    memory: "512Mi"
    cpu: "500m"

관련 개념

OverridePolicy vs ClusterOverridePolicy

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

오버라이더 타입

오버라이더설명사용 사례
imageOverrider컨테이너 이미지 변경레지스트리, 태그 변경
commandOverrider컨테이너 명령어 변경시작 명령어 수정
argsOverrider컨테이너 인자 변경실행 인자 수정
labelsOverrider레이블 추가/수정/삭제클러스터별 레이블
annotationsOverrider어노테이션 추가/수정/삭제클러스터별 어노테이션
plaintextOverriderJSON 패치 적용모든 필드 수정 가능
fieldOverrider필드 값 변경특정 필드 직접 수정

이미지 오버라이더 컴포넌트

컴포넌트설명예시
Registry이미지 레지스트리docker.io, gcr.io
Repository이미지 저장소library/nginx
Tag이미지 태그latest, v1.0.0

오버라이더 연산자

연산자설명사용 예
replace기존 값을 새 값으로 교체이미지 레지스트리 변경
add값 추가명령어 인자 추가
remove값 제거불필요한 레이블 제거
addIfAbsent없는 경우에만 추가기본 레이블 설정

플레인텍스트 오버라이더 경로

JSON 패치 경로 문법을 사용합니다:

경로대상
/spec/replicasDeployment 복제본 수
/spec/template/spec/containers/0/image첫 번째 컨테이너 이미지
/spec/template/spec/containers/0/resources첫 번째 컨테이너 리소스
/metadata/labels메타데이터 레이블
/metadata/annotations메타데이터 어노테이션

문제 해결

오버라이드가 적용되지 않는 경우:

  • 리소스 셀렉터가 올바른지 확인
  • 대상 클러스터가 올바르게 선택되었는지 확인
  • 전파 정책이 먼저 적용되었는지 확인

오버라이드 충돌 발생 시:

  • 동일한 필드에 여러 오버라이드 정책이 적용되면 충돌 발생
  • 정책 우선순위를 확인하고 조정
  • ClusterOverridePolicy가 OverridePolicy보다 우선

이미지 오버라이드 문제:

  • 이미지 컴포넌트(Registry, Repository, Tag)가 올바른지 확인
  • 오버라이드 값이 유효한 이미지 경로인지 확인

플레인텍스트 오버라이드 경로 오류:

  • JSON 패치 경로가 올바른지 확인
  • 배열 인덱스가 정확한지 확인 (0부터 시작)
  • 경로가 존재하지 않는 경우 add 연산자 사용

다음 단계