Unisquads
로그인
홈
이용약관·개인정보처리방침·콘텐츠정책·© 2026 Unisquads
이용약관·개인정보처리방침·콘텐츠정책
© 2026 Unisquads. All rights reserved.

HELM (r1)

이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.14 23:11

HELM

이름

HELM

전체 명칭

Hierarchical Editing Language for Macromolecules

분류

생물정보학 기술, 화학정보학 기술

개발 목적

대분자 (단백질, 핵산, 다당류 등)의 구조를 표준화된 방식으로 표현, 편집, 저장

주요 특징

계층적 구조, 인간 및 기계가 읽을 수 있는 텍스트 형식

주요 응용 분야

단백질 공학, 신약 개발, 합성 생물학

기술 상세 정보

개발 주체

Pistoia Alliance의 HELM 프로젝트 팀

표현 방식

단량체, 연결, 화학적 변형을 HELM 표기법으로 표현

파일 확장자

.helm

관련 소프트웨어/도구

HELM 편집기, HELM 모니터, OpenHELM 라이브러리

표준화 기구

대안/관련 기술

SMILES, InChI, FASTA (단순 서열), PDB 파일 (3차원 구조)

장점

복잡한 대분자 및 접합체 정확 표현, 지적 재산권 보호, 데이터 교환 용이

단점

학습 곡선 존재, 특화된 도구 필요

주요 사용처

제약사, 생명공학 연구소, 학술 기관

최초 발표 시기

2012년경

최신 버전

라이선스

오픈 표준 (구체적 라이선스는 버전에 따라 다름)

1. 개요

HELM은 쿠버네티스 애플리케이션을 정의, 설치, 업그레이드하는 프로세스를 관리하기 위한 패키지 관리자이다. 소프트웨어를 쉽게 배포하고 관리할 수 있도록 해주는 도구로, 리눅스 시스템의 apt나 yum과 유사한 역할을 쿠버네티스 생태계에서 수행한다. 복잡한 쿠버네티스 리소스 매니페스트 파일들을 하나의 패키지로 묶어 배포, 버전 관리, 공유를 가능하게 한다.

HELM은 주로 두 가지 핵심 요소로 구성된다. 첫 번째는 HELM 클라이언트로, 사용자가 명령을 실행하는 CLI 도구이다. 두 번째는 Tiller (HELM 2) 또는 HELM 라이브러리 (HELM 3)로, 쿠버네티스 클러스터 내에서 실제 배포 작업을 처리하는 서버 측 구성 요소이다. HELM 3에서는 아키텍처가 단순화되어 Tiller가 제거되고 클라이언트가 직접 쿠버네티스 API와 상호작용한다.

이 도구는 애플리케이션을 차트(Chart)라는 패키지 형식으로 관리한다. 하나의 차트는 특정 서비스나 애플리케이션을 실행하는 데 필요한 모든 쿠버네티스 리소스 정의와 설정값을 포함한다. 사용자는 공개 또는 사설 리포지토리(Repository)에서 차트를 검색하고, 값을 커스터마이징하여 클러스터에 설치할 수 있다. 설치된 인스턴스를 릴리스(Release)라고 부르며, HELM을 통해 릴리스의 수정, 업그레이드, 롤백, 삭제를 관리한다.

HELM의 사용은 마이크로서비스 아키텍처나 복잡한 애플리케이션 스택의 배포를 표준화하고 자동화하는 데 크게 기여한다. 재사용 가능한 차트 템플릿을 통해 "차트로 패키징된 애플리케이션"의 개념을 정립하며, 지속적 통합/지속적 배포(CI/CD) 파이프라인과의 통합을 용이하게 한다.

2. HELM의 핵심 개념

HELM의 핵심 개념은 차트(Chart), 리포지토리(Repository), 릴리스(Release) 세 가지로 구성된다. 이 개념들은 HELM이 쿠버네티스 애플리케이션을 정의, 공유, 설치, 업그레이드하는 방식을 구조화한다.

차트는 HELM 패키지의 기본 단위이다. 하나의 차트는 쿠버네티스 애플리케이션을 실행하는 데 필요한 모든 리소스 정의를 포함하는 파일과 디렉터리의 집합이다. 차트는 애플리케이션의 구성 요소(예: 디플로이먼트, 서비스, 컨피그맵)를 설명하는 YAML 템플릿 파일과, 해당 템플릿을 구성하는 데 사용되는 기본 설정값(values.yaml), 그리고 차트에 대한 메타정보(Chart.yaml)로 이루어진다. 차트는 재사용 가능한 단위로, 복잡한 애플리케이션을 단일 개체로 패키징하고 관리할 수 있게 한다.

리포지토리는 HELM 차트를 저장하고 공유하는 장소이다. HTTP 서버를 통해 제공되는 차트 모음집으로 생각할 수 있다. HELM 클라이언트는 이 리포지토리에 연결하여 사용 가능한 차트를 검색하고 다운로드한다. 리포지토리는 공개적일 수도 있고 사설로 운영될 수도 있다. 사용자는 helm repo add 명령어로 리포지토리를 추가한 후, helm search repo로 원하는 차트를 찾아 설치할 수 있다.

릴리스는 쿠버네티스 클러스터에서 실행 중인 차트의 인스턴스를 의미한다. 하나의 차트를 동일한 클러스터에 여러 번 설치할 수 있으며, 각 설치마다 고유한 릴리스 이름이 부여된다. HELM은 각 릴리스의 설치 이력을 추적하여, 필요시 이전 버전으로 롤백하는 것이 가능하다. 따라서 릴리스는 차트의 특정 구성과 값으로 배포된 살아있는 애플리케이션 상태를 나타낸다.

