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)으로 환경을 쉽게 변경 가능
배포 롤백 및 버전 관리 기능으로 안정적인 운영이 가능

댓글 달기

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