쿠버네티스에 앱 하나를 올리려면 Deployment, Service, ConfigMap 같은 YAML을 여러 개 kubectl apply 해야 합니다. 환경마다 이미지 태그나 레플리카 수가 다르면 파일을 복사해 손으로 고치게 되고, 곧 관리가 엉킵니다. Helm은 이 여러 YAML을 하나의 패키지로 묶고, 바뀌는 값만 따로 빼서 관리하게 해 주는 도구입니다. 그래서 "쿠버네티스의 패키지 매니저"라고 부릅니다.
Helm의 네 가지 구성요소
Helm을 이해하는 핵심은 차트·템플릿·values·릴리스 네 가지입니다.
| 구성요소 | 정체 | 역할 |
|---|---|---|
| 차트(Chart) | 패키지 묶음 | 앱 하나를 배포하는 YAML 템플릿 모음 |
| 템플릿(Template) | 변수가 들어간 YAML | {{ .Values.image }} 같은 자리표시자 포함 |
| values.yaml | 설정 값 | 이미지 태그, 레플리카 등 바뀌는 값 |
| 릴리스(Release) | 설치 인스턴스 | 클러스터에 실제로 배포된 차트의 한 번 |
차트는 templates/에 변수가 박힌 YAML을 담고, values.yaml에 그 변수의 기본값을 둡니다. helm install을 하면 둘을 합쳐 최종 YAML을 만들어 클러스터에 적용하고, 그 결과를 릴리스라는 이름으로 추적합니다.
values로 환경을 분리한다
같은 차트로 개발과 운영을 배포하되, 값만 다르게 주는 것이 Helm의 핵심 패턴입니다.
YAML
# values-prod.yaml
replicaCount: 3
image:
tag: "1.4.2"
로컬 터미널
helm install myapp ./mychart -f values-prod.yaml
helm upgrade myapp ./mychart -f values-prod.yaml --set replicaCount=5
--set으로 한 값만 즉석에서 덮어쓸 수도 있습니다. 템플릿은 그대로 두고 값만 바꾸므로, 환경별로 YAML을 복제할 필요가 없습니다.
릴리스와 롤백
Helm은 설치·업그레이드할 때마다 리비전을 기록합니다. 그래서 문제가 생기면 이전 상태로 되돌릴 수 있습니다.
로컬 터미널
helm list
helm history myapp
helm rollback myapp 1
helm rollback myapp 1은 1번 리비전 상태로 클러스터를 되돌립니다. 어떤 YAML이 적용됐는지 손으로 추적하지 않아도 되는 점이 큰 장점입니다.
요점 정리
- Helm은 여러 쿠버네티스 YAML을 하나의 차트로 묶는 패키지 매니저다.
- 템플릿에 변수를 두고
values.yaml로 환경별 값을 분리한다. helm install은 템플릿과 값을 합쳐 릴리스로 배포한다.- 릴리스는 리비전으로 기록되어
helm rollback으로 되돌릴 수 있다.
차트를 직접 만들고 values로 환경을 나눠 배포하는 실습은 쿠버네티스 트랙에서 할 수 있습니다 — 회원가입 없이 무료로.