개념

설명

역할

차트(Chart)

애플리케이션 패키지

쿠버네티스 리소스의 템플릿과 기본값을 포함

리포지토리(Repository)

차트 저장소

차트를 저장, 공유, 검색할 수 있는 서버

릴리스(Release)

실행 중인 차트 인스턴스

특정 구성으로 클러스터에 배포된 애플리케이션

2.1. 차트(Chart)

차트는 쿠버네티스 애플리케이션을 정의하는 파일들의 집합이다. 하나의 차트는 특정 서비스나 애플리케이션(예: NGINX 웹 서버, MySQL 데이터베이스)을 배포하는 데 필요한 모든 리소스 정의를 포함한다. 이는 디렉터리 구조로 구성되며, 가장 기본적인 차트는 Chart.yaml, values.yaml, templates/ 디렉터리 등의 파일로 이루어진다.

차트의 구조는 다음과 같다.

파일/디렉터리

설명

Chart.yaml

차트의 메타데이터(이름, 버전, 설명 등)를 정의한다.

values.yaml

차트에 대한 기본 구성 값(Configuration Values)을 제공한다.

templates/

YAML 형식의 쿠버네티스 매니페스트 템플릿 파일들이 위치한다.

charts/

이 차트가 의존하는 하위 차트(Subcharts)를 포함한다.

templates/NOTES.txt

설치 후 사용자에게 표시할 정보를 담는다.

templates/ 디렉터리 내의 파일들은 고 템플릿 언어로 작성된 템플릿이다. 이 템플릿은 values.yaml 파일이나 사용자가 제공하는 값 파일의 변수로 렌더링되어, 실제 쿠버네티스에 적용할 매니페스트(디플로이먼트, 서비스, 컨피그맵 등)를 생성한다. 이를 통해 단일 차트로 다양한 환경(개발, 스테이징, 프로덕션)에 맞춰 설정을 변경하여 애플리케이션을 배포할 수 있다.

차트는 버전 관리가 가능하며, 의존성을 선언하여 다른 차트를 포함할 수 있다. 패키지 형식으로 .tgz 파일로 압축되어 헬름 리포지토리에 저장되고 공유된다. 사용자는 공개 리포지토리에서 차트를 검색해 설치하거나, 조직의 요구사항에 맞게 자체 차트를 생성하고 비공개 리포지토리에 호스팅할 수 있다.

2.2. 리포지토리(Repository)

HELM 리포지토리는 차트(Chart) 패키지를 저장하고 공유하는 서버를 가리킨다. 이는 APT나 YUM과 같은 전통적인 패키지 관리자의 저장소와 유사한 역할을 한다. 사용자는 리포지토리를 HELM 클라이언트에 추가하여 해당 리포지토리에 등록된 차트들을 검색하고 설치할 수 있다.

리포지토리는 크게 공개 리포지토리와 사설 리포지토리로 구분된다. 가장 대표적인 공개 리포지토리는 Artifact Hub와 연동된 공식 HELM 스테이블 리포지토리와 비트나미(Bitnami) 리포지토리이다. 사설 리포지토리는 조직 내부에서 자체 개발한 차트나 공개되지 않은 차트를 관리하기 위해 구축한다. 사설 리포지토리는 간단한 HTTP/HTTPS 서버, 객체 저장소(Object Storage) 또는 차트 뮤지엄(Chart Museum)과 같은 전용 리포지토리 서버를 이용해 호스팅할 수 있다.

리포지토리 관리에 사용하는 주요 HELM 명령어는 다음과 같다.

명령어

설명

helm repo add

새로운 리포지토리를 클라이언트에 추가한다.

helm repo list

현재 등록된 모든 리포지토리 목록을 조회한다.

helm repo update

등록된 리포지토리의 인덱스(차트 목록 메타데이터)를 로컬에 동기화하여 최신 상태로 갱신한다.

helm repo remove

특정 리포지토리를 등록 해제한다.

helm search repo

등록된 리포지토리에서 키워드로 차트를 검색한다.

리포지토리는 index.yaml이라는 인덱스 파일을 유지하며, 이 파일은 저장된 모든 차트의 메타데이터(이름, 버전, 설명 등) 목록을 담고 있다. 사용자가 helm repo update를 실행하면 클라이언트는 이 인덱스 파일을 가져와 로컬 캐시를 업데이트하여 오프라인에서도 빠르게 차트를 검색할 수 있게 한다.

2.3. 릴리스(Release)

HELM에서 릴리스는 쿠버네티스 클러스터에 배포된 특정 차트의 인스턴스를 의미한다. 사용자가 helm install 명령어를 실행하면, HELM은 해당 차트의 템플릿과 사용자가 제공한 구성값(values.yaml)을 결합하여 실제 쿠버네티스 매니페스트 파일을 생성하고 클러스터에 배포한다. 이렇게 생성된 배포 단위가 바로 릴리스이다. 하나의 차트로부터 서로 다른 구성값을 사용하여 여러 개의 독립적인 릴리스를 생성할 수 있다. 예를 들어, 동일한 웹 애플리케이션 차트를 사용하여 개발 환경용 릴리스와 스테이징 환경용 릴리스를 각각 별도의 이름으로 배포하는 것이 가능하다.

릴리스는 자신의 수명 주기를 가지며, helm 명령어를 통해 전체적으로 관리된다. 주요 릴리스 관리 작업은 다음과 같다.

명령어

설명

helm install

차트를 새 릴리스로 배포한다.

helm upgrade

