Kustomize - Patches
Strategic merge patches
base
kustomization.yaml 파일
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
- 기본 deployment, service 패키징
deployment.yaml 파일
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 3
selector:
matchLabels:
app: hello
template:
metadata:
name: hello
labels:
app: hello
spec:
containers:
- name: nginx
image: nginxdemos/hello:plain-text
ports:
- name: http
containerPort: 80
protocol: TCP
service.yaml 파일
apiVersion: v1
kind: Service
metadata:
name: hello
labels:
app: hello
spec:
type: ClusterIP
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 80
selector:
app: hello
dev
kustomization.yaml 파일
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../base
namePrefix: dev-
patchesStrategicMerge:
- resources.yaml
- service.yaml
- resources:
- 상위 base 경로의 kustomize 결과를 리소스로 사용
- namePrefix:
- 접두사 dev- 추가
- patchesStrategicMerge:
- 해당 속성을 통해 전략적 merge
resources.yaml 파일
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
template:
spec:
containers:
- name: nginx
resources:
requests:
cpu: 100m
memory: 64Mi
- 디플로이먼트지만 selector, image 등의 필수 속성들이 부족함 ➡️이 파일이 patch로서 사용되기 떄문
- 패치는 수정이 필요한 부분만 값을 넣어주면 됨
- 패치할 target은
apiversion
,kind
,metadata.name
으로 확인 - 패치할 target을 찾아 아래 spec 값들을 바꾸어 줌
service.yaml 파일
apiVersion: v1
kind: Service
metadata:
name: hello
spec:
type: NodePort
- 이 파일 역시 patch로서 사용되기 떄문에 수정이 필요한 부분만 값을 넣어주면 됨
type
을NodePort
로 변경
json 6902 patches
base는 모두 동일
dev
kustomization.yaml 파일
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../base
namePrefix: dev-
patchesJson6902:
- target:
version: v1
kind: Deployment
name: hello
path: resources.yaml
- target:
version: v1
kind: Service
name: hello
path: service.yaml
- resources:
- 상위 base 경로의 kustomize 결과를 리소스로 사용
- namePrefix:
- 접두사 dev- 추가
- patchesJson6902:
- JsonPatch이며 RFC 6902 의미
- json patch는 직접 target을 찾을 수 없기 때문에 따로
target
에 지정
resources.yaml 파일
- op: add
path: /spec/template/spec/containers/0/resources
value:
requests:
cpu: 100m
memory: 64Mi
- op:
- add 오퍼레이터
- path:
- 경로 지정
- value:
- patch value 지정
- 위 3가지 속성을 종합하면
base/deployment.yaml
파일에서path
경로에value
값을add
하는 것
service.yaml 파일
- op: replace
path: /spec/type
value: NodePort
- op:
- replace 오퍼레이터
- path:
- 경로 지정
- value:
- patch value 지정
- 위 3가지 속성을 종합하면
base/service.yaml
파일에서path
경로에 있는 값을value
값으로replace
하는 것
[참조]: 패스트 캠퍼스 - 한 번에 끝내는 AWS 인프라 구축과 DevOps 운영 초격차 패키지 Online
끝!