본문 바로가기

Container/Kubernetes

[K8S] Kustomize Overlay/Components

Overlays

Overlays(오버레이)는 기본 배포 설정(Base)을 유지하면서 환경별(개발/운영 등)로 일부 설정을 변경할 수 있도록 도와주는 기능으로, 기본 YAML을 직접 수정하지 않고 환경별로 변경 사항만 적용하는 방법이다.

 

[실습 1 ]

📄base/

# kustomization.yaml
resources:
  - api-deployment.yaml
  - db-configMap.yaml
  - mongo-depl.yaml
  
# mongo-depl.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: mongo
  template:
    metadata:
      labels:
        component: mongo
    spec:
      containers:
        - name: mongo
          image: mongo
          env:
            - name: MONGO_INITDB_ROOT_USERNAME
              valueFrom:
                configMapKeyRef:
                  name: db-creds
                  key: username
            - name: MONGO_INITDB_ROOT_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: db-creds
                  key: password
# db-configMap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: db-creds
data:
  username: mongo
  password: mypassword

 

MONGO_INITDB_ROOT_PASSWORD가 db-cred configmap에 의해 mypassword로 설정되어 있었음.

📄overlays/staging

# kustomization.yaml
bases:
  - ../../base
patches:
  - configMap-patch.yaml

# configMap-patch.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: db-creds
data:
  username: mongo
  password: superp@ssword123

patch가 staging에서  superp@ssword123로 설정함.

 

[실습 2]  inline JSON6902 patch 사용해서 caddy docker image 사용하도록 update하기

# Kustomization.yaml
bases:
  - ../../base

commonLabels:
  environment: QA

patches:
  - target: 
      kind: Deployment
      name: api-deployment
    patch: |- 
      - op: replace
        path: /spec/template/spec/containers/0/image
        value: caddy 

controlplane ~/code/k8s ➜  kubectl apply -k /root/code/k8s/overlays/QA
# Warning: 'bases' is deprecated. Please use 'resources' instead. Run 'kustomize edit fix' to update your Kustomization automatically.
# Warning: 'commonLabels' is deprecated. Please use 'labels' instead. Run 'kustomize edit fix' to update your Kustomization automatically.
configmap/db-creds created
deployment.apps/api-deployment created
deployment.apps/mongo-deployment created

 

[실습 3] staging 환경에서 mysql-deployment  배포하기. 

📄 /root/code/k8s/overlays/staging

# kustomization.yaml
bases:
  - ../../base

resources:
  - mysql-depl.yaml
  
commonLabels:
  environment: staging

# mysql-depl.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
spec:
  replicas: 1
  template:
    spec:
      containers:
        - name: mysql
          image: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: mypassword
              
$ kubectl apply -k /root/code/k8s/overlays/staging
# Warning: 'bases' is deprecated. Please use 'resources' instead. Run 'kustomize edit fix' to update your Kustomization automatically.
# Warning: 'commonLabels' is deprecated. Please use 'labels' instead. Run 'kustomize edit fix' to update your Kustomization automatically.
configmap/db-creds created
deployment.apps/api-deployment created
deployment.apps/mongo-deployment created
deployment.apps/mysql-deployment created

# 최종 YAML 확인
$ kubectl kustomize overlays/staging/
# 실행하면 Base + Overlays 적용된 최종 YAML이 출력됨

 

  • ConfigMap 적용
# kustomization.yaml
bases:
  - ../../base

resources:
  - mysql-depl.yaml

commonLabels:
  environment: staging

configMapGenerator:
  - name: app-config
    literals:
    - org=soyoun

controlplane ~/code/k8s ➜  kubectl get cm
NAME                    DATA   AGE
app-config-cm8d47mbg6   1      39s
db-creds                2      6m56s
kube-root-ca.crt        1      57m

controlplane ~/code/k8s ➜  kubectl describe cm app-config-cm8d47mbg6 
Name:         app-config-cm8d47mbg6
Namespace:    default
Labels:       environment=staging
Annotations:  <none>

Data
====
org:
----
soyoun


BinaryData
====

Events:  <none>

 

Components

 

Kustomize Components는 Kustomize의 Overlays보다 더 유연한 방식으로 리소스를 조합할 수 있는 기능이다.

기존 Overlays가 상속 구조 ( Base → Overlays) 였다면, Components는 조합 구조이다. [ Base + 여러 Components: 특정 기능(로깅, 모니터링 등)을 필요할 때만 적용 가능]

 

/kustomize-example
  ├── base
  │   ├── deployment.yaml
  │   ├── service.yaml
  │   ├── kustomization.yaml
  ├── components
  │   ├── caching
  │   │   ├── kustomization.yaml
  │   │   ├── deployment-patch.yaml
  │   │   ├── redis-depl.yaml
  ├── db/
  │   │   ├── kustomization.yaml
  │   │   ├── deployment-patch.yaml
  │   │   ├── postgres-depl.yaml
  ├── overlays
  │   ├── dev/
  │   │   ├── kustomization.yaml
  │   ├── premium/
  │   │   ├── kustomization.yaml
  │   ├── standalone/
  │   │   ├── kustomization.yaml

 

# Components/db/kystomization.yaml
apiVersion: kustomize.config.k8s.io/v1alpha1
kind: Component  # Component 명시!

resources:
  - postgres-depl.yaml
  
secretGenerator:
  - name: postgres-cred
    literals:
      - password=postgres123
      
patches:
  - deployment-patch.yaml
# component/db/deployment-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
spec:
  template:
    spec:
      containers:
        - name: api
          env:
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: postgres-cred
                  key: password

 

# overlays/dev/kustomization.yaml
base:
  - ../../base
  
components:
  - ../../components/db

 

[ 실습 ]

# overlays/dev/kustomization.yaml
bases:
  - ../../base

components:  # 여러 개의 components 사용
  - ../../components/auth
  - ../../components/db
  - ../../components/logging

 

반응형

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

[K8S] Mutating/Validating Admission Controller  (0) 2025.02.24
[K8S] Admission Controller  (0) 2025.02.24
[K8S] Kustomize Patches  (0) 2025.02.23
[K8S] Kustomize Transformers  (0) 2025.02.23
[K8S] Kustomize build  (0) 2025.02.22