기존 릴리스의 차트 버전이나 구성값을 업데이트한다.

helm rollback

릴리스를 이전 버전(리비전)으로 되돌린다.

helm list

클러스터에 배포된 릴리스 목록을 조회한다.

helm uninstall

릴리스와 관련된 모든 쿠버네티스 리소스를 삭제한다.

helm status

특정 릴리스의 상태와 정보를 상세히 확인한다.

HELM은 모든 릴리스 변경 사항을 추적한다. helm upgrade를 수행할 때마다 릴리스의 새 리비전(Revision)이 생성된다. 이 히스토리를 통해 어떤 변경이 이루어졌는지 확인할 수 있으며, 필요시 helm rollback 명령어를 사용하여 특정 리비전으로 쉽게 복구할 수 있다. 릴리스 이름은 네임스페이스 내에서 고유해야 하며, 이를 통해 각 배포를 식별한다.

3. HELM 아키텍처와 구성 요소

HELM의 아키텍처는 버전에 따라 크게 변화했다. HELM 2는 클라이언트-서버 모델을 채택했으며, 쿠버네티스 클러스터 내부에 서버 측 구성 요소인 Tiller를 필요로 했다. 반면, HELM 3는 이를 단순화하여 클라이언트 중심의 아키텍처로 전환했다.

HELM 클라이언트는 사용자가 상호작용하는 주된 도구이다. 이는 명령줄 인터페이스(CLI)를 제공하며, 사용자의 명령을 받아 차트를 패키징하거나, 리포지토리와 통신하거나, 쿠버네티스 API 서버에 직접 요청을 보내는 역할을 한다. HELM 3에서는 클라이언트가 모든 로직을 수행한다.

HELM 2 아키텍처의 핵심 서버 구성 요소는 Tiller였다. Tiller는 쿠버네티스 클러스터 내부에 파드 형태로 배포되어 HELM 클라이언트의 요청을 처리하고, 실제 쿠버네티스 리소스를 생성 및 관리하는 책임을 지녔다. 이는 광범위한 클러스터 권한을 필요로 했으며, 보안과 운영 복잡성에 대한 우려를 낳았다.

HELM 3에서는 Tiller가 완전히 제거되었다. 대신 HELM 클라이언트가 직접 쿠버네티스 API 서버와 통신한다. 이 아키텍처 변경은 보안을 강화하고(클러스터 내 전용 서버 구성 요소가 사라짐), 배포 모델을 단순화하며, 릴리스 정보를 시크릿 형태로 네임스페이스에 저장하는 등 여러 개선을 가져왔다. HELM 라이브러리는 이 새로운 아키텍처 하에서 클라이언트에 내장된 핵심 로직을 가리킨다.

구성 요소

HELM 2

HELM 3

설명

클라이언트

존재

존재

사용자 CLI. 명령을 실행하고 차트를 관리한다.

서버 구성 요소

Tiller

없음

HELM 2에서는 클러스터 내부의 Tiller가 배포를 실행했다.

통신 방식

클라이언트 → Tiller → API 서버

클라이언트 → API 서버

HELM 3는 직접 통신 모델을 사용한다.

릴리스 정보 저장소

Tiller 내부의 ConfigMap

네임스페이스의 Secret

HELM 3는 보안을 강화하기 위해 저장 방식을 변경했다.

3.1. HELM 클라이언트

HELM 클라이언트는 사용자의 로컬 머신이나 CI/CD 파이프라인에서 실행되는 명령줄 도구이다. 이 클라이언트는 사용자가 HELM 차트를 관리하기 위한 모든 명령을 입력하는 주 인터페이스 역할을 한다.

주요 기능은 다음과 같다. 차트를 HELM 리포지토리에서 검색하고, 로컬에 다운로드하며, 쿠버네티스 클러스터에 차트를 설치하여 릴리스를 생성한다. 또한 기존 릴리스를 업그레이드, 롤백, 삭제하는 작업도 수행한다. 사용자는 helm install, helm upgrade, helm list, helm uninstall 등의 명령을 통해 쿠버네티스 애플리케이션의 라이프사이클을 관리한다.

HELM 클라이언트는 YAML 형식의 구성 파일과 명령줄 플래그를 통해 차트의 값을 오버라이드할 수 있다. 이는 동일한 차트를 서로 다른 환경(개발, 스테이징, 프로덕션)에 맞게 파라미터화하여 배포하는 데 필수적이다. 또한 클라이언트는 차트를 패키징(helm package)하고, 리포지토리에 푸시하는 작업도 담당한다.

HELM의 버전에 따라 클라이언트의 동작 방식에 차이가 있다. HELM 2에서는 클라이언트가 클러스터 내부에 설치된 Tiller 서버와 통신하여 명령을 실행했다. 반면, HELM 3에서는 Tiller가 제거되고, 클라이언트가 직접 쿠버네티스 API와 상호작용하는 아키텍처로 변경되었다. 이로 인해 HELM 3 클라이언트의 설치와 운영이 더 간소화되고 보안성이 향상되었다.

3.2. Tiller (HELM 2) / HELM 라이브러리 (HELM 3)

HELM 2에서는 Tiller라는 서버측 구성 요소가 쿠버네티스 클러스터 내에 별도의 파드로 배포되었다. Tiller는 HELM 클라이언트의 명령을 받아 클러스터 내에서 실제 차트의 설치, 업그레이드, 삭제 작업을 수행하는 역할을 담당했다. 이 아키텍처는 중앙 집중식 에이전트를 통해 릴리스를 관리했지만, Tiller가 광범위한 클러스터 관리 권한을 가지게 되어 보안상의 주요 취약점으로 지적되었다.

