Kubernetes의 Helm: 패키지 관리 및 배포 자동화


1. Helm이란?

Helm은 Kubernetes에서 애플리케이션을 쉽게 배포하고 관리할 수 있도록 도와주는 패키지 관리자이다.
Kubernetes에서 복잡한 애플리케이션을 배포할 때, 여러 개의 YAML 파일을 관리하는 것이 번거로움 → 이를 해결하기 위해 Helm을 사용!

💡 Helm을 사용하면?

  • 애플리케이션을 패키지화(Chart) 하여 손쉽게 배포 가능
  • 복잡한 Kubernetes 리소스를 템플릿화하여 코드 중복 제거
  • 애플리케이션 설정을 버전별로 관리 가능
  • 배포, 롤백, 업데이트를 자동화

2. Helm의 주요 개념

개념설명
Chart애플리케이션 패키지 (Kubernetes 매니페스트 + 설정 파일 포함)
ReleaseChart를 Kubernetes에 배포한 인스턴스
RepositoryChart를 저장하고 공유하는 공간
ValuesChart에 적용할 설정 값 (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)으로 환경을 쉽게 변경 가능
✅ 배포 롤백 및 버전 관리 기능으로 안정적인 운영이 가능

“Kubernetes의 Helm: 패키지 관리 및 배포 자동화”에 대한 1개의 생각

  1. 핑백: Kubernetes 종합 가이드: 개념, 배포, 보안, 자동화, 운영 전략까지 - Lohen Kim's Blog

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다