본문 바로가기

Container/Kubernetes

[K8S]Kustomize

Kustomize는 Yaml 파일을 직접 수정하지 않고도 쿠버네티스 리소스를 커스터마이징할 수 있도록 도와주는 도구이다.

기본(Base) 구성과 환경별(Overlay) 구성을 나누어 관리하며, 이를 통해 개발, 스테이징, 운영 환경에 맞게 쉽게 조정할 수 있다. 기본적으로 kubectl에 내장되어 있어서, 추가 설치 없이 사용할 수 있다. 

  • Helm 같은 템플릿 엔진 없이, 패치를 적용하는 방식으로 리소스를 관리
  • 기존의 YAML 파일을 수정하지 않고, 오버레이(overlays)를 추가하여 리소스를 변경할 수 있음
  • CopnfigMap, Secret, Labels, Patches 적용이 가능하여 유지보수가 편리함

📂 디렉토리 구조

  • Base 폴더: 모든 애플리케이션의 기본 배포 구성
  • Overlays 폴더: 환경별 변경 사항 관리 ( base config 를 수정 및 추가하는 configuration)
kustomize-example/
├── base/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── kustomization.yaml
├── overlays
│   ├── dev
│   │   ├── kustomization.yaml
│   │   ├── patch-development.yaml
│   ├── prod
│   │   ├── kustomization.yaml
│   │   ├── patch-deployment.yaml

 

 

기본 구성

 

📄 base/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: nginx:1.17

 

📄 base/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - service.yaml

 

📄 overlays/dev/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../../base

patches:
  - path: patch-replicas.yaml

 

📄 overlays/dev/patch-replicas.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1  # Dev 환경에서는 1개만 실행
 
# Base 리소스 적용
$ kubectl apply -k base/

# dev 환경 리소스 적용
$ kubectl apply -k overlays/dev/

 

  • ConfigMap/ Secret 생성 (별도의 yaml 파일 없이 kustomize에서 생성 가능)
configMapGenerator:
- name: my-config
  literals:
  - APP_ENV=production
  - DEBUG=false

secretGenerator:
- name: my-secret
  literals:
  - DB_PASSWORD=supersecurepassword
  
  # kubectl apply -k 하면 자동으로 ConfigMap과 Secret 생성됨.

 

  Kustomize Helm
템플릿 사용  X O
적용 방식 기존 Yaml 패치하여 변경
- 읽기 쉽다 
go 템플릿 엔진으로 생성
- 읽기 어려움
복잡한 조건 처리 X (어려움) 강력한 기능 제공
(conditionals, loops, functions, hooks 등)
배포 및 관리 kubectl apply -k helm install/upgrade
ConfigMap/Secret 관리 지원 O 지원 O

 

[실습 1 ] k8s의 root directory에서 kustomization.yaml 만들기

 ~/code/k8s $ kubectl apply -k .
configmap/db-credentials created
configmap/redis-credentials created
service/db-service created
service/nginx-service created
service/rabbit-cluster-ip-service created
deployment.apps/db-deployment created
deployment.apps/nginx-deployment created
deployment.apps/rabbitmq-deployment created

 

[실습 2]  각 sub directory 안에 kustomization.yaml 만들기

root directory
sub-directory

참고:

반응형

'Container > Kubernetes' 카테고리의 다른 글

[K8S] Kustomize Transformers  (0) 2025.02.23
[K8S] Kustomize build  (0) 2025.02.22
[K8S] Upgrading a helm chart - kodekloud 실습  (0) 2025.02.21
[K8S] Lifecycle management with Helm  (0) 2025.02.21
[K8S] Helm  (0) 2025.02.20