HELM 3에서는 Tiller가 완전히 제거되었다. 대신 HELM 클라이언트가 직접 쿠버네티스 API와 상호작용하며, 필요한 로직은 클라이언트에 내장된 HELM 라이브러리를 통해 처리된다. 이 변경으로 인해 설치 및 운영이 단순화되었고, 가장 중요한 보안 문제가 해결되었다. 이제 사용자는 쿠버네티스 RBAC를 통해 HELM 클라이언트를 실행하는 사용자나 서비스 계정에 필요한 권한만 부여하면 된다.

아키텍처 변화에 따라 릴리스 정보의 저장 방식도 변경되었다. HELM 2에서는 Tiller가 릴리스 정보를 쿠버네티스 ConfigMap에 저장했지만, HELM 3에서는 시크릿 객체에 저장하여 보안성을 강화했다. 이로 인해 HELM 2와 HELM 3은 서로 호환되지 않는 별개의 릴리스 저장소를 사용하게 되었다.

구성 요소

HELM 2

HELM 3

서버측 컴포넌트

Tiller (필수)

없음

아키텍처

클라이언트-서버 모델

클라이언트-라이브러리 모델

릴리스 정보 저장소

ConfigMap

시크릿

필요한 권한

Tiller 서비스 계정에 클러스터 전체 권한

사용자/서비스 계정에 네임스페이스 수준 권한

보안 모델

취약 (Tiller가 강력한 권한 보유)

강화 (쿠버네티스 RBAC에 통합)

이러한 변화는 HELM을 더 가볍고 안전하게 만들었으며, 쿠버네티스의 표준 보안 및 인증 메커니즘과의 통합을 원활하게 했다.

4. HELM 2 vs HELM 3 주요 차이점

HELM 3는 HELM 2의 아키텍처를 단순화하고 보안성을 크게 향상시킨 주요 버전 업그레이드이다. 가장 근본적인 변화는 중앙 서버 측 구성 요소였던 Tiller를 제거한 것이다. HELM 2에서는 클라이언트가 Tiller 서버에 명령을 전달하고, Tiller가 쿠버네티스 API와 상호작용하며 클러스터 내에서 실행되었다. 이는 Tiller에게 과도한 권한이 부여될 수 있는 보안 문제와 운영 복잡성을 초래했다. HELM 3에서는 Tiller가 완전히 제거되어 HELM 클라이언트가 직접 쿠버네티스 API와 통신한다. 이로 인해 RBAC를 포함한 쿠버네티스의 네이티브 보안 모델을 그대로 활용할 수 있게 되었다.

릴리스 정보 저장 방식에도 중요한 변화가 있었다. HELM 2는 릴리스 메타데이터를 ConfigMap 객체에 저장했으나, HELM 3는 이를 시크릿 객체로 변경하여 기본적으로 더 안전한 저장 방식을 제공한다. 또한, 릴리스 네임스페이스의 개념이 명확해졌다. HELM 2에서는 Tiller가 단일 네임스페이스에 설치되어 모든 릴리스를 관리했지만, HELM 3에서는 각 릴리스가 설치된 네임스페이스에 종속되어 다중 테넌시 지원이 향상되었다.

기능적 개선 사항도 다수 도입되었다. HELM 3는 차트 의존성 관리에 사용되던 requirements.yaml 파일을 제거하고, 모든 의존성 정보를 Chart.yaml 파일의 dependencies 필드로 통합하여 관리를 단순화했다. 또한, 3-방향 전략적 병합 패치(3-way strategic merge patch)를 사용하여 업그레이드 시 변경 사항을 더 정확하게 파악하고, 사용자가 명시적으로 삭제하지 않은 리소스를 보존하는 등 업그레이드 동작이 더 예측 가능하고 안정적으로 개선되었다. 라이브러리 차트(라이브러리 차트)에 대한 공식 지원이 추가되어 차트 개발의 재사용성을 높였다.

비교 항목

HELM 2

HELM 3

아키텍처

클라이언트-서버 모델 (HELM 클라이언트 + Tiller 서버)

클라이언트-라이브러리 모델 (Tiller 제거)

보안

Tiller 서비스 계정에 클러스터 전체 권한 필요

사용자의 쿠버네티스 자격 증명과 RBAC 사용

릴리스 데이터 저장소

ConfigMap

시크릿(쿠버네티스)

API 버전 지원

주로 쿠버네티스 API v1

쿠버네티스 API v1 (기본), 사용자 정의 리소스(CRD) 설치 지원

차트 의존성 관리

requirements.yaml과 charts/ 디렉토리 사용

Chart.yaml 내 dependencies 필드로 통합

업그레이드 동작

2-방향 병합

3-방향 전략적 병합 패치

필수 구성 요소

클러스터 내 실행 중인 Tiller

없음 (클라이언트만 필요)

이러한 변화로 인해 HELM 3는 설치와 관리가 더 간단해졌으며, 쿠버네티스 생태계의 보안 표준에 더 잘 부합한다. 결과적으로 HELM 프로젝트는 HELM 2에 대한 공식 지원을 중단했고, 모든 신규 배포는 HELM 3를 사용할 것을 강력히 권장한다.

5. 기본 사용법과 명령어

HELM의 기본 사용법은 주로 helm 명령줄 인터페이스(CLI)를 통해 이루어진다. 주요 작업 흐름은 차트(Chart)를 검색하고, 설치하며, 설치된 릴리스(Release)를 관리하는 것이다.

차트 검색 및 설치

