Helm 실무 스터디 가이드

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약

📅 2026.03 #k8s #package-manager #charts #devops

1. Helm이란?

Helm은 Kubernetes 패키지 매니저입니다. 복잡한 K8s 리소스(YAML)를 하나의 패키지(Chart)로 묶어 손쉽게 배포·업그레이드·롤백할 수 있게 해 줍니다. 마치 apt나 pip처럼 K8s 생태계에서 표준 패키징 도구로 자리 잡았습니다.

3대 핵심 능력

📦 패키징

Deployment, Service, ConfigMap 등을 하나의 Chart로 묶어 버전 관리. helm package로 재사용 가능한 아티팩트 생성.

🔄 배포 관리

helm install/upgrade/rollback으로 선언적 배포. 릴리스 히스토리를 자동 관리하여 문제 발생 시 즉시 복구.

🧩 템플릿 기반 설정

Go 템플릿 + Values 파일로 환경별(dev/staging/prod) 차이를 코드로 분리. 인프라의 DRY 원칙 실현.

2. 왜 써야 하는가?

K8s에 직접 YAML을 적용하는 방식(kubectl apply)에 비해 Helm이 주는 이점은 명확합니다. 아래 비교표를 확인하세요.

기능 Helm Kustomize kubectl apply
패키지 버전 관리 ✅ Chart 버전 + 릴리스 히스토리 ❌ Git 기반 간접 관리 ❌ 직접 관리 필요
표준 패키징 포맷 ✅ Chart (tgz 아카이브) ❌ 오버레이/패치 ❌ 없음
롤백 ✅ helm rollback (즉시) ⚠️ Git revert + 재적용 ⚠️ 수동 복구
환경별 설정 분리 ✅ Values 파일 + 템플릿 ✅ Overlay ❌ 수동
의존성 관리 ✅ Chart 의존성 (서브차트) ❌ 없음 ❌ 없음
💡 핵심 인사이트

팀 단위로 K8s 리소스를 공유하고, CI/CD 파이프라인에서 재현 가능한 배포를 원한다면 Helm이 가장 실용적인 선택입니다.

3. 핵심 개념

Helm을 이해하는 데 꼭 알아야 할 4가지 개념: Chart, Release, Repository, Values. 아래 다이어그램은 Helm의 동작 흐름을 한눈에 보여줍니다.

┌─────────────────────────────────────────────────────────────────┐ │ Helm Architecture │ │ │ │ 사용자 (helm CLI) │ │ │ │ │ ▼ │ │ ┌─────────────┐ ┌───────────────────┐ │ │ │ Helm Client │─────▶│ Chart (패키지) │ │ │ └─────────────┘ └────────┬──────────┘ │ │ │ │ │ │ │ ▼ │ │ │ ┌───────────────────────────────┐ │ │ │ │ Template (Go) + Values.yaml │ │ │ │ └───────────────┬───────────────┘ │ │ │ │ │ │ │ ▼ │ │ │ ┌───────────────────────────────┐ │ │ └───────▶│ Kubernetes API (렌더링) │ │ │ └───────────────┬───────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────────────────────┐ │ │ │ Release (실행된 인스턴스) │ │ │ │ - 이름: my-release │ │ │ │ - 리비전: 1, 2, 3 ... │ │ │ └───────────────────────────────┘ │ └───────────────────────────────────────────────────────────────┘
⚠️ 주의

Helm 2에서 사용하던 Tiller는 Helm 3에서 완전히 제거되었습니다. 클라이언트 전용 아키텍처로 보안과 단순성이 크게 개선되었습니다.

4. 퀵스타트

Helm을 설치하고 첫 번째 Chart를 배포해 봅니다. 예제는 Python 스크립트와 함께 Helm CLI를 사용하는 시나리오입니다.

4.1 설치

macOS (Homebrew):

brew install helm

Linux (스크립트):

curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

설치 확인:

helm version --short   # v3.17.2+ (예시)

4.2 Repository 추가 & Chart 검색

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo nginx

4.3 첫 번째 배포 (Python 예제 포함)

Python에서 Helm 명령어를 실행하는 예제:

import subprocess

def helm_install(release_name, chart, namespace="default", values=None):
    cmd = ["helm", "install", release_name, chart,
           "--namespace", namespace]
    if values:
        cmd.extend(["-f", values])
    result = subprocess.run(cmd, capture_output=True, text=True)
    print(result.stdout)
    if result.returncode != 0:
        print("Error:", result.stderr)

# 사용 예
helm_install("my-nginx", "bitnami/nginx",
             values="custom-values.yaml")

CLI로 직접 배포:

helm install my-nginx bitnami/nginx --namespace demo --create-namespace
helm list -n demo
helm upgrade my-nginx bitnami/nginx --set replicaCount=3
helm rollback my-nginx 1   # 이전 리비전으로 복구
✅ 완료

이제 http://localhost:8080 또는 Ingress를 통해 Nginx에 접근할 수 있습니다. helm get manifest my-nginx로 실제 렌더링된 YAML을 확인하세요.

5. 핵심 설정 레퍼런스

Helm Chart에서 자주 사용하는 Values 키와 기본값 예시입니다. 실제 Chart마다 다를 수 있으므로 helm show values로 확인하세요.

키 설명 기본값 예시
replicaCount 파드 복제본 수 1
image.repository 컨테이너 이미지 주소 nginx
image.tag 이미지 태그 latest
image.pullPolicy 이미지 풀 정책 IfNotPresent
service.type 서비스 타입 ClusterIP
service.port 서비스 포트 80
ingress.enabled Ingress 활성화 여부 false
resources.limits.cpu CPU 최대 제한 500m
persistence.enabled 볼륨 영속성 false

커스텀 Values 파일 예제 (prod-values.yaml):

replicaCount: 3
image:
  tag: "1.25.3"
service:
  type: LoadBalancer
ingress:
  enabled: true
  hostname: myapp.example.com

6. 실무 팁 & 트러블슈팅

자주 겪는 문제와 해결책

문제 원인 해결책
helm install 실패: already exists 동일 이름의 릴리스가 이미 존재 helm uninstall <릴리스명> 또는 --name-template 사용
템플릿 에러: function "required" not defined Helm 2 스타일 템플릿 함수 미지원 Helm 3에서는 required를 fail로 대체하거나 required 함수를 올바르게 사용
릴리스 업그레이드가 적용 안 됨 Values 변경 없이 동일 Chart 리비전 재배포 --recreate-pods 플래그 또는 --reset-values 사용
네트워크 타임아웃: context deadline exceeded Chart 다운로드 지연 또는 방화벽 HELM_REPO_ATTEMPTS=3 환경변수 설정, 프록시 확인
🧠 실무 꿀팁

7. 참고 자료