Kustomize : Overlay, Component, Patch

y001·2025년 5월 10일

1. Kustomize 디렉토리 구조 이해하기

Kustomize는 보통 다음과 같은 구조로 리소스를 관리한다:

k8s/
├── base/
├── overlays/
│   ├── dev/
│   ├── prod/
│   └── community/
└── components/
    ├── logging/
    └── caching/
  • base/: 공통 리소스를 정의하는 디렉토리
  • overlays/: dev, prod 등 환경별 설정 디렉토리
  • components/: 선택적 기능(로깅, 캐시 등)을 조립 가능한 단위로 구성한 디렉토리

2. kustomization.yaml 주요 필드

필드명용도설명
resources기본 리소스 포함Deployment, Service, Config 등
patchesStrategicMergeYAML 구조 기반 병합 patch가장 많이 사용되는 patch 방식
patchesJSON 6902 방식 patch경로 기반으로 정확히 수정함
components선택적 기능 구성overlay에서 컴포넌트 조합 가능
secretGenerator, configMapGeneratorSecret, ConfigMap 생성기실습에서 db-creds, logging-config 등 생성함

3. Patch 방식 두 가지: 언제 어떤 걸 쓸까?

✅ Strategic Merge Patch (가장 일반적)

  • patchesStrategicMerge: 아래에 patch 파일을 나열
  • 리소스 일부만 재정의하는 구조
  • containers.name 기준으로 병합됨

예:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
spec:
  replicas: 3

✅ JSON 6902 Patch (정밀 제어용)

  • patches: + target: + patch: 구조
  • /spec/template/spec/containers/0/env/1 같은 정확한 경로로 수정 가능
  • 삭제, 배열 위치 수정 등도 가능

예:

patches:
  - target:
      group: apps
      version: v1
      kind: Deployment
      name: api-deployment
    patch: |-
      - op: replace
        path: /spec/replicas
        value: 3

4. Component로 기능을 재사용하는 방법

컴포넌트는 다음과 같은 목적에 유용하다:

  • 로깅, 모니터링, 캐시 등 선택적으로 사용할 기능을 분리
  • overlay에서 components: 필드로 조립 가능

예: components/caching/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1alpha1
kind: Component

resources:
  - redis-depl.yaml
  - redis-service.yaml

patchesStrategicMerge:
  - api-patch.yaml

overlay에서 조립:

components:
  - ../../components/caching

5. Overlay 환경별 구성과 적용

  • overlays/prod에서는 replica 수, 이미지 태그 등 변경
  • overlays/community에서는 logging, metrics component만 활성화
  • overlays/QA에서는 이미지 patch 등을 통해 QA 전용 구성 수행

적용 예:

kubectl apply -k overlays/prod

미리보기:

kubectl kustomize overlays/prod

0개의 댓글