Kustomize는 Yaml 파일을 직접 수정하지 않고도 쿠버네티스 리소스를 커스터마이징할 수 있도록 도와주는 도구이다.
기본(Base) 구성과 환경별(Overlay) 구성을 나누어 관리하며, 이를 통해 개발, 스테이징, 운영 환경에 맞게 쉽게 조정할 수 있다. 기본적으로 kubectl에 내장되어 있어서, 추가 설치 없이 사용할 수 있다.
- Helm 같은 템플릿 엔진 없이, 패치를 적용하는 방식으로 리소스를 관리
- 기존의 YAML 파일을 수정하지 않고, 오버레이(overlays)를 추가하여 리소스를 변경할 수 있음
- CopnfigMap, Secret, Labels, Patches 적용이 가능하여 유지보수가 편리함
📂 디렉토리 구조
- Base 폴더: 모든 애플리케이션의 기본 배포 구성
- Overlays 폴더: 환경별 변경 사항 관리 ( base config 를 수정 및 추가하는 configuration)
kustomize-example/
├── base/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── kustomization.yaml
├── overlays
│ ├── dev
│ │ ├── kustomization.yaml
│ │ ├── patch-development.yaml
│ ├── prod
│ │ ├── kustomization.yaml
│ │ ├── patch-deployment.yaml
기본 구성
📄 base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx:1.17
📄 base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
📄 overlays/dev/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- path: patch-replicas.yaml
📄 overlays/dev/patch-replicas.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1 # Dev 환경에서는 1개만 실행
# Base 리소스 적용
$ kubectl apply -k base/
# dev 환경 리소스 적용
$ kubectl apply -k overlays/dev/
- ConfigMap/ Secret 생성 (별도의 yaml 파일 없이 kustomize에서 생성 가능)
configMapGenerator:
- name: my-config
literals:
- APP_ENV=production
- DEBUG=false
secretGenerator:
- name: my-secret
literals:
- DB_PASSWORD=supersecurepassword
# kubectl apply -k 하면 자동으로 ConfigMap과 Secret 생성됨.
Kustomize | Helm | |
템플릿 사용 | X | O |
적용 방식 | 기존 Yaml 패치하여 변경 - 읽기 쉽다 |
go 템플릿 엔진으로 생성 - 읽기 어려움 |
복잡한 조건 처리 | X (어려움) | 강력한 기능 제공 (conditionals, loops, functions, hooks 등) |
배포 및 관리 | kubectl apply -k | helm install/upgrade |
ConfigMap/Secret 관리 | 지원 O | 지원 O |
[실습 1 ] k8s의 root directory에서 kustomization.yaml 만들기
~/code/k8s $ kubectl apply -k .
configmap/db-credentials created
configmap/redis-credentials created
service/db-service created
service/nginx-service created
service/rabbit-cluster-ip-service created
deployment.apps/db-deployment created
deployment.apps/nginx-deployment created
deployment.apps/rabbitmq-deployment created
[실습 2] 각 sub directory 안에 kustomization.yaml 만들기
참고:
반응형
'Container > Kubernetes' 카테고리의 다른 글
[K8S] Kustomize Transformers (0) | 2025.02.23 |
---|---|
[K8S] Kustomize build (0) | 2025.02.22 |
[K8S] Upgrading a helm chart - kodekloud 실습 (0) | 2025.02.21 |
[K8S] Lifecycle management with Helm (0) | 2025.02.21 |
[K8S] Helm (0) | 2025.02.20 |