1. Helm이란?
Helm은 Kubernetes에서 애플리케이션을 쉽게 배포하고 관리할 수 있도록 도와주는 패키지 관리자이다.
Kubernetes에서 복잡한 애플리케이션을 배포할 때, 여러 개의 YAML 파일을 관리하는 것이 번거로움 → 이를 해결하기 위해 Helm을 사용!
💡 Helm을 사용하면?
- 애플리케이션을 패키지화(Chart) 하여 손쉽게 배포 가능
- 복잡한 Kubernetes 리소스를 템플릿화하여 코드 중복 제거
- 애플리케이션 설정을 버전별로 관리 가능
- 배포, 롤백, 업데이트를 자동화
2. Helm의 주요 개념
개념 | 설명 |
---|---|
Chart | 애플리케이션 패키지 (Kubernetes 매니페스트 + 설정 파일 포함) |
Release | Chart를 Kubernetes에 배포한 인스턴스 |
Repository | Chart를 저장하고 공유하는 공간 |
Values | Chart에 적용할 설정 값 (YAML 파일) |
Templates | 변수({{ .Values.key }} )를 사용하여 동적으로 YAML을 생성하는 파일 |
3. Helm 설치 및 기본 명령어
1) Helm 설치
MacOS
brew install helm
Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Windows
choco install kubernetes-helm
2) Helm 기본 명령어
helm repo add stable https://charts.helm.sh/stable # 리포지토리 추가
helm search repo nginx # Chart 검색
helm install my-release stable/nginx # Chart 설치
helm list # 설치된 릴리스 목록 확인
helm upgrade my-release stable/nginx # Chart 업그레이드
helm rollback my-release 1 # 이전 버전으로 롤백
helm uninstall my-release # 배포 삭제
4. Helm Chart 구조
Helm Chart는 애플리케이션을 패키지화한 디렉토리 구조로 구성됨.
my-chart/
├── charts/ # 의존성 차트 저장
├── templates/ # 템플릿 파일(YAML)
├── values.yaml # 기본 설정 파일
├── Chart.yaml # Chart 메타데이터
├── README.md # 설명서
5. Helm Chart 생성 및 배포
1) 새로운 Chart 생성
helm create my-chart
my-chart/
├── templates/ # Deployment, Service 등 YAML 템플릿
├── values.yaml # 사용자가 변경할 설정값
├── Chart.yaml # Chart 메타정보
2) values.yaml 수정
values.yaml에서 설정값을 변경할 수 있음.
replicaCount: 2
image:
repository: nginx
tag: latest
service:
type: ClusterIP
port: 80
3) Chart 배포
helm install my-app ./my-chart
📌 my-app
이라는 릴리스 이름으로 my-chart
를 배포
4) 배포된 릴리스 확인
helm list
6. Helm의 템플릿 엔진
Helm의 templates/
폴더에서는 YAML을 템플릿화하여 설정을 동적으로 적용할 수 있음.
1) 템플릿 예제
Deployment 템플릿 (templates/deployment.yaml
)
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
📌 {{ .Values.key }}
→ values.yaml
에서 설정된 값을 참조
📌 {{ .Release.Name }}
→ Helm 릴리스 이름이 자동으로 적용됨
7. Helm Chart Repository 관리
1) 리포지토리 추가 및 업데이트
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
2) Chart 검색
helm search repo nginx
8. Helm 릴리스 관리
1) 배포된 Chart 확인
helm list
2) Chart 업그레이드
helm upgrade my-app ./my-chart
3) 특정 버전으로 롤백
helm rollback my-app 1
9. Helm 활용 사례
✅ 마이크로서비스 배포
- 여러 서비스(Nginx, Redis, MySQL 등)를 한 번에 배포
values.yaml
을 변경하여 환경별로 쉽게 설정 조정
✅ GitOps & CI/CD 파이프라인
- GitHub Actions, ArgoCD, Flux와 결합하여 자동 배포
✅ Helm Operator & Kubernetes 오토스케일링
- Helm Operator를 사용하면 Helm Chart를 Kubernetes 리소스로 관리 가능
10. 결론
✅ Helm을 사용하면 Kubernetes 애플리케이션을 쉽게 배포, 업데이트, 관리 가능
✅ 템플릿 엔진을 활용하여 유연한 설정이 가능하고, 설정 값(values.yaml
)으로 환경을 쉽게 변경 가능
✅ 배포 롤백 및 버전 관리 기능으로 안정적인 운영이 가능