Component는 “특정 기능(옵션)을 구성하는 리소스 + 패치 + 생성기(secret/configmap 등)”를 재사용 가능한 블록으로 묶어서, 여러 overlay 중 ‘일부’에만 선택적으로 포함할 수 있게 해주는 기능입니다.
즉, base에 넣기엔 모든 환경에 적용되면 안 되고, 그렇다고 overlay마다 복붙하기엔 드리프트(config drift)가 생길 수 있는 구성을 “한 번만 작성해서 필요한 overlay에서만 조립”하게 해줍니다. (GitHub)
- 모든 환경에서 항상 필요한 공통 리소스라면 →
base/ - 특정 환경 “일부”에서만 켜야 하는 옵션 기능이라면 →
components/로 분리
Component는 Kustomize에서 apiVersion: kustomize.config.k8s.io/v1alpha1, kind: Component를 사용합니다. (KodeKloud Notes)
언제 Components가 특히 유용한가?
강의 예시처럼 “배포 변형(overlay)”이 여러 개이고, 옵션 기능이 서로 다른 subset에만 필요한 경우입니다.
예:
- overlays:
dev,premium,standalone(self-hosted) - 옵션 기능 1) 캐시(Redis):
premium,standalone에만 필요 - 옵션 기능 2) 외부 DB(Postgres):
dev,premium에만 필요
이걸 overlay마다 복붙하면 “한쪽만 수정하고 다른쪽은 잊는” 문제가 생깁니다. Components는 그걸 막는 목적입니다.
대표 폴더 구조
k8s/
base/
api-depl.yaml
kustomization.yaml
components/
caching/
kustomization.yaml
redis-depl.yaml
redis-svc.yaml
redis-config.yaml
api-cache-patch.yaml
database/
kustomization.yaml
postgres-depl.yaml
db-secret.yaml # 또는 secretGenerator
api-db-env-patch.yaml # API deployment에 env 추가
overlays/
dev/
kustomization.yaml
premium/
kustomization.yaml
standalone/
kustomization.yaml
1) base 구성
k8s/base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- api-depl.yaml
2) Component 만들기 (database 예시)
2-1) components/database/kustomization.yaml
Component는 apiVersion/kind가 다릅니다. (KodeKloud Notes)
apiVersion: kustomize.config.k8s.io/v1alpha1
kind: Component
resources:
- postgres-depl.yaml
- db-secret.yaml
patchesStrategicMerge:
- api-db-env-patch.yaml
2-2) Postgres 리소스 (예시)
components/database/postgres-depl.yaml (간단 예)
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:16
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-cred
key: password
2-3) Secret (예시)
components/database/db-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: postgres-cred
type: Opaque
stringData:
password: postgres123
2-4) API Deployment에 env를 추가하는 패치 (Strategic Merge)
components/database/api-db-env-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
template:
spec:
containers:
- name: api
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-cred
key: password
3) overlay에서 Component 조립하기
overlay에서는 components: 필드로 component를 포함합니다. (Velog)
dev는 “database만”
k8s/overlays/dev/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
components:
- ../../components/database
premium은 “database + caching”
k8s/overlays/premium/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
components:
- ../../components/database
- ../../components/caching
standalone(self-hosted)는 “caching만”
k8s/overlays/standalone/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
components:
- ../../components/caching
적용/검증 커맨드
렌더링 결과 확인(적용 전 필수)
kubectl kustomize ./k8s/overlays/premium | less
실제 적용
kubectl apply -k ./k8s/overlays/premium
어떤 리소스가 추가되었는지 확인
kubectl get deploy
kubectl get secret
실무 팁 / 함정
- Component는 “옵션 기능 단위”로 작게 유지
캐시/DB/모니터링/로그 같은 “feature toggle”에 적합합니다. - 환경값(예: replicas, 도메인, 리소스 제한)은 overlay로
Component는 “기능 제공”에 집중하고, 환경별 값은 overlay 패치에서 조정하는 편이 깔끔합니다. - 여러 Component가 같은 필드를 동시에 수정하면 충돌 가능
(예: 같은 Deployment의 같은 env 키를 서로 다르게 패치)
→kubectl diff -k로 항상 확인. - GitOps 도구를 쓰면, Kustomize에 없는 컴포넌트를 무시하는 옵션이 필요한 경우가 있음
예: Argo CD는ignoreMissingComponents같은 옵션을 언급합니다. (Argo CD)
'CKA' 카테고리의 다른 글
| CKA 시험 대비 - Scheduling (0) | 2026.01.09 |
|---|---|
| Kustomize - 총 정리 (0) | 2026.01.08 |
| Kustomize - Overlays (0) | 2026.01.08 |
| Kustomize - Patch 심화(inline vs 파일분리, dictionary, list 조작) (0) | 2026.01.08 |
| Kustomize - Patch (0) | 2026.01.08 |