공식 HELM 허브(Helm Hub)나 추가한 리포지토리(Repository)에서 차트를 검색할 수 있다. 먼저 리포지토리를 추가하고, 차트를 검색한 후, 값을 설정하여 설치한다.

단계

명령어 예시

설명

리포지토리 추가

helm repo add bitnami https://charts.bitnami.com/bitnami

bitnami라는 이름으로 공식 차트 저장소를 추가한다.

리포지토리 업데이트

helm repo update

추가된 모든 리포지토리의 최신 차트 정보를 로컬에 가져온다.

차트 검색

helm search repo nginx

리포지토리에서 nginx 관련 차트를 검색한다.

차트 설치

helm install my-nginx bitnami/nginx

bitnami/nginx 차트를 my-nginx라는 릴리스 이름으로 설치한다.

값 파일로 설치

helm install -f values.yaml my-nginx bitnami/nginx

사용자 정의 values.yaml 파일을 사용하여 설치한다.

릴리스 관리

설치된 애플리케이션은 릴리스 단위로 관리된다. 상태를 확인하고, 업그레이드 또는 롤백하며, 필요 시 제거할 수 있다.

작업

명령어 예시

설명

릴리스 목록 확인

helm list 또는 helm ls

현재 클러스터에 설치된 모든 릴리스를 나열한다.

릴리스 상태 확인

helm status my-nginx

my-nginx 릴리스의 상세 상태와 정보를 확인한다.

릴리스 업그레이드

helm upgrade -f new-values.yaml my-nginx bitnami/nginx

새로운 설정(new-values.yaml)으로 릴리스를 업그레이드한다.

릴리스 롤백

helm rollback my-nginx 1

my-nginx 릴리스를 첫 번째 리비전(revision 1) 상태로 되돌린다.

릴리스 제거

helm uninstall my-nginx

my-nginx 릴리스와 관련 쿠버네티스(Kubernetes) 리소스를 삭제한다.

차트 생성 및 패키징

사용자 정의 애플리케이션을 패키징하기 위해 새로운 차트를 생성하고, 템플릿을 작성한 후, 패키지로 만들어 배포할 수 있다.

단계

명령어 예시

설명

새 차트 생성

helm create my-chart

my-chart 디렉토리에 기본 구조의 차트 템플릿을 생성한다.

차트 의존성 관리

helm dependency update my-chart

Chart.yaml에 정의된 서브 차트 의존성을 다운로드한다.

차트 패키징

helm package my-chart

my-chart 디렉토리를 .tgz 확장자의 패키지 파일로 압축한다.

차트 검증

helm lint my-chart

차트의 구조와 템플릿 문법에 문제가 없는지 검사한다.

차트 설치 테스트

helm install --dry-run --debug my-release ./my-chart

실제 설치 없이 렌더링된 쿠버네티스 매니페스트(Kubernetes Manifest)를 확인한다.

5.1. 차트 검색 및 설치

HELM 차트는 쿠버네티스 애플리케이션을 정의하는 패키지입니다. 사용자는 공개된 차트 저장소에서 필요한 애플리케이션을 검색하고, 단일 명령어로 클러스터에 설치할 수 있습니다.

차트를 검색하려면 helm search 명령어를 사용합니다. 공식 Artifact Hub에 등록된 수많은 차트를 검색하려면 helm search hub [키워드]를 실행합니다. 예를 들어, helm search hub nginx는 NGINX와 관련된 공개 차트 목록을 보여줍니다. 이미 추가된 로컬 저장소에서 검색하려면 helm search repo [키워드]를 사용합니다. 저장소를 추가하지 않았다면, 먼저 공식 안정(stable) 저장소를 helm repo add stable https://charts.helm.sh/stable 명령으로 추가해야 합니다.

차트를 설치하여 쿠버네티스에 애플리케이션을 배포하는 과정을 HELM 릴리스 생성이라고 합니다. 기본 설치 명령어는 helm install [릴리스 이름] [차트 위치]입니다. 차트 위치는 저장소의 차트 이름(예: stable/nginx)이나 로컬 차트 디렉토리 경로, URL이 될 수 있습니다. 설치 시 --values 플래그로 사용자 정의 값 파일을 제공하거나, --set 플래그로 개별 파라미터를 덮어쓸 수 있습니다. 성공적으로 설치되면 HELM은 릴리스의 이름, 네임스페이스, 상태 및 리비전 번호 등의 정보를 출력합니다.

명령어

설명

사용 예

helm search hub

Artifact Hub에서 차트 검색

helm search hub wordpress

helm search repo

추가된 저장소에서 차트 검색

helm search repo database

helm repo add

차트 저장소 추가

helm repo add bitnami https://charts.bitnami.com/bitnami

helm install

차트를 설치하여 릴리스 생성

helm install my-web bitnami/nginx

설치 후 helm list 명령으로 현재 네임스페이스의 모든 릴리스 목록을 확인할 수 있습니다. 특정 릴리스의 상세 정보와 사용된 값은 helm get manifest [릴리스 이름]과 helm get values [릴리스 이름] 명령으로 조회합니다.

5.2. 릴리스 관리

릴리스는 HELM 차트의 특정 인스턴스를 의미합니다. 동일한 차트를 같은 쿠버네티스 클러스터에 서로 다른 구성 값으로 여러 번 설치하면 각각 독립적인 릴리스가 생성됩니다. 이는 하나의 애플리케이션 패키지를 다양한 환경(예: 개발, 스테이징, 프로덕션)이나 다른 설정으로 배포할 수 있게 해줍니다.

