Helm - Charts

2026. 1. 7. 17:16·CKA

Helm은 CLI 사용 자체는 단순합니다.

  • 설치: helm install
  • 업그레이드: helm upgrade
  • 롤백: helm rollback
  • 삭제: helm uninstall

그런데 CLI에서 우리가 Helm에게 주는 정보는 사실 매우 적습니다. “이거 설치해”, “이걸 업그레이드해” 정도죠. 그럼 Helm은 어떻게 5~50개의 오브젝트 생성/수정/삭제를 알아서 수행할까요?

그 비밀이 바로 Helm Chart입니다.
Chart는 Helm에게 “무엇을, 어떤 순서/규칙으로, 어떤 값으로” 설치할지 알려주는 설명서(Instruction manual) 역할을 합니다.


1) Chart는 결국 “정해진 구조를 가진 텍스트 파일 묶음”

운영자 입장에서는 Chart가 그냥 파일 뭉치로 보이지만, Helm 입장에서는 각각의 파일/디렉토리가 정확히 정해진 목적을 가집니다.

대표적으로:

  • values.yaml : 사용자가 바꿀 수 있는 설정 값(입력값)
  • templates/ : 실제 Kubernetes 리소스를 생성하는 템플릿 파일
  • Chart.yaml : 차트 자체의 메타 정보(버전/이름/의존성 등)
  • charts/ : 의존 차트(서브차트)가 들어갈 수 있는 곳
  • README.md, LICENSE : 문서/라이선스(선택)

2) values.yaml + templates = “최종 YAML 매니페스트 생성기”

강의에서 나온 단순 예시는 Deployment + Service 두 개로 구성된 Hello World 앱입니다.
여기서 포인트는 “deployment.yaml 안의 image, replicas 등이 평범한 값이 아니라 템플릿 표현식으로 되어 있다”는 점입니다.

템플릿 예시(개념 형태)

# templates/deployment.yaml (개념 예시)
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
      - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

그리고 실제 값은 values.yaml에서 들어옵니다.

# values.yaml (개념 예시)
replicaCount: 2
image:
  repository: nginx
  tag: "1.27"

