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 주요 기능

  1. 차트(Chart) 기반 패키지 관리
    • Helm Chart는 Kubernetes 애플리케이션을 패키징하는 방식으로, helm install 명령어로 간편하게 배포 가능
    • 공용 Chart 저장소에서 미리 만들어진 차트를 가져와 쉽게 사용할 수 있음
  2. 설정값 변경 지원
    • values.yaml 파일 혹은 --set 옵션을 통해 설정 변경 가능
    • 배포 환경(개발, 스테이징, 프로덕션 등)에 따라 설정값을 다르게 적용 가능
    • helm upgrade -f values.yaml 명령어로 설정값을 손쉽게 변경
  3. 버전 관리 및 롤백 기능
    • helm list로 현재 배포된 버전을 확인하고, 필요시 helm rollback 명령어로 이전 버전으로 복구 가능
  4. 의존성 관리 (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 기술지원 서비스에 대해 알아보세요.

    NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

    * indicates required