Kubernetes

[Kubernetes] Kustomize 사용하기

sooondubu 2025. 9. 24. 17:07

 

 

Kustomize 사용하기


개념

Kustomize는 쿠버네티스(Kubernetes)의 구성(Configuration)을 선언적으로 관리하고 커스터마이징하기 위한 도구이다.


Kustomize 를 사용하는 이유

현재 쿠버네티스에 적용할 매니패스트(.yaml)는 2개이다. 즉 이들을 적용하려면 각각

k create -f deplyment.yaml
k create -f service.yaml

두번의 명령어를 입력하게 된다.

하지만 실제 운영 상황에서는 매니패스트 파일이 20개, 30개 혹은 그 이상 많아질 수 밖에 없다.

이 경우 모든 파일에 대해 일일히 명령어를 입력하기에는 불편하다.

이를 해결하기 위해 나온 것이 Kustomize 이다.


장점

  • 원본 YAML 파일을 수정하지 않고 다양한 설정을 관리할 수 있다.
  • 표준 쿠버네티스 YAML 문법을 사용하기 때문에 다른 템플릿 엔진의 문법을 배울 필요가 없다.
  • kubectl 에 내장되어 있어 별도의 패키지 설치가 필요 없다.

Kustomize 사용하기

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - service.yaml

위와 같이 kustomization.yaml 파일을 통해 매니패스트들을 관리, 커스터마이징을할 수 있다.

  • resources: 포함할 매니패스트 파일들을 적어준다
  • 이하에 네임 변환, 라벨, 어노테이션, 이미지 등을 적어 커스터마이징을 할 수 있다. (예시에는 변경사항 없음)

# k kustomize [kustomization.yaml 의 경로]
# k = kubectl
k kustomize . 

해당 명령어를 입력하면 변경 사항이 적용 될 모든 매니패스트(yaml)을 출력하게 된다. (해당 예시에서는 아직 변경사항을 적지 않음)

이하 두 명령어는 동일한 명령어이다.

  • kubectl kustomize [dir] : kubectl 의 내장 kustomize 를 호출
  • kustomize build [dir] : 직접 설치한 kustomize 를 호출

k kustomize . | k apply -f -

다음과 같이 파이프라인을 통해 kustomize 의 결과를 받아 클러스터에 적용할 수 있다.


중첩된 kustomization 파일

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - nginx/deployment.yaml
  - nginx/service.yaml

  - db/db-deployment.yaml
  - db/db-service.yaml
  - db/db-config.yaml

다음과 같이 기능별로 폴더를 분리, yaml 파일이 많아질 경우에는 한 개의 kustomization.yaml 에서 참조하는 매니패스트 들이 많아진다. 이는 확장성 부족, 책임의 분리, 환경의 분리가 어려워진다.

따라서 중첩된 kustomization.yaml 을 통해 모듈화를 할 수 있다.


# kustomize-blog/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - nginx/
  - db/

프로젝트 루트의 kustomization.yaml

  • resources에 하위 폴더의 경로를 적어준다
# kustomize-blog/nginx/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - nginx-deployment.yaml
  - nginx-service.yaml

nginx 폴더 내의 kustomization.yaml

  • resources에 관리할 매니패스트를 적어준다
# kustomize-blog/db/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - db-deployment.yaml
  - db-service.yaml
  - db-config.yaml

db 폴더 내의 kustomization.yaml

  • resources에 관리할 매니패스트를 적어준다

총 5개의 yaml 출력을 확인할 수 있다.