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 시점에:
templates/*.yaml을 읽고values.yaml(또는-f,--set로 전달된 값)을 주입해서- 최종 Kubernetes 매니페스트(YAML)로 렌더링한 뒤
- 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를 볼 때” 가장 중요한 체크리스트(추가 정리)
강의 내용 기반으로, 실제로 공개 차트를 가져다 쓸 때 최소한 이 정도는 확인하는 편이 안전합니다.
values.yaml에서 무엇을 설정할 수 있는지 (helm show values)- 템플릿이 어떤 리소스를 만들지 (
helm template/helm get manifest) dependencies가 있으면 어떤 서브차트가 설치되는지- 기본 Service 타입/Ingress 유무/Storage 설정(PV/PVC)
- 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 |