릴리스 관리는 주로 helm list, helm upgrade, helm rollback, helm uninstall 명령어를 통해 이루어집니다. helm list (또는 helm ls) 명령을 실행하면 현재 클러스터에 배포된 모든 릴리스의 이름, 네임스페이스, 리비전 번호, 상태, 차트 버전 정보를 확인할 수 있습니다. helm upgrade 명령은 기존 릴리스의 구성을 업데이트하거나 차트의 새 버전으로 업그레이드할 때 사용합니다. 업그레이드가 성공하면 릴리스의 리비전 번호가 1씩 증가합니다.

릴리스의 변경 이력은 리비전 단위로 관리됩니다. 문제가 발생했을 때 helm rollback <RELEASE_NAME> <REVISION_NUMBER> 명령을 사용하면 특정 리비전 상태로 쉽게 되돌릴 수 있습니다. 예를 들어, helm rollback my-app 2는 my-app 릴리스를 리비전 2의 상태로 복원합니다. 애플리케이션을 완전히 제거해야 할 때는 helm uninstall <RELEASE_NAME> 명령을 사용합니다. HELM 3에서는 이 명령이 실행되면 해당 릴리스와 관련된 대부분의 쿠버네티스 리소스가 제거됩니다[1].

릴리스 상태는 주로 다음 중 하나로 표시됩니다.

상태

설명

deployed

릴리스가 성공적으로 배포되었습니다.

failed

릴리스 배포에 실패했습니다.

pending

릴리스 배포가 진행 중이거나 대기 중입니다.

uninstalled

릴리스가 제거(uninstall)되었습니다.

superseded

새 릴리스로 업그레이드되어 이전 버전이 대체되었습니다.

5.3. 차트 생성 및 패키징

차트를 생성하려면 helm create 명령어를 사용하여 기본 구조의 차트를 만들 수 있다. 이 명령은 지정한 이름의 디렉토리를 생성하고, 그 안에 YAML 파일과 템플릿 파일들로 구성된 표준 차트 구조를 준비한다. 생성된 디렉토리 내에는 Chart.yaml(차트 메타데이터), values.yaml(기본 구성 값), templates/ 디렉토리(쿠버네티스 매니페스트 템플릿), 그리고 charts/ 디렉토리(의존성 차트)가 포함된다. 개발자는 이 기본 구조를 바탕으로 자신의 애플리케이션에 맞게 템플릿과 값을 수정한다.

차트의 핵심 파일인 Chart.yaml에는 다음과 같은 메타정보가 정의된다.

필드

설명

필수 여부

apiVersion

차트 API 버전 (예: v2)

예

name

차트의 이름

예

version

시맨틱 버저닝 규칙을 따르는 차트 버전

예

description

차트에 대한 한 줄 설명

아니요

type

차트 유형 (기본값: application)

아니요

dependencies

이 차트가 의존하는 다른 차트 목록

아니요

템플릿 파일은 templates/ 디렉토리 내에 위치하며, Go 템플릿 언어를 확장한 Helm 템플릿 언어로 작성된다. 이 템플릿들은 values.yaml 파일이나 설치 시 제공되는 값 파일에 정의된 변수들을 활용하여 동적인 쿠버네티스 리소스 매니페스트를 생성한다. 템플릿 내에서는 조건문, 반복문, 함수, 파이프라인 등을 사용하여 복잡한 로직을 구현할 수 있다.

차트 개발이 완료되면, helm package 명령어를 실행하여 차트 디렉토리를 패키징한다. 이 명령은 차트를 .tgz 확장자의 압축 파일로 만들어주며, 패키지명에는 차트 이름과 버전이 자동으로 포함된다. 패키징 전에 helm lint 명령으로 차트 구조와 문법에 문제가 없는지 검증하는 것이 좋다. 생성된 패키지는 Helm 차트 리포지토리에 업로드하여 공유하거나, helm install 명령에 직접 경로를 지정하여 설치할 수 있다.

6. 고급 기능과 활용

차트 템플릿은 Helm 차트의 핵심 구성 요소로, Kubernetes 매니페스트 파일을 생성하기 위한 템플릿 엔진 역할을 한다. 이 템플릿은 Go 템플릿 언어를 기반으로 하며, 사용자가 values.yaml 파일을 통해 정의한 값으로 동적으로 리소스를 구성할 수 있게 한다. 예를 들어, 디플로이먼트의 레플리카 수나 컨테이너 이미지 태그와 같은 설정을 차트 설치 시 외부에서 주입할 수 있다. 템플릿 내에서는 .Values, .Release, .Chart와 같은 내장 객체를 사용하여 메타데이터와 사용자 정의 값을 참조한다. 또한 {{- if ... }} 같은 제어 구조를 활용해 조건부로 리소스를 생성하거나, {{ tpl .Values.someString . }} 함수를 사용해 문자열 내부의 템플릿 구문을 재귀적으로 평가할 수 있다.

값(Values) 관리는 이 템플릿 시스템과 긴밀하게 연동된다. 기본값은 차트 내 values.yaml 파일에 정의되며, 사용자는 --set 플래그를 사용하거나 별도의 YAML 파일(-f my-values.yaml)을 제공하여 이를 오버라이드할 수 있다. 값은 계층적으로 관리되어, 특정 하위 차트(서브차트)의 값만을 독립적으로 설정하는 것도 가능하다. 이 구조는 복잡한 애플리케이션 스택을 모듈화하고 재사용성을 높이는 데 기여한다.

