Kustomize - Components

2026. 1. 8. 15:58·CKA

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

실무 팁 / 함정

  1. Component는 “옵션 기능 단위”로 작게 유지
    캐시/DB/모니터링/로그 같은 “feature toggle”에 적합합니다.
  2. 환경값(예: replicas, 도메인, 리소스 제한)은 overlay로
    Component는 “기능 제공”에 집중하고, 환경별 값은 overlay 패치에서 조정하는 편이 깔끔합니다.
  3. 여러 Component가 같은 필드를 동시에 수정하면 충돌 가능
    (예: 같은 Deployment의 같은 env 키를 서로 다르게 패치)
    → kubectl diff -k로 항상 확인.
  4. GitOps 도구를 쓰면, Kustomize에 없는 컴포넌트를 무시하는 옵션이 필요한 경우가 있음
    예: Argo CD는 ignoreMissingComponents 같은 옵션을 언급합니다. (Argo CD)

 

 

Access the lab here: https://learn.kodekloud.com/user/courses/udemy-labs-certified-kubernetes-administrator-with-practice-tests/module/f868dfbe-80b2-44cf-97e7-d00fc0d91307/lesson/66fefe64-87fd-4d25-a46f-c66dce62def7

'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
'CKA' 카테고리의 다른 글
  • CKA 시험 대비 - Scheduling
  • Kustomize - 총 정리
  • Kustomize - Overlays
  • Kustomize - Patch 심화(inline vs 파일분리, dictionary, list 조작)
5jyan5
5jyan5
  • 5jyan5
    jyan
    5jyan5
  • 전체
    오늘
    어제
    • 분류 전체보기 (242)
      • 김영한의 스프링 핵심 원리(기본편) (8)
      • 김영한의 스프링 핵심 원리 - 고급편 (11)
      • 김영한의 스프링 MVC 1편 (1)
      • 김영한의 스프링 DB 1편 (3)
      • 김영한의 스프링 MVC 2편 (3)
      • 김영한의 ORM 표준 JPA 프로그래밍(기본편) (9)
      • 김영한의 스프링 부트와 JPA 활용2 (2)
      • 김영한의 실전 자바 - 중급 1편 (1)
      • 김영한의 실전 자바 - 고급 1편 (9)
      • 김영한의 실전 자바 - 고급 2편 (9)
      • Readable Code: 읽기 좋은 코드를 작성.. (2)
      • 김영한의 실전 자바 - 고급 3편 (9)
      • CKA (118)
      • 개발 (37)
      • 경제 (4)
      • 리뷰 (1)
      • 정보 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      @discriminatorvalue
      requset scope
      양방향 맵핑
      김영한
      WAS
      락
      JPQL
      스레드
      Target
      typequery
      jpq
      빈 후처리기
      hibernate5module
      단방향 맵핑
      조회 성능 최적화
      프록시
      @discriminatorcolumn
      프록시 팩토리
      jdk 동적 프록시
      자바
      reentarantlock
      gesingleresult
      Thread
      @args
      페치 조인
      고급
      cglib
      log trace
      @within
      버퍼
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    5jyan5
    Kustomize - Components
    상단으로

    티스토리툴바