Helm 개요

Helm이란?

Kubernetes 클러스터에서 실행되는 응용 프로그램에서 배포에 “Helm"이라는 도구를 활용된다. Helm은 설정 파일을 바탕으로 어플리케이션의 배포를 자동 실행하는 도구로 Kubernetes 어플리케이션 패키지 관리자(package manger)라고 한다.

Helm 패키지와 차트

Helm은 charts라는 packaging format을 사용한다. 패키지는 Helm chart를 패키지를 하는 것이고, 차트는 쿠버네티스의 리소스 yaml 파일을 템플릿으로 만들고, 메타 정보 파일 등을 압축하는 파일을 말한다.

  • 여기서 chart는 k8s resources를 describe하는 file들의 집합이다.
  • chart는 무언가를 배포하기 위해 사용된다.
    • ex) memcached pod, web app w/ HTTP servers, databases, etc.
  • chart는 특정 directory tree로 구성된 file들로 생성되어 있다.
    • 이 file들은 배포될 version의 archive로 packaging 될 수 있다.

Kubernetes에 응용 프로그램을 배포하기 위한 사실상 표준 도구인 “Helm”

최근에는 컨테이너 클러스터 기술인 Kubernetes를 활용한 서비스의 운용이 늘어나고 있으며, Kubernetes에서 동작하는 것을 전제로 하는 소프트웨어도 등장하고 있다. 한편, Kubernetes에서의 어플리케이션의 배치에 대해서는 과제도 많다.

Kubernetes는 서비스를 여러 소규모 컴포넌트로 분할하여 구현하는 마이크로서비스 아키텍처와 궁합이 좋다. 이러한 구성의 서비스에서는 각 컨포넌트를 개별적으로 클러스터에 배포해야 한다. 또, 서비스를 외부에 공개해야 하거나, 각종 설정을 하기 위해서 Kubernetes 클러스터에 “리소스"를 작성하여 설정을 실행해야 한다. 이러한 작업은 때로는 복잡해지기 때문에 Kubernetes 클러스터에서 배포를 지원하거나 배포된 컨테이너를 관리하기 위한 다양한 도구가 등장하고 있다.

이번에 소개하려는 Helm은 그러한 Kubernetes 클러스터에의 어플리케이션의 배포를 지원하는 툴 중에 하나이다 (그림 1).

Helm 공식 웹사이트 그림1. Helm 공식 웹사이트

최근의 OS나 프로그래밍 언어의 대부분에서는 제3자(Third-party)로 인해 만들어진 소프트웨어(패키지) 모와서 공개하는 서비스(리포지토리)가 제공되고 있고, 거기에 공개되고 있는 소프트웨어의 검색이나 다운로드, 인스톨 등을 간단한 조작으로 할 수 있는 “패키지 매니저"라고 하는 소프트웨어가 제공되어 있다. Helm은 Kubernetes용 패키지 매니저라고도 불리며, OS나 프로그래밍 언어의 패키지 매니저와 유사한 기능을 갖추고 있다. Helm이 제공하는 구체적인 기능을 간단히 정리하면 다음과 같다.

  • Chart라고 하는 설정 파일을 기반으로 다양한 리소스 자동 생성
  • 배포된 애플리케이션 삭제 및 업데이트와 같은 관리
  • 리포지토리에 게시된 Chart 찾기, 다운로드 및 설치
  • Chart 패키징 및 리포지토리에 업로드

Kubernetes의 베이스가 되고 있는 컨테이너 기술의 Docker에서는 이미 컨테이너 이미지를 제공하는 리포지토리 메카니즘이 이미 준비되어 있다. 그래서 Helm에서는 이미지 자체는 직접 다루지 않고, “Chart(차트)“라고 하는 설정 파일만을 리포지토리로 관리하는 구조로 되고 있다. 그 점을 제외하면 Helm에서 제공하는 기능은 일반적인 패키지 관리자가 제공하는 기능과 거의 동일하며, helm이라는 CLI 도구를 사용하여 Chart를 다운로드하거나, 이를 기반으로 클러스터에 자동으로 응용 프로그램을 배포할 수 있다.

또, Helm에서는 “stable"나 “incubator"라고 하는 명칭의 공식 리포지토리가 제공되고 있는 것 외에, 써드 파티에 의한 리포지토리도 많이 제공되고 있다. 이러한 리포지토리에 공개된 Chart는 Arfifact Hub라는 사이트에서 통해서 검색할 수 있게 되어 있다(그림 2).

Helm의 공식 저장소 “Arfifact Hub” 그림2. Helm의 공식 저장소 “Arfifact Hub”

Helm의 역사와 커뮤니티

Helm은 2016년 2월에 v1.0이 릴리스되어, 현재까지 2번의 메이저 업데이트가 진행되고 있다. 최신판은 2022년 8월에 발매된 v3.9.4이다.

  • Helm v1
    • 2015년 DEIS의 내부 프로젝트로 시작
      • 2017년 DEIS는 Microsoft에 인수
  • Helm v2
    • 2016년 1월 : Google 프로젝트에 합류
    • 2016 ~ 2018년 : Helm2 고도화(2.0.0 ~ 2.12.2)
    • 2018년 6월 : CNCF 프로젝트에 합류
  • Helm v3
    • 2019년 11월 : 릴리즈 발표
    • 2019년 ~ 2021년 : Helm3 고도화(3.0.0 ~3.5.2)

예당초 Kubernetes의 서브 프로젝트로서 개발이 진행되고 있었지만, 그 후 Linux Foundation 산하의 비영리 단체인 Cloud Native Computing Foundation(CNCF) 산하가 되어, 현재도 그 체제로 개발이 진행되고 있다. CNCF는 클라우드 관련 기술 개발을 추진하는 단체로 Kubernetes 자체도 CNCF 산하에서 개발이 진행되고 있다. 이러한 역사적 배경 때문에 Helm은 Kubernetes의 (사실상) 공식 패키지 매니저라고도 알려져 있다.

Helm 프로젝트 자신이 제공하는 “stable"이나 “incubator” 등의 공식 리포지토리에서는 이미 다양한 어플리케이션의 Chart가 공개되고 있으며, 유지에 의해 작성된 Chart도 많이 공개되고 있다. 또, 이전에 소개한 Kubernetes 관련 툴의 Istio 나 Jenkins X 라고 하는 소프트웨어에서도, Helm이 공식의 설치 도구으로서 채택되어 사용되고 있다.

덧붙여, helm은 선박 등에서 사용되는 배의 키를 의미하는 단어이다. 또, chart는 향해용 지도에서 유래하고 있다.