Helm은 애플리케이션의 라이프사이클 중 특정 시점에 작업을 실행할 수 있도록 Hook 기능을 제공한다. Hook은 차트 템플릿에 특별한 어노테이션("helm.sh/hook")을 추가하여 정의하며, 설치 전/후, 업그레이드 전/후, 삭제 전/후 등 다양한 시점에 실행될 수 있다. 일반적인 사용 사례로는 설치 후 데이터베이스 마이그레이션 스크립트 실행, 새 릴리스 배포 전 이전 Pod의 그레이스풀 셧다운 보장, 리소스 삭제 전 백업 작업 수행 등이 있다. Hook은 별도의 Kubernetes Job 또는 Pod로 실행되며, 성공적으로 완료되어야 Helm의 라이프사이클이 다음 단계로 진행된다.

이러한 고급 기능들을 효과적으로 활용하기 위해 다음과 같은 명령어와 패턴이 자주 사용된다.

명령/기능

설명

helm template .

values.yaml과 템플릿을 기반으로 렌더링된 Kubernetes 매니페스트를 로컬에서 확인한다.

--dry-run 플래그

실제 클러스터에 변경을 가하지 않고 설치 또는 업그레이드 시뮬레이션을 실행한다.

의존성 관리 (Chart.yaml)

dependencies: 필드를 통해 다른 차트를 서브차트로 선언하고 관리한다.

라이브러리 차트(Helm 3)

공통 템플릿 조각을 정의한 차트로, 애플리케이션 차트에 포함되어 재사용된다.

고급 템플릿 기법에는 .Files 객체를 사용해 차트 내에 포함된 설정 파일을 읽어오거나, .Capabilities 객체로 Kubernetes 클러스터의 버전 정보를 확인하여 API를 조건부로 사용하는 방법 등이 포함된다. 이러한 기능들은 차트를 보다 유연하고 강력하게 만들어, 다양한 환경과 요구사항에 맞춰 단일 차트를 배포할 수 있도록 지원한다.

6.1. 차트 템플릿과 값(Values) 관리

차트 템플릿은 Helm 차트의 핵심 구성 요소로, Kubernetes 매니페스트 파일을 생성하기 위한 템플릿 파일이다. 이 파일들은 templates/ 디렉터리 내에 위치하며, Go 템플릿 언어를 기반으로 작성된다. 템플릿은 고정된 YAML 파일이 아니라, 사용자가 제공하는 값(Values)이나 빌트인 객체에 따라 동적으로 내용이 채워지는 청사진 역할을 한다. 이를 통해 단일 차트로 다양한 환경(개발, 스테이징, 프로덕션)에 맞는 Kubernetes 리소스를 생성할 수 있다.

템플릿 내에서는 점(.) 표기법을 사용하여 Values 객체에 접근한다. 예를 들어, {{ .Values.image.repository }}는 사용자가 정의한 컨테이너 이미지 저장소 이름을 참조한다. values.yaml 파일은 이러한 값들의 기본값을 정의하는 곳이다. 사용자는 --set 플래그를 사용하거나 별도의 값 파일(myvalues.yaml)을 -f 옵션으로 제공하여 이 기본값을 재정의할 수 있다. 이는 설정과 코드를 분리하는 핵심 메커니즘이다.

템플릿은 단순한 변수 치환을 넘어 조건문(if/else), 반복문(range), 파이프라인(|), 함수 호출 등 강력한 논리를 포함할 수 있다. 또한 _helpers.tpl 파일에 정의된 네임드 템플릿을 생성하고 재사용하여 코드 중복을 줄일 수 있다. 템플릿 작성 시 주의할 점은 최종 생성된 YAML이 Kubernetes에 의해 유효해야 한다는 것이다. helm template 명령어는 실제 클러스터에 설치하지 않고도 렌더링된 매니페스트를 미리 검증하는 데 유용하다.

값(Values)의 관리 체계는 다음과 같이 구성된다.

값(Values)의 우선순위 출처

설명

--set 플래그

명령줄에서 직접 설정. 가장 높은 우선순위.

-f 또는 --values로 지정된 파일

사용자 정의 값 파일.

차트 내 values.yaml 파일

차트에 포함된 기본 설정 파일.

부모 차트의 values.yaml

서브차트(subchart) 사용 시 적용됨.

이러한 계층적 구조를 통해 중앙 집중식 기본값 정의와 환경별 세부 조정이 가능해진다.

6.2. Hooks와 라이프사이클

HELM Hooks는 쿠버네티스 리소스의 라이프사이클 특정 지점에 커스텀 작업을 삽입할 수 있게 해주는 기능이다. 이를 통해 차트 설치, 업그레이드, 롤백, 삭제 과정에서 추가적인 설정이나 정리 작업을 자동화할 수 있다. Hook은 특정 어노테이션으로 식별되며, 일반 쿠버네티스 매니페스트 파일과 동일한 형태로 작성되지만 별도의 디렉터리(templates/hooks/)에 위치하거나 templates/ 디렉터리 내에서 helm.sh/hook 어노테이션으로 정의된다.

Hook은 설치 프로세스 중 특정 시점에 실행된다. 주요 Hook 유형과 실행 시점은 다음과 같다.

Hook 어노테이션 값

실행 시점

pre-install, post-install

차트 설치 전/후

pre-upgrade, post-upgrade

차트 업그레이드 전/후

pre-rollback, post-rollback

릴리스 롤백 전/후

pre-delete, post-delete

차트 삭제 전/후

test

helm test 명령어 실행 시

