Kustomize는 yaml 오버레이 방식을 통해 환경별로 설정을 쉽게 분리할 수 있다
Helm과 다르게 어플리케이션 패키지는 아니다
기본 구조
base/
deployment.yaml
service.yaml
overlays/
dev/
kustomization.yaml
patch-deployment.yaml
prod/
kustomization.yaml
patch-deployment.yaml
base: 공통 리소스 정의
overlays: 환경별 커스터마이징 정의
overlays에서 base의 yaml 파일을 덮어쓴다
nginx 예시를 살펴보자
base/
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
overlays/dev/
변경하고 싶은 부분이 개발 환경용 이미지라고 하자
아래와 같이 kustomization.yaml에 선언해주고 patch-deployment.yaml에 변경할 부분만 명시한다
kustomization.yaml
resources:
- ../../base
patchesStrategicMerge:
- patch-deployment.yaml
patch-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
template:
spec:
containers:
- name: nginx
image: nginx:dev # 개발 환경용 이미지
overlays/prod/
운영은 replica수만 조절하고 싶다고 하자
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 5
각 환경별로는 아래와 같이 배포한다
kustomize build <kustomization.yaml 있는 경로> 를 하면 완성된 결과(yaml)를 터미널에 출력해준다
kustomize build overlays/dev | kubectl apply -f -
kustomize build overlays/prod | kubectl apply -f -
Patch
patchesStrategicMerge 대신 patches 필드로 변경하고자 하는 값만 명시할 수 있다
운영 deployment replicas만 변경한 것을 예시로 보자
overlays/prod/kustomization.yaml
resources:
- ../../base
patches:
- target:
kind: Deployment
name: nginx
patch: |-
- op: replace
path: /spec/replicas
value: 2
Transformer
transformer로 이미지태그를 변경하거나 이름에 prefix나 suffix를 추가할수있다. (patches로도 가능하긴함)
overlays/dev/kustomization.yaml
resources:
- ../../base
transformers:
- namePrefixTransformer.yaml
- image-transformer.yaml
[name에 prefix 추가]
overlays/dev/namePrefixTransformer.yaml
apiVersion: builtin
kind: PrefixTransformer
metadata:
name: prefix-transformer
prefix: dev-
fieldSpecs:
- path: metadata/name
kind: Deployment
- path: metadata/name
kind: Service
[image 태그 변경]
overlays/dev/image-transformer.yaml
apiVersion: builtin
kind: ImageTagTransformer
metadata:
name: image-transformer
imageTag:
- name: nginx
newTag: dev
'쿠버네티스' 카테고리의 다른 글
Kubernetes : RBAC (role/rolebinding/csr/serviceAccount) (0) | 2025.03.09 |
---|---|
Kubernetes : CRD (0) | 2025.03.09 |
Kubernetes : Helm (0) | 2025.03.04 |
Kubernetes : Network (0) | 2025.03.03 |
Kubernetes : Scheduler (0) | 2025.02.01 |