Helm은 install/upgrade 시점에:

  1. templates/*.yaml을 읽고
  2. values.yaml(또는 -f, --set로 전달된 값)을 주입해서
  3. 최종 Kubernetes 매니페스트(YAML)로 렌더링한 뒤
  4. Kubernetes API에 적용합니다.

실제로 “렌더링 결과”를 보고 싶으면:

helm template my-test ./my-chart -f values.yaml

운영에서 문제 생길 때 helm template로 “최종 결과물”을 미리 확인하는 습관이 매우 유용합니다.


3) Chart.yaml: 차트의 “신분증” (API 버전, 앱 버전, 차트 버전, 타입, 의존성)

Chart.yaml은 “이 차트가 무엇인지”를 정의하는 메타데이터 파일입니다.

아래는 강의에서 언급한 필드들을 한 번에 볼 수 있는 예시 Chart.yaml입니다(대표적인 형태).

apiVersion: v2                  # Helm 3용 차트 스펙 버전 (Helm 2는 보통 v1/미기재)
name: wordpress                 # 차트 이름
description: A Helm chart for WordPress
type: application               # application | library
version: 24.1.3                 # 차트 자체 버전(필수). appVersion과 독립
appVersion: "6.4.3"             # 앱(WordPress) 버전(정보 목적)

keywords:
  - wordpress
  - cms
  - blog

home: https://wordpress.org
icon: https://example.com/wordpress-icon.png

maintainers:
  - name: Example Maintainer
    email: maintainer@example.com

dependencies:
  - name: mariadb
    version: 12.3.1
    repository: https://charts.bitnami.com/bitnami
    condition: mariadb.enabled

(1) apiVersion: v1 vs v2 (차트 스펙 버전)

  • Helm 3용 차트: apiVersion: v2
  • Helm 2용 차트: 과거 차트는 apiVersion 필드가 없거나, 명시적으로 v1

주의 포인트:

  • Helm 2에서 apiVersion: v2 차트를 쓰면, Helm 2가 v2 전용 필드(예: dependencies, type)를 무시할 수 있어 예상치 못한 동작이 나올 수 있습니다.
  • 앞으로 차트를 만든다면 사실상 v2로 만드는 게 표준입니다.

(2) appVersion: “앱 버전”(정보 목적)

  • chart가 배포하는 “애플리케이션” 버전
  • 예: WordPress 차트라면 WordPress의 버전
  • 정보(Informational) 목적입니다.

(3) version: “차트 버전”(필수)

  • 차트 자체의 버전
  • appVersion과 독립적입니다.
  • 차트 템플릿/기본값/구성 변경 이력을 추적합니다.

(4) name / description

  • 차트 이름, 설명
  • 리포지토리/허브에서 검색할 때도 유용합니다.

(5) type: application vs library

  • application: 앱 배포용 차트(대부분 여기에 해당)
  • library: 다른 차트를 만들 때 재사용할 유틸리티/헬퍼 템플릿 제공용

(6) dependencies: 서브차트(의존 차트)

WordPress는 전형적인 2-tier 앱입니다.

  • WordPress 웹 서버
  • DB 서버(MariaDB 등)

DB를 직접 YAML로 다 박아넣지 않고, MariaDB 차트가 이미 있다면 의존성으로 가져올 수 있습니다.
이게 dependencies의 목적입니다.

장점:

  • DB 쪽 구성은 DB 차트가 책임지고,
  • WordPress 차트는 WordPress + “DB를 의존성으로 연결”만 하면 됨
  • 유지보수/업그레이드가 분리되어 깔끔해짐

4) Chart 디렉토리 구조 총정리

강의가 정리한 구조를 그대로 정리하면:

<chart-root>/
  templates/     # Kubernetes 리소스 템플릿
  values.yaml    # 설정(입력값) 기본값
  Chart.yaml     # 차트 메타데이터
  README.md      # 차트 사용법 문서(선택)
  LICENSE        # 라이선스(선택)
  charts/        # 의존 차트(서브차트) 위치(선택)

5) 운영자 관점에서 “Chart를 볼 때” 가장 중요한 체크리스트(추가 정리)

강의 내용 기반으로, 실제로 공개 차트를 가져다 쓸 때 최소한 이 정도는 확인하는 편이 안전합니다.

  1. values.yaml에서 무엇을 설정할 수 있는지 (helm show values)
  2. 템플릿이 어떤 리소스를 만들지 (helm template / helm get manifest)
  3. dependencies가 있으면 어떤 서브차트가 설치되는지
  4. 기본 Service 타입/Ingress 유무/Storage 설정(PV/PVC)
  5. Secret 생성 방식(자동 생성인지, 외부 Secret을 참조하는지)

6) 바로 써먹는 커맨드(차트 해부용)

# 차트 기본 정보 확인
helm show chart bitnami/wordpress

# values 기본값 확인
helm show values bitnami/wordpress > values.yaml

# 템플릿 렌더링 결과 확인(실제 적용 전 프리뷰)
helm template my-wp bitnami/wordpress -n blog -f values.yaml | less

'CKA' 카테고리의 다른 글

Helm - Customize Parameters  (0) 2026.01.07
Helm - CLI  (0) 2026.01.07
Helm - Components  (0) 2026.01.07
Helm - Helm 2 vs Helm 3  (0) 2026.01.07
Helm  (0) 2026.01.07
'CKA' 카테고리의 다른 글
  • Helm - Customize Parameters
  • Helm - CLI
  • Helm - Components
  • Helm - Helm 2 vs Helm 3
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)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

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

    • 최근 글

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

    티스토리툴바