쿠버네티스

Kubernetes : Kustomize

NickTop 2025. 3. 5. 20:56

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