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 |