Kustomize Problem Statement & idealogy

Yu Sang Min·2025년 7월 6일

CKA

목록 보기
100/110
post-thumbnail

✅ Kustomize란 무엇인가?

Kustomize는 Kubernetes 리소스를 "복붙 없이" 환경별로 오버라이드(override) 할 수 있게 도와주는 도구.
템플릿 언어 없이, 순수 YAML 기반으로 구성되어 있고, kubectl에 기본 포함되어 있어 설치도 필요 없음.


❓ Kustomize가 등장한 이유

✅ 기존 방식의 문제

  1. deployment.yaml을 모든 환경(dev, staging, prod)에 맞게 각각 복사해서 수정
  2. 모든 디렉토리에 같은 파일을 두고 일부 값(예: replicas)만 다르게 설정
  3. 리소스가 많아질수록 파일 복제와 수동 수정이 귀찮고, 실수 위험 증가

✅ 비효율적 예

environments/
├── dev/
│   └── deployment.yaml  (replicas: 1)
├── staging/
│   └── deployment.yaml  (replicas: 2)
└── prod/
    └── deployment.yaml  (replicas: 5)

🤦‍♂️ 새 리소스(service.yaml 등)가 생기면 세 환경 모두에 복붙해서 넣어야 함 → 유지보수 지옥


🧩 Kustomize의 해결 방법

💡 핵심 구조: Base + Overlays

kustomize-app/
├── base/
│   ├── deployment.yaml
│   └── kustomization.yaml
└── overlays/
    ├── dev/
    │   └── kustomization.yaml
    ├── staging/
    │   └── kustomization.yaml
    └── prod/
        └── kustomization.yaml

🔹 Base

  • 모든 환경에서 공통으로 사용하는 기본 설정
  • 예: deployment.yaml에서 replicas: 1 기본값

🔹 Overlay

  • 각 환경별로 바꾸고 싶은 값만 오버라이드
  • staging에서는 replicas: 2, prod에서는 replicas: 5만 덮어씀

🛠️ Kustomize 사용 흐름

1. base/kustomization.yaml

resources:
  - deployment.yaml

2. overlays/staging/kustomization.yaml

bases:
  - ../../base

patchesStrategicMerge:
  - replica-patch.yaml

3. overlays/staging/replica-patch.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2

kubectl apply -k overlays/staging/ → base + overlay 합쳐서 최종 manifest 생성 및 적용


⚖️ Helm vs Kustomize 차이점

FeatureHelmKustomize
방식템플릿 기반순수 YAML
변수 설정values.yaml로 매개변수화YAML patch로 오버라이드
설치 위치별도 설치 필요kubectl에 기본 포함
복잡도복잡한 로직 가능하지만 가독성 낮음단순, 명확, 직관적
권장 사용처외부 차트 사용 / 패키징 필요 시내부 환경 커스터마이징 시

💬 Helm은 패키징 중심, Kustomize는 환경별 커스터마이징 중심이라고 기억하면 좋아


✅ 핵심 요약

  • Kustomize는 중복 없이 환경별 설정을 오버라이드하는 도구

  • Base/Overlay 패턴으로 구성 → 유지보수성과 확장성 향상

  • 템플릿 없이 순수 YAML 사용 → 깔끔하고 학습 난이도 낮음

  • 실무에서는 Helm과 Kustomize를 함께 사용하는 경우도 많음

    • Helm으로 설치 후 Kustomize로 post-patch 처리 등
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글