Kubernetes에서는 다양한 애플리케이션을 배포할 때 Deployment, Service, ConfigMap, Secret 등의 리소스를 개별적으로 생성해야 합니다.
이 과정이 복잡해질수록 배포 자동화 및 버전 관리를 위한 도구가 필요하게 됩니다.
이를 위해 Kubernetes에서는 Helm을 사용하여 패키지를 관리할 수 있습니다.
이번 글에서는 Helm의 개념, 주요 기능, 그리고 실전 활용법을 정리하겠습니다.
🔹 Helm이란?
Helm은 Kubernetes 애플리케이션을 패키지화하여 쉽게 배포하고 관리할 수 있도록 하는 패키지 매니저입니다.
✔️ YAML 파일을 템플릿화하여 쉽게 재사용 가능
✔️ 애플리케이션 배포, 업데이트, 롤백을 자동화
✔️ Helm Chart를 이용하여 애플리케이션을 일관된 방식으로 관리
💡 Helm을 사용하면 Kubernetes 애플리케이션을 더 쉽고 체계적으로 배포할 수 있습니다.
🔹 Helm 주요 개념
개념 설명
Chart | Kubernetes 애플리케이션을 정의하는 Helm 패키지 |
Release | Helm Chart를 배포한 인스턴스 |
Repository | Helm Chart를 저장하고 공유하는 저장소 |
Values | Helm Chart에서 사용할 설정 값 (사용자가 변경 가능) |
💡 Helm Chart는 values.yaml을 사용하여 설정을 유동적으로 변경할 수 있습니다.
🔹 Helm 설치
Helm은 패키지 매니저이므로 먼저 설치해야 합니다.
MacOS (Homebrew)
brew install helm
Linux (스크립트 설치)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Windows (Chocolatey)
choco install kubernetes-helm
💡 설치가 완료되면 다음 명령어로 Helm 버전을 확인합니다.
helm version
🔹 Helm 기본 사용법
1️⃣ Helm Repository 추가
Helm Chart를 다운로드하려면 저장소(Repository)를 추가해야 합니다.
helm repo add stable https://charts.helm.sh/stable
helm repo update
💡 이제 stable 저장소에서 Helm Chart를 검색할 수 있습니다.
2️⃣ Helm Chart 검색
사용 가능한 Helm Chart를 검색하려면 다음 명령어를 사용합니다.
helm search repo nginx
출력 예시:
NAME CHART VERSION APP VERSION DESCRIPTION
stable/nginx 1.2.3 1.21.0 A high performance web server
💡 Helm Chart의 이름과 버전을 확인할 수 있습니다.
3️⃣ Helm Chart 설치
예를 들어, Nginx를 배포하려면 다음과 같이 실행합니다.
helm install my-nginx stable/nginx
출력 예시:
NAME: my-nginx
LAST DEPLOYED: Tue Mar 5 12:00:00 2025
NAMESPACE: default
STATUS: deployed
💡 이제 my-nginx라는 이름으로 Nginx가 배포되었습니다.
4️⃣ 배포된 Helm Release 확인
helm list
출력 예시:
NAME NAMESPACE REVISION STATUS CHART APP VERSION
my-nginx default 1 deployed nginx-1.2.3 1.21.0
💡 배포된 Helm Chart의 상태를 확인할 수 있습니다.
5️⃣ Helm Chart 삭제
배포된 Helm Release를 삭제하려면 다음 명령어를 사용합니다.
helm uninstall my-nginx
출력 예시:
release "my-nginx" uninstalled
💡 Helm을 사용하면 Kubernetes 리소스를 쉽게 설치하고 제거할 수 있습니다.
🔹 Helm Chart 구조
Helm Chart는 여러 개의 YAML 파일로 구성됩니다.
my-chart/
│── Chart.yaml # Chart의 메타데이터 (이름, 버전, 설명 등)
│── values.yaml # 사용자가 변경할 수 있는 기본 설정 값
│── templates/ # Kubernetes 매니페스트 템플릿
│ ├── deployment.yaml
│ ├── service.yaml
│ └── ingress.yaml
💡 Helm은 values.yaml을 기반으로 템플릿을 생성하여 Kubernetes에 배포합니다.
🔹 Helm Chart 만들기
새로운 Helm Chart를 생성하려면 다음 명령어를 사용합니다.
helm create my-chart
이제 my-chart/templates/deployment.yaml을 수정하여 커스텀 애플리케이션을 배포할 수 있습니다.
1️⃣ Deployment 템플릿 (templates/deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-app
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}-app
template:
metadata:
labels:
app: {{ .Release.Name }}-app
spec:
containers:
- name: app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 80
💡 values.yaml의 값을 기반으로 동적으로 설정됩니다.
2️⃣ values.yaml
replicaCount: 2
image:
repository: nginx
tag: latest
💡 replicaCount 값을 변경하면 Deployment의 Pod 개수가 조정됩니다.
3️⃣ Helm Chart 설치
새로운 Helm Chart를 배포하려면 다음 명령어를 실행합니다.
helm install my-app ./my-chart
💡 이제 커스텀 애플리케이션이 Kubernetes에 배포됩니다.
🔹 Helm Chart 업그레이드 및 롤백
Helm을 사용하면 배포된 애플리케이션을 손쉽게 업그레이드하거나 롤백할 수 있습니다.
1️⃣ 배포된 Helm Chart 업그레이드
helm upgrade my-app ./my-chart
💡 새로운 설정으로 애플리케이션이 업데이트됩니다.
2️⃣ 배포된 Helm Chart 롤백
helm rollback my-app 1
💡 이전 버전으로 애플리케이션을 되돌릴 수 있습니다.
🔹 Helm vs Kubernetes 매니페스트 직접 배포
기능 Helm kubectl apply
배포 자동화 | ✅ 지원 | ❌ 직접 YAML 관리 |
템플릿화 | ✅ 가능 (values.yaml 사용) | ❌ 수동 설정 필요 |
버전 관리 | ✅ Helm Release로 관리 | ❌ 직접 롤백해야 함 |
애플리케이션 공유 | ✅ Helm Chart Repository | ❌ 직접 YAML 공유 |
💡 Helm을 사용하면 배포 및 버전 관리를 더욱 쉽게 할 수 있습니다.
🚀 마무리
✔️ Helm은 Kubernetes 애플리케이션을 쉽게 배포하고 관리할 수 있도록 하는 패키지 매니저
✔️ Helm Chart를 사용하면 YAML 파일을 템플릿화하여 재사용 가능
✔️ 설정값을 values.yaml에서 쉽게 조정 가능
✔️ Helm을 사용하면 배포, 업그레이드, 롤백을 자동화할 수 있음
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [Pod 심화편 #2] Pod의 리소스 관리와 OOM(Out of Memory) 문제 해결 (0) | 2025.03.12 |
---|---|
📌 [Pod 심화편 #1] Pod의 생성과 스케줄링 원리 (0) | 2025.03.12 |
Kubernetes 리소스 시리즈 #17: Operator (확장 및 기타 리소스) (0) | 2025.03.05 |
Kubernetes 리소스 시리즈 #16: CustomResourceDefinition(CRD) (확장 및 기타 리소스) (0) | 2025.03.05 |
Kubernetes 리소스 시리즈 #15: Cluster Autoscaler & Metrics Server (오토스케일링 및 모니터링 리소스) (0) | 2025.03.05 |