Kustomize 설정 변경: 패치와 트랜스포머 완전 정복

34 sec read

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 형태가 되고
  • 리플리카 수와 환경 변수도 개발 환경에 맞게 자동 적용됩니다.

✅ 마무리: 설정 변경, 이제는 유연하게 관리하자

패치와 트랜스포머를 잘 활용하면 복잡한 설정도 깔끔하게 정리할 수 있습니다. 운영 환경, 테스트 환경, 개발 환경마다 설정을 따로 만들지 않아도 되고, 관리 포인트도 확 줄어듭니다.

[MSA] Spring Cloud Gateway VS Apache APISIX : 단계별…

마이크로서비스 아키텍처(MSA)에서 API 게이트웨이는 시스템의 관문 역할을 하는 핵심 컴포넌트입니다. 수많은 Java 개발팀이 Spring 생태계와의 완벽한 통합성을 자랑하는 Spring Cloud Gateway를 선택해왔습니다. 그러나 시스템이...
eve
1 min read

Hook과 Trigger: 시스템 자동화를 위한 두 가지 핵심 비교…

소프트웨어 개발에서 ‘자동화’는 더 이상 선택이 아닌 필수입니다. 특정 시점이나 조건에 맞춰 코드를 실행하는 능력은 시스템의 효율성과 안정성을 좌우합니다. 이때 개발자들은 종종 ‘훅(Hook)’과 ‘트리거(Trigger)’라는...
eve
23 sec read

APISIX와 Lua를 활용한 MongoDB API 동적 라우팅 구현 (feat.…

최근 마이크로서비스 아키텍처(MSA)에서 API 게이트웨이는 인증, 로깅, 속도 제한 등 공통 기능을 처리하는 핵심 컴포넌트로 자리 잡았습니다. 특히 Apache APISIX는 Lua 스크립트를 통해 동적이고...
eve
1 min read