Kustomize의 patches 기능은 기존의 YAML 파일을 직접 수정하지 않고, 특정 리소스(Deployment, Service 등)의 일부 필드만 변경할 수 있도록 도와준다.
✅ 환경별(Dev, Prod 등)로 일부 설정만 다르게 적용할 때 유용
✅ 기본(Base) 리소스를 그대로 유지하면서 일부 값만 변경 가능
✅ 수정된 최종 YAML을 kustomize build로 확인 가능
✅ Remove, Replace, Add 가능
Json 6902 Patch : https://datatracker.ietf.org/doc/html/rfc6902
- Inline 방식
# Kustomization
patches:
- target:
kind: Deployment
name: api-deployment
patch: |-
- op: replace
path: /spec/replicas
value: 5
|-는 YAML 블록 문자열(block scalar) 표기법으로, 여러 줄을 포함하는 멀티라인 문자열을 작성할 때 사용됨
- Seperate File 방식
# Kustomization
patches:
- path: replica-patch.yaml
target:
kind: Deployment
name: nginx-deployment
# replica-patch.yaml
- op: replicas
path: /spec/replicas
value: 5
전략적 병합 패치(Strategic merge patch)
표준 kubernetes config와 유사하게 작성된다.
patches:
- patch: |-
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment # 어떤 것을 바꿀지 명확하게
spec:
replicas: 5
patches:
- patch: |-
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment
spec:
template:
metadata:
labels:
org: KodeKloud
Patches Dictionary
patch:
- op: replace
path: "/spec/replicas"
value: 5
- op: replace
path: "/spec/template/spec/containers/0/image"
value: "nginx:1.20"
- op: add
path: /spec/template/metadata/labels/org
value: KodeKloud # org: KodeKloud
Patches List
- 컨테이너 변경
patches:
- target:
kind: Deployment
name: api-deployment
patch: |-
- op: replace
path: /spec/template/spec/containers/0 # 첫 번째 컨테이너 변경
value:
name: haproxy
image: haproxy
- 컨테이너 추가
patches:
- target:
kind: Deployment
name: api-deployment
patch: |-
- op: add # 추가
path: /spec/template/spec/containers/- # -: 목록의 마지막에 append
value:
name: haproxy
image: haproxy
- Strategic Merge Patch로 List 삭제
# Kustomization
patches:
- label-patch.yaml
# label-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment # 어떤 것을 바꿀지 명확하게
spec:
template:
spec:
containers:
- $patch: delete
name: database # 삭제하고자 하는 container 명시하기
실습 ]
📄api-patches.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment
spec:
template:
spec:
containers:
- name: memcached
image: memcached
📄api-depl.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment
spec:
replicas: 1
selector:
matchLabels:
component: api
template:
metadata:
labels:
component: api
spec:
containers:
- name: nginx
image: nginx
📄kustomization.yaml
resources:
- mongo-depl.yaml
- api-depl.yaml
- mongo-service.yaml
- host-pv.yaml
- host-pvc.yaml
patches:
- path: mongo-patch.yaml
- path: api-patch.yaml
📄 strategic merge path를 사용해서 memcached container 삭제하기
- api-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-deployment
spec:
template:
spec:
containers:
- $patch: delete
name: memcached
📄 inline json6902 patch를 사용해서 mongo-deployment로 부터 org: KodeKloud label 삭제하기
resources:
- mongo-depl.yaml
- api-depl.yaml
- mongo-service.yaml
patches:
- target:
kind: Deployment
name: mongo-deployment
patch: |-
- op: remove
path: /spec/template/metadata/labels/org
# value: null 붙여도 된다.
반응형
'Container > Kubernetes' 카테고리의 다른 글
| [K8S] Admission Controller (0) | 2025.02.24 |
|---|---|
| [K8S] Kustomize Overlay/Components (0) | 2025.02.24 |
| [K8S] Kustomize Transformers (0) | 2025.02.23 |
| [K8S] Kustomize build (0) | 2025.02.22 |
| [K8S]Kustomize (1) | 2025.02.21 |