Hook으로 생성된 리소스는 기본적으로 Hook 작업이 완료된 후 삭제된다. 그러나 "helm.sh/hook-delete-policy" 어노테이션을 사용하여 삭제 동작을 제어할 수 있다. 예를 들어, hook-succeeded 또는 hook-failed 정책을 지정하여 성공 또는 실패 시에만 리소스를 삭제하도록 설정할 수 있다. 테스트 Hook은 성공적인 배포를 검증하는 용도로 사용되며, helm test 명령을 통해 실행된다. 이는 포드가 정상적으로 기동하고 서비스를 제공하는지 확인하는 데 유용하다.

Hook의 실행 순서는 "helm.sh/hook-weight" 어노테이션 값에 의해 결정된다. 가중치는 정수로 표현되며, 값이 낮을수록 먼저 실행된다. 이를 통해 복잡한 배포 시나리오에서 여러 Hook 작업의 의존성과 순서를 정밀하게 제어할 수 있다. Hook은 데이터베이스 마이그레이션, 설정 파일 생성, 외부 서비스에 대한 사전 검증, 배포 후 알림 전송 등 다양한 운영 작업을 자동화하는 강력한 메커니즘을 제공한다.

7. 보안 모범 사례

HELM을 사용할 때는 쿠버네티스 클러스터와 애플리케이션의 보안을 강화하기 위해 몇 가지 모범 사례를 따르는 것이 중요하다.

차트와 리포지토리 관리 측면에서는 신뢰할 수 있는 공식 또는 검증된 리포지토리에서 차트를 가져와야 한다. 가능하다면 차트의 소스 코드와 템플릿을 검토하여 악성 코드나 위험한 설정이 포함되지 않았는지 확인한다. 내부적으로 사용하는 차트는 시그스토어(Sigstore)의 코스이그니(Cosign) 같은 도구를 이용해 서명하고, OCI 레지스트리에 저장하여 무결성을 검증하는 것이 좋다. 민감한 값은 차트와 함께 배포하지 말고, --set-file 플래그나 외부 시크릿 관리 시스템(예: HashiCorp Vault, AWS Secrets Manager)을 통해 안전하게 주입해야 한다.

릴리스 운영과 접근 제어에서는 최소 권한 원칙을 적용한다. HELM 3에서는 Tiller가 제거되어 클라이언트 측의 kubeconfig 자격 증명으로 직접 동작하므로, 사용자 또는 서비스 계정에 필요한 최소한의 쿠버네티스 RBAC 권한만 부여한다. 프로덕션 환경에서는 helm upgrade 시 --atomic 플래그를 사용하여 업그레이드 실패 시 자동으로 롤백되도록 구성하는 것이 안정성을 높인다. 또한, HELM 릴리스의 히스토리(helm history)를 정기적으로 점검하고, 불필요한 이전 릴리스는 helm uninstall로 정리하여 관리 복잡성과 잠재적 보안 위험을 줄여야 한다.

8. 대체 도구 및 비교

쿠버네티스 생태계에는 HELM 외에도 애플리케이션 패키징과 배포를 관리하는 여러 대체 도구가 존재합니다. 각 도구는 설계 철학과 사용 사례에 차이가 있어, 특정 환경이나 요구사항에 따라 선택이 달라질 수 있습니다.

주요 대체 도구로는 Kustomize, Kapp, Carvel 도구 모음, 그리고 플랫폼 의존적 솔루션인 Operators 프레임워크가 있습니다. 아래 표는 주요 도구들을 간략히 비교한 것입니다.

도구

패키징 방식

주요 특징

적합한 사용 사례

Kustomize

선언적 오버레이(Overlay)

순수 YAML 기반, 쿠버네티스에 내장됨, 템플릿 엔진 없음

기본 구성에서 환경별(dev/staging/prod) 차이를 관리하는 패치 기반 배포

Kapp

애플리케이션 중심 뷰

배포된 리소스 집합을 하나의 '앱'으로 관리, 상태 추적 및 차이점 확인 강조

복잡한 리소스 집합의 수명 주기를 명시적으로 제어해야 하는 경우

Carvel (예: ytt, kapp)

모듈형 도구 모음

ytt는 YAML 구조화 템플릿, kapp은 배포 관리에 특화됨

템플릿 기능이 필요하지만 HELM 차트보다 더 세밀한 제어와 예측 가능성을 원하는 경우

Operators

사용자 정의 컨트롤러

애플리케이션별 운영 지식을 코드화하여 복잡한 상태 저장 앱의 자동화 관리

데이터베이스, 메시지 큐 등 복잡한 상태 저장 애플리케이션의 운영 자동화

이들 도구는 HELM의 템플릿 기반 패키징과 중앙 집중식 리포지토리 모델과는 다른 접근 방식을 취합니다. 예를 들어, Kustomize는 템플릿과 변수를 사용하는 대신 기본 YAML 파일에 환경별 패치를 적용하는 방식을 선호합니다. 이는 학습 곡선이 낮고 GitOps 워크플로우와의 통합이 용이하다는 장점이 있지만, 패키지의 재사용성과 버전 관리 측면에서는 HELM 차트에 비해 제한적일 수 있습니다. 최근에는 HELM과 Kustomize를 함께 사용하거나, Carvel의 ytt로 템플릿을 작성한 후 kapp으로 배포하는 등 도구들을 조합하는 하이브리드 접근법도 등장하고 있습니다.

9. 관련 문서

  • Wikipedia - HELM (software)

  • Google Research - HELM: Holistic Evaluation of Language Models

  • Stanford Center for Research on Foundation Models - Introducing HELM

  • Papers with Code - HELM Benchmark

  • GitHub - stanford-crfm/helm

리비전 정보

버전r1
수정일2026.02.14 23:11
편집자unisquads
편집 요약AI 자동 생성