Kustomize - Overlays

2026. 1. 8. 15:49·CKA

Kustomize의 핵심 유스케이스는 결국 하나입니다.

  • 공통/기본 매니페스트는 base에 둔다
  • 환경별로 달라지는 부분만 overlays에서 패치/변환으로 덮어쓴다
  • 배포 시에는 kubectl apply -k overlays/<env> 한 줄로 끝낸다

이 구조가 “매니페스트 복붙 지옥”을 끝내기 위해 Kustomize가 만들어진 이유이기도 합니다.


1) 기본 폴더 구조

가장 흔한 형태는 아래처럼 base + overlays로 나뉩니다.

k8s/
  base/
    nginx-depl.yaml
    kustomization.yaml
  overlays/
    dev/
      kustomization.yaml
      (patch files...)
    staging/
      kustomization.yaml
      (patch files...)
    prod/
      kustomization.yaml
      (patch files...)
  • base/: 모든 환경에 공통으로 들어갈 리소스(또는 기본값)
  • overlays/<env>/: 해당 환경에만 적용되는 변경(패치, transformers, 추가 리소스)

2) base의 kustomization.yaml

base는 “그냥 리소스 목록”을 선언하는 게 기본입니다.

k8s/base/kustomization.yaml

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

resources:
  - nginx-depl.yaml

k8s/base/nginx-depl.yaml 예시(기본값)

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

3) overlay의 핵심: base를 가져오고(pull), 패치로 바꾼다

강의에서는 overlay의 kustomization.yaml에서 bases를 사용했습니다.
요즘은 resources로 base 디렉터리를 참조하는 형태가 더 일반적입니다(동작 개념은 동일).

dev overlay 예시(복제 없이 replicas만 변경)

k8s/overlays/dev/kustomization.yaml

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

resources:
  - ../../base

patchesStrategicMerge:
  - replicas.yaml

k8s/overlays/dev/replicas.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2

prod overlay 예시(replicas를 3으로)

k8s/overlays/prod/kustomization.yaml

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

resources:
  - ../../base

patchesStrategicMerge:
  - replicas.yaml

k8s/overlays/prod/replicas.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3

여기까지가 overlay의 본질입니다.

  • base는 그대로 재사용
  • 환경별로 달라지는 값만 patch로 오버라이드

4) 배포/삭제는 환경 디렉터리를 -k로 지정하면 끝

dev 적용

kubectl apply -k ./k8s/overlays/dev

prod 적용

kubectl apply -k ./k8s/overlays/prod

삭제도 동일

kubectl delete -k ./k8s/overlays/dev

5) overlays는 “패치만”이 아니라 “추가 리소스도” 가능

강의에서 강조한 포인트:
overlay는 base를 수정하는 것뿐 아니라 해당 환경에만 존재하는 리소스도 포함할 수 있습니다.

예를 들어 prod에서만 Grafana를 띄우고 싶다면:

k8s/overlays/prod/
  kustomization.yaml
  replicas.yaml
  grafana-depl.yaml

k8s/overlays/prod/kustomization.yaml

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

resources:
  - ../../base
  - grafana-depl.yaml

patchesStrategicMerge:
  - replicas.yaml

이렇게 하면:

  • 모든 환경 공통 nginx는 base에서 가져오고
  • prod에서만 grafana가 추가됩니다.

6) 디렉터리 구조는 강제되지 않는다(유연성)

반드시 base/에 모든 걸 “평면으로” 몰아넣을 필요가 없습니다.

예:

base/
  api/
  db/
  cache/
  kustomization.yaml

그리고 base의 kustomization.yaml에서 디렉터리 단위로 import하면 됩니다(각 디렉터리에 kustomization.yaml이 있다면 더 깔끔).

overlay도 마찬가지로:

  • dev는 단순
  • prod는 여러 컴포넌트 + 추가 리소스
    처럼 환경별로 구조가 달라도 됩니다.

중요한 건 “import 경로가 올바르게 연결되느냐”입니다.


정리

  • Overlays = base 재사용 + 환경별 패치
  • overlays/<env>/kustomization.yaml에서 ../../base를 참조하고, 패치를 붙인다
  • overlay는 패치뿐 아니라 환경 전용 리소스도 추가할 수 있다
  • 적용은 kubectl apply -k overlays/<env>로 한 줄

 

 

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/a2d3ef06-b264-41a2-8e13-2ec409afabfe

'CKA' 카테고리의 다른 글

Kustomize - 총 정리  (0) 2026.01.08
Kustomize - Components  (0) 2026.01.08
Kustomize - Patch 심화(inline vs 파일분리, dictionary, list 조작)  (0) 2026.01.08
Kustomize - Patch  (0) 2026.01.08
Kustomize - Transformers  (0) 2026.01.08
'CKA' 카테고리의 다른 글
  • Kustomize - 총 정리
  • Kustomize - Components
  • Kustomize - Patch 심화(inline vs 파일분리, dictionary, list 조작)
  • Kustomize - Patch
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)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

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

    티스토리툴바