Helm – Kubernetes 패키지 매니저
이 포스트는 Kubernetes의 패키지 매니저와 같은 역할을 하는 Helm 이 무엇인지 알아보고, Helm의 기능과 구성 요소 및 설치 방법과 기본적으로 사용되는 명령어에 관해 설명합니다.
목차
1. Helm이란?
2. Helm 주요 기능
3. Helm 구성 요소
4. Helm 설치 방법
5. Helm 기본 명령어
6. 결론
1. Helm이란?
Helm은 Kubernetes에서 애플리케이션을 쉽고 효율적으로 배포할 수 있도록 도와주는 패키지 매니저입니다. Helm을 사용하면 복잡한 Kubernetes 매니페스트(yaml) 파일을 관리하고, 재사용 할 수 있는 패키지 형태로 배포할 수 있습니다. Helm은 Kubernetes의 “apt” 또는 “yum“과 유사한 역할을 하며, Helm 패키지를 “차트(Chart)”라고 부릅니다.
Helm을 사용할 시 다음과 같은 장점이 있습니다.
- 일관된 배포 관리: YAML 파일을 수작업으로 관리할 필요 없이, Helm Chart를 통해 한 번에 배포 가능
- 버전 관리: 애플리케이션의 버전별 배포 및 롤백 기능 제공
- 템플릿화된 설정: values.yaml을 활용해 환경별로 유연한 설정 적용 가능
- 반복적인 배포 자동화: 동일한 애플리케이션을 여러 환경에 쉽게 배포 가능
2. Helm 주요 기능
- 차트(Chart) 기반 패키지 관리
- Helm Chart는 Kubernetes 애플리케이션을 패키징하는 방식으로,
helm install명령어로 간편하게 배포 가능 - 공용 Chart 저장소에서 미리 만들어진 차트를 가져와 쉽게 사용할 수 있음
- Helm Chart는 Kubernetes 애플리케이션을 패키징하는 방식으로,
- 설정값 변경 지원
values.yaml파일 혹은--set옵션을 통해 설정 변경 가능- 배포 환경(개발, 스테이징, 프로덕션 등)에 따라 설정값을 다르게 적용 가능
helm upgrade -f values.yaml명령어로 설정값을 손쉽게 변경
- 버전 관리 및 롤백 기능
helm list로 현재 배포된 버전을 확인하고, 필요시helm rollback명령어로 이전 버전으로 복구 가능
- 의존성 관리 (
Chart.yaml)- 애플리케이션이 여러 개의 마이크로서비스로 구성된 경우, Helm을 이용해 다른 차트를 의존성으로 추가하고 함께 배포 가능
helm dependency update명령어를 통해 자동으로 종속 차트 다운로드
3. Helm 구성 요소
Helm 차트는 다음과 같은 주요 요소로 구성됩니다.
Chart.yaml
Helm 차트의 기본 정보를 정의하는 파일로, 차트의 이름, 버전, 설명 등의 메타데이터를 포함합니다.
apiVersion: v2
name: my-app
description: A Helm chart for deploying My App
type: application
version: 1.0.0
appVersion: 2.3.1
values.yaml
애플리케이션을 배포할 때 사용할 기본 설정값을 정의하는 파일입니다. 사용자 요구에 따라 커스텀 설정을 적용할 수 있습니다.
replicaCount: 3 # 파드 개수
image:
repository: my-app
tag: latest
service:
type: LoadBalancer
port: 80
templates/
Kubernetes 리소스를 정의하는 템플릿 파일이 들어 있는 디렉터리입니다. Helm의 템플릿 엔진을 사용하여 동적으로 매니페스트를 생성할 수 있습니다.
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-app
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: my-app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
4. Helm 설치 방법
Binary release
1. 원하는 버전을 다운로드합니다.
2. 다운받은 파일의 압축을 해제합니다.
$ tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
3. 압축을 해제한 디렉터리의 helm binary를 원하는 위치로 이동시킵니다.
$ mv linux-amd64/helm /usr/local/bin/helm
스크립트 설치
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
패키지 설치
Apt 설치:
$ curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
$ sudo apt-get install apt-transport-https --yes
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
$ sudo apt-get update
$ sudo apt-get install helm
dnf/yum 설치:
$ sudo dnf install helm
Window, Mac OS 환경의 설치 방법은 링크를 참고하세요.
설치가 완료되면 다음 명령어로 정상 설치 여부를 확인할 수 있습니다.
$ helm version
version.BuildInfo{Version:"v3.16.3", GitCommit:"cfd07493f46efc9debd9cc1b02a0961186df7fdf", GitTreeState:"clean", GoVersion:"go1.22.7"}
5. Helm 기본 명령어
Helm을 활용한 차트 관리의 기본적인 명령어는 다음과 같습니다.
저장소 추가 및 업데이트
다음 명령어를 사용하여 Helm 저장소를 추가할 수 있습니다.
$ helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
$ helm repo update
이후 다음 명령어를 사용하여 추가된 저장소를 확인할 수 있습니다.
$ helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami
nginx-stable https://helm.nginx.com/stable
open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
harbor https://helm.goharbor.io
다음 명령어를 사용하여 저장소 내부의 차트 목록을 확인할 수 있습니다. 차트 버전과 차트를 통해 구성되는 애플리케이션의 버전도 확인할 수 있습니다.
$ helm search repo nginx-stable
NAME CHART VERSION APP VERSION DESCRIPTION
nginx-stable/nginx-appprotect-dos-arbitrator 0.1.0 1.1.0 NGINX App Protect Dos arbitrator
nginx-stable/nginx-devportal 1.7.2 1.7.2 A Helm chart for deploying ACM Developer Portal
nginx-stable/nginx-ingress 2.0.1 4.0.1 NGINX Ingress Controller
nginx-stable/nginx-service-mesh 2.0.0 NGINX Service Mesh
nginx-stable/nms 1.16.0 NIM 2.19.0 A chart for installing the NGINX Management Suite
nginx-stable/nms-acm 1.9.3 1.9.3 A Helm chart for Kubernetes
nginx-stable/nms-adm 4.0.0 4.0.0 A Helm chart for ADM
nginx-stable/nms-hybrid 2.19.0 2.19.0 A Helm chart for Kubernetes
차트 설치 및 조회
다음 명령어를 사용하여 차트를 릴리즈로 클러스터에 배포할 수 있습니다.
- 릴리즈 이름 : k8s-harbor
- 저장소/차트 이름 : harbor/harbor
- 배포될 K8S 네임스페이스 : harbor
- 배포에 사용할 설정 파일 : values.yaml
$ helm install k8s-harbor harbor/harbor -n harbor -f values.yaml
NAME: k8s-harbor
LAST DEPLOYED: Thu Mar 6 00:15:22 2025
NAMESPACE: harbor
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
다음 명령어를 사용하여 현재 배포된 릴리즈를 확인할 수 있습니다.
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
k8s-harbor harbor 1 2025-03-06 00:15:22.64531992 +0000 UTC deployed harbor-1.16.0 2.12.0
차트 업그레이드 및 롤백
upgrade 명령어를 통해 차트를 업그레이드하면 revision 값이 올라가고, 해당 값을 기반으로 롤백을 할 수 있습니다.
$ helm upgrade k8s-harbor harbor/harbor
LAST DEPLOYED: Thu Mar 6 00:16:37 2025
NAMESPACE: harbor
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
$ helm rollback k8s-harbor 1
Rollback was a success! Happy Helming!
차트 삭제
$ helm delete k8s-harbor
release "k8s-harbor" uninstalled
6. 결론
Helm은 Kubernetes 애플리케이션을 손쉽게 배포하고 관리할 수 있도록 도와주는 필수 도구입니다. Helm을 사용하면 YAML 파일을 직접 수정하는 번거로움을 줄이고, 애플리케이션을 효율적으로 배포 및 유지 보수할 수 있습니다.
새로운 Kubernetes 클러스터 구축을 고려 중이신가요? NGINX STORE를 통해 문의해 Kubernetes 기술지원 서비스에 대해 알아보세요.