소개
kustomize는 Kubernetes SIGs가 개발한 Kubernetes용 YAML 구성 커스터마이징 도구입니다. 원본 템플릿 없는 YAML 파일을 그대로 유지하면서 선언적 방식으로 다양한 목적의 구성으로 변형할 수 있도록 돕습니다. make처럼 무엇을 할지 파일에 선언하고, sed처럼 편집된 텍스트를 출력하는 방식으로 동작하여 kubectl을 통한 클러스터 적용 흐름에 자연스럽게 통합됩니다.
상세정보
kustomization 파일 기반 선언형 커스터마이징
디렉터리 안에 있는 원본 리소스 파일(예: deployment.yaml, service.yaml)과 별도로 kustomization.yaml을 작성하여 공통 레이블 추가, ConfigMap 생성 등 적용할 커스터마이즈를 선언합니다. 원본 YAML은 직접 수정되지 않으므로 업스트림 구성에서 fork한 경우에도 rebase가 용이합니다.
kubectl과의 통합
kustomize 빌드 흐름은 kubectl에 내장되어 있으며, kubectl v1.14부터 사용 가능하고 이후 kubectl 릴리스마다 함께 업데이트됩니다. README의 버전 표에 따르면 kubectl v1.27에는 kustomize v5.0.1이 포함되어 있습니다.
베이스와 오버레이를 통한 변형 구성
공통 베이스 디렉터리를 두고 형제 디렉터리 형태의 오버레이를 만들어 development, staging, production 등 환경별 변형을 관리할 수 있습니다. 오버레이 kustomization은 베이스를 참조하고 적용할 패치를 지정하여 환경별 차이(예: replica 수, CPU limits)를 표현합니다.
설치
- Windows에서는 winget을 통해 설치할 수 있습니다:
winget install --id Kubernetes.kustomize --exact - 설치 안내 및 일반 문서는 공식 kustomize 문서 페이지에서 제공됩니다.
kustomization 파일 만들기
YAML 리소스 파일이 있는 디렉터리에서 apiVersion과 kind가 Kustomization인 kustomization.yaml을 작성하고, resources 항목에 사용할 YAML 파일을 선언합니다.
커스터마이즈된 YAML 생성
kustomize build ~/someApp 명령으로 결과 YAML을 출력하며, 이 출력을 바로 클러스터에 적용하려면 kustomize build ~/someApp | kubectl apply -f - 형태로 파이프하여 사용합니다.
오버레이 구성 만들기
베이스 디렉터리를 someApp/base로 옮기고 someApp/overlays/<환경> 디렉터리에 별도의 kustomization.yaml과 패치 파일을 배치합니다. 환경별 빌드는 kustomize build ~/someApp/overlays/production과 같이 오버레이 경로를 지정해 실행합니다.
활용 예시
- 업스트림 저장소를 베이스로 두고 자신의 저장소에 오버레이를 둠으로써 git submodule 없이도 환경별 구성을 분리 관리하는 사례가 README에 안내되어 있습니다.
- 공통 베이스에 development, staging, production 등 환경별 오버레이를 두고, 각 오버레이에서 replica 수나 리소스 limits를 패치해 다중 환경을 운영하는 구성 예시가 함께 제공됩니다.
- 생성된 YAML을 kubectl로 파이프 적용하여 별도 임시 파일 없이 클러스터에 배포하는 흐름이 기본 예시로 설명됩니다.
제한 및 라이선스 확인사항
소스 코드는 Apache-2.0 라이선스로 배포되며, 라이선스 전문은 저장소의 LICENSE 파일에서 확인할 수 있습니다. kustomize는 템플릿 기반의 YAML 생성을 대체하는 도구가 아니라 원본 YAML을 그대로 둔 채 선언적으로 패치/확장하는 방식이므로, Helm 등 템플릿 엔진과 목적이 다릅니다.
시스템 요구사항
Kubernetes YAML 구성 파일(Deployment, Service, ConfigMap 등)을 커스터마이징하기 위한 도구이므로, 실효적으로 활용하려면 대상 클러스터에 적용 가능한 kubectl 등 Kubernetes 클라이언트가 함께 사용되는 것이 일반적입니다. 설치와 실행 자체에 별도의 계정이나 API 키는 요구되지 않습니다.


