Kubernetes 설정을 다루다 보면 간단한 리소스 수정만으로는 한계에 부딪히게 됩니다. 예를 들어, 운영 환경에서는 배포 수(replica)도 다르고, 환경 변수도 다르고, 이미지 태그도 다릅니다. 이런 다양하고 복잡한 설정 변경, 어떻게 관리하면 좋을까요?
오늘은 Kustomize의 패치(Patch)와 트랜스포머(Transformer) 기능을 활용해서 유연하고 효율적인 설정 관리 방법을 소개해드릴게요.
🧱 1. 패치(Patch)란? – 리소스 일부분만 수정하기
📌 패치가 필요한 이유
기존 리소스를 그대로 복사해서 수정하는 건 비효율적이고 관리가 어렵습니다. 이럴 때 패치를 사용하면 필요한 부분만 딱 집어서 수정할 수 있어요. 마치 그림의 일부를 리터치하는 것처럼요.
🧠 전략적 머지 패치(Strategic Merge Patch)
Kustomize는 보통 Strategic Merge Patch 방식을 사용합니다. 이 방식은 리소스의 구조를 이해하고, 올바르게 병합되도록 도와줍니다. 충돌도 줄이고, 깔끔하게 적용되죠.
🧪 예제: 리플리카 수 & 환경 변수 변경하기
# patch-replica.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 5
# patch-env.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
containers:
- name: my-app
env:
- name: DB_HOST
value: "prod-db.example.com"
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
patchesStrategicMerge:
- patch-replica.yaml
- patch-env.yaml
이렇게 구성하면, my-app
배포 리소스에 리플리카 수는 5로, DB_HOST는 production용으로 설정됩니다.
🔄 2. 트랜스포머(Transformer)란? – 자동 변환의 마법사
📌 트랜스포머가 하는 일
트랜스포머는 반복적으로 바꿔야 하는 설정을 자동으로 변환해주는 도구입니다. 마치 언어 번역기처럼, 리소스 이름이나 이미지 태그 등을 알아서 변환해줘요.
🔧 images 트랜스포머: 이미지 태그 바꾸기
images:
- name: my-registry/my-app
newName: my-registry/my-app
newTag: v1.1
위 설정을 넣으면, 모든 리소스에서 my-registry/my-app
이미지를 v1.1
로 자동 변환합니다.
🔤 namePrefix / nameSuffix: 이름 자동 붙이기
namePrefix: dev-
nameSuffix: -dev
모든 리소스 이름이 dev-my-app-dev
, dev-service-dev
처럼 변환됩니다. 환경마다 구분할 때 유용하겠죠?
🎯 3. 패치 + 트랜스포머: 함께 쓰면 진짜 강력하다
이제 진짜 마법 같은 조합입니다.
- 패치로 특정 필드를 정확히 수정하고
- 트랜스포머로 반복적인 설정을 자동화하면
운영 환경, 개발 환경 등 다양한 설정을 효율적으로 관리할 수 있습니다.
🔧 실전 예제: 개발 환경 설정 만들기
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
patchesStrategicMerge:
- patch-replica.yaml
- patch-env.yaml
images:
- name: my-registry/my-app
newName: my-registry/my-app
newTag: v1.1-dev
namePrefix: dev-
nameSuffix: -dev
🧪 적용 명령어
kubectl apply -k .
이렇게 하면:
- 이미지 태그는
v1.1-dev
로 바뀌고 - 리소스 이름은
dev-...-dev
형태가 되고 - 리플리카 수와 환경 변수도 개발 환경에 맞게 자동 적용됩니다.
✅ 마무리: 설정 변경, 이제는 유연하게 관리하자
패치와 트랜스포머를 잘 활용하면 복잡한 설정도 깔끔하게 정리할 수 있습니다. 운영 환경, 테스트 환경, 개발 환경마다 설정을 따로 만들지 않아도 되고, 관리 포인트도 확 줄어듭니다.