Helm 소개(Introduction to Helm)

Helm 소개(Introduction to Helm)

Helm은 Kubernetes의 패키지 매니저예요. 서로 상호작용하는 많은 부품을 가진 애플리케이션부터 단일 컨테이너까지, Kubernetes 클러스터에서 애플리케이션을 정의·설치·업그레이드하는 것을 도와줘요. 관련된 매니페스트(Deployment, Service, ConfigMap 등)를 하나의 단위로 묶어 관리하고 공유·설치·롤백할 수 있게 해주죠.

출처: https://helm.sh/docs/intro/introduction/

Kubernetes에 애플리케이션을 배포한다는 것은 많은 매니페스트를 작성하고 유지하는 일이에요. 이를 환경·버전별로 손으로 관리하는 건 반복적이고 오류가 쉽죠. Helm은 이런 관련 매니페스트를 차트(chart) 라는 단일 단위로 묶어서, 시스템 패키지 매니저(Homebrew, apt, yum)가 OS 소프트웨어를 다루는 것처럼 애플리케이션을 취급할 수 있게 해줘요.

Helm으로 할 수 있는 일은 이래요.

  • 애플리케이션 설치·관리 — 데이터베이스, 모니터링 스택, 인그레스 컨트롤러 같은 즉시 사용 가능한 앱을 매니페스트를 직접 조립하는 대신 차트에서 배포.
  • 자신의 앱 패키징·공유 — Kubernetes 리소스를 차트로 묶고 버전을 매겨 팀이나 커뮤니티에 배포.
  • 환경별 구성 — 매니페스트를 복제하지 않고 같은 차트에 다른 값(values)을 제공해 개발·스테이징·프로덕션에 배포.
  • 안전한 업그레이드·롤백 — 릴리스를 새 버전으로 이동하고, 업그레이드가 예상과 다르면 이전 리비전으로 복귀.
  • 의존성 관리 — 애플리케이션에 필요한 다른 차트를 선언하고 Helm이 함께 설치하게 함.

Helm 사용자는 여러 역할 중 하나를 수행하는데, 한 사람이 둘 이상의 역할을 맡을 수도 있어요. 애플리케이션 오퍼레이터, 애플리케이션 디스트리뷰터, 애플리케이션 개발자, 지원 도구 개발자 같은 역할이 있어요. Helm은 클러스터 자체보다는 클러스터 안에서 실행되는 애플리케이션에 집중해요. 클러스터를 세우고 운영하는 것은 클러스터 오퍼레이터의 일이고 Helm의 범위 밖이에요.

세 가지 구성 요소

Helm이 어떻게 동작하는지 설명하는 세 가지 핵심 개념이 있어요.

  • 차트(Chart) — Helm 패키지예요. Kubernetes 클러스터 안에서 애플리케이션·도구·서비스를 실행하는 데 필요한 모든 리소스 정의를 담아요. Kubernetes 버전의 Homebrew formula, apt dpkg, yum RPM이라고 생각하면 돼요.
  • 리포지토리(Repository) — 차트를 모아 두고 공유하는 곳이에요. Kubernetes 패키지용 CPAN 아카이브나 Fedora 패키지 데이터베이스 같은 역할이죠. 공개 차트는 Artifact Hub에서 찾을 수 있어요.
  • 릴리스(Release) — Kubernetes 클러스터에서 실행 중인 차트의 인스턴스예요. 같은 차트를 같은 클러스터에 여러 번 설치할 수 있고, 각 설치가 고유한 릴리스 이름을 가진 새 릴리스를 만들어요. 예를 들어 MySQL 차트를 두 번 설치하면 각 설치가 별도 릴리스로 추적돼요.

릴리스를 만들려면 Helm이 패키징된 차트와 설정(보통 values.yaml 파일)을 병합해요.

구현

Helm은 로컬 머신에서 실행되고 Kubernetes API 서버와 통신하는 명령줄 도구예요. 두 부분으로 나뉘어요.

  • Helm 클라이언트 — 최종 사용자용 명령줄 도구. 로컬 차트 개발, 리포지토리·릴리스 관리, Helm 라이브러리에 차트 전송을 담당해요.
  • Helm 라이브러리 — 모든 Helm 작업의 로직을 제공해요. Kubernetes API 서버와 상호작용하며 릴리스를 만들고 차트를 설치·업그레이드·언인스톨해요. 독립적이라 다른 클라이언트도 같은 로직을 재사용할 수 있어요.

Helm 클라이언트와 라이브러리는 Go 언어로 작성됐고, 라이브러리는 Kubernetes 클라이언트 라이브러리로 REST+JSON으로 통신해요. 릴리스 정보는 클러스터 안의 Kubernetes Secrets에 저장하므로 자체 데이터베이스가 필요 없어요. 설정 파일은 가능하면 YAML로 작성돼요.

더 알아보기