안녕하세요? 정리하는 개발자 워니즈 입니다. 이번시간에는 헬름 에 대해서 알아보는 시간을 갖어보려 합니다. 헬름은 현재 3버전으로 업그레이드 가 되어있고, 제가 소개하고자 하는 내용은 2버전입니다. 2에서 3으로 명령 변경이 다수 일어났기 때문에 먼저 2버전에 대해서 정리를 해볼까 합니다.
지난 글들은 아래를 참고 해주시면 됩니다.
- 쿠버네티스 1편 : 설치 가이드
- 쿠버네티스 2편 : pod
- 쿠버네티스 3편 : service
- 쿠버네티스 4편 : deployment
- 쿠버네티스 5편 : pod 설정
- 쿠버네티스 6편 : 배포 전략
- 쿠버네티스 7편 : volume
- 쿠버네티스 8편 : daemonset
- 쿠버네티스 9편 : 테라폼을 통한 클러스터 구성
- 쿠버네티스 10편 : eks에서 volume 사용하기
- 쿠버네티스 11편 : helm
- 쿠버네티스 12편 : helm chart template
- 쿠버네티스 13편 : helm deploy
- 쿠버네티스 14편 : fluentd를 통한 log수집
- 쿠버네티스 15편 : chartmuseum
- 쿠버네티스 16편 : 배포툴(ArgoCD 설치방법/사용법)
- 쿠버네티스 17편 : 배포툴(ArgoCD 구성/알람)
- 쿠버네티스 18편 : 쿠버네티스 Autoscailing
- 쿠버네티스 19편 : 쿠버네티스 로깅 아키텍처
쿠버네티스에서 리소스를 관리하고 배포해주는 가장 쉬운 방법중 하나로 쉽게 말해, 패키지 관리자 입니다.
공식 문서
1. 왜 Helm 인가요?
Helm은 쉽게 말헤, npm, apt, yum 과 같은 패키지매니지먼트 도구라고 생각 할 수 있습니다. 하지만 CI/CD와 애플리케이션이 구동환경에서 보면, 단순 패키지매니지먼트보다는 더 큰 역할을 할 수 있다는 것을 알 수 있습니다.
1-1. Deployment history
Helm 에서 배포된 애플리케이션은 Helm release로 관리합니다. release된 버전 기록을 자동으로 유지 관리하고, 배포 후 문제가 발생하면 이전상태로 되돌아가는것이 용이합니다. 또한 Helm 차트 자체를 SCM툴들을 이용해서 관리하고 협업 할 수 있습니다.
1-2. CI/CD Pipeline
CI/CD Pipeline을 제공해 배포작업을 구성하고 자동화하는데 용이합니다.
1-3. 멀티스테이징
또다른 특징은 배포 중에 애플리케이션 구성을 할 수 있다는 점입니다. 예를 들어 개발/Staging/운영환경에 따라 Pod의 복제본의 수 및 PV의 용량을 다른게 설정할 필요가 있는데 Helm은 동일한 헬름차트로 만들어 모든 환경에서 사용할 수 있습니다.
2. Helm 및 저장소 설치
2-1. 서비스 계정 만들기
Helm을 배포하려면 먼저 서비스 계정과 Tiller 서비스에 대한 역할 바인딩이 필요합니다. RBAC 지원 클러스터에서 Helm/Tiller를 보호하는 방법에 대한 자세한 내용은 Tiller, 네임스페이스 및 RBAC를 참조하세요.
helm-rbac.yaml이라는 파일을 만들고 다음 YAML에 복사합니다.
# mkdir -p /lab/helm/install/
# gedit /lab/helm/install/helm-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
kubectl apply 명령을 사용하여 서비스 계정 및 역할 바인딩을 만듭니다.
kubectl apply -f /lab/helm/install/helm-rbac.yaml
2-2. Helm 구성 – Client
- Download
cd /lab/helm/install wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.0-linux-amd64.tar.gz - Unpack
tar -zxvf helm-v2.13.0-linux-amd64.tar.gz - bin폴더로 이동
mv linux-amd64/helm /usr/local/bin/helm - 설치확인
# helm version Client: &version.Version{SemVer:"v2.13.0", GitCommit:"79d07943b03aea2b76c12644b4b54733bc5958d6", GitTreeState:"clean"} Error: could not find tiller
2-3. Helm 구성 – Tiller
Tiller를 클러스터에 배포하려면 helm init 명령을 사용합니다.
helm init --service-account tiller
3. 저장소 구성
차트뮤지엄 구성
curl -LO https://s3.amazonaws.com/chartmuseum/release/latest/bin/linux/amd64/chartmuseum
chmod +x ./chartmuseum
mv ./chartmuseum /usr/local/bin
chartmuseum --debug --port=8080 \
--storage="local" \
--storage-local-rootdir="./chartstorage"
helm install stable/chartmuseum
레파지토리 추가
helm repo add chartmuseum http://172.168.1.6:8080
helm repo list
차트 index update
helm repo update
4. 헬름 기본 구성도

4-1. 챠트
헬름 챠트는 단순히 특별한 디렉토리 구조로 정의된 YAML 템플릿 파일의 모음입니다. YAML 파일에는 Kubernetes Object를 구성하는 service, deployment 등이 정의되어 있습니다.
~>tree demo-chart/
demo-chart/
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── rbac.yaml
│ └── service.yaml
└── values.yaml
File structure of a Helm chart
4-2. 릴리즈
Helm 차트로 Kubernetes 클러스터에 설치된 애플리케이션
4-3. Repository
Helm chart 저장소 https://hub.kubeapps.com/, https://kubeapps.com/와 같은 공개 저장소와 조직 또는 개인이 구성할 수 있는 private 저장소가 있습니다.
# helm search wordpress
NAME CHART VERSION APP VERSION DESCRIPTION
stable/wordpress 5.7.0 5.1.1 Web publishing platform for building blogs
helm 차트 구조는 어떻게 생겼나요?
helm 차트는 정해진 파일 몇 개가 든 디렉터리입니다. 2026-10-02 20:48 에 Helm 3.19.0 으로 helm create mychart 를 돌려 보니 아래 구조가 만들어졌습니다.
mychart/
├── .helmignore
├── Chart.yaml
├── charts/
├── templates/
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── hpa.yaml
│ ├── httproute.yaml
│ ├── ingress.yaml
│ ├── service.yaml
│ ├── serviceaccount.yaml
│ └── tests/
│ └── test-connection.yaml
└── values.yaml
Chart.yaml: 차트 이름과 버전입니다. 만든 직후 값은apiVersion: v2,type: application,version: 0.1.0,appVersion: "1.16.0"이었습니다. Helm 문서는 apiVersion v2 를 Helm 3 이상이 필요한 차트라고 설명합니다.values.yaml: 템플릿이 읽는 기본 설정값입니다. 설치할 때-f나--set으로 덮어씁니다.templates/: 값과 합쳐져 쿠버네티스 매니페스트가 되는 템플릿입니다._helpers.tpl은 이름 규칙 같은 공용 조각이고NOTES.txt는 설치 뒤 보여 줄 안내문입니다.charts/: 이 차트가 기대는 다른 차트가 들어가는 자리입니다..helmignore: 패키징할 때 뺄 파일 목록입니다.
같은 차트를 helm template demo mychart 로 렌더하면 ServiceAccount, Service, Deployment, 테스트용 Pod 네 개만 나왔습니다. ingress, hpa, httproute 템플릿은 values.yaml 에서 꺼져 있어 빠집니다. helm lint mychart 는 실패 0건에 아이콘을 넣으라는 안내 한 줄이었습니다.
이 글 2장의 Tiller 설정은 Helm 2 기준입니다. Helm 3(2019년 11월)부터는 Tiller 가 없어서 helm 명령이 클러스터에 바로 설치하므로, Tiller 서비스 계정과 Tiller 구성 단계는 건너뛰면 됩니다(Helm 문서 Charts).
5. 마치며…
이번시간에는 HELM에 대해서 알아보는 시간을 갖었습니다. 헬름을 통해서 손쉽게 웬만한 application 구동에서부터 PV, PVC 셋팅까지 동적으로 모두 해주는것을 확인했습니다. 마치 만들어진 완제품을 선택적으로 골라서 cluster내에 올리는 것 같았습니다.
다음시간에는 헬름의 명령어에 대해서 알아보는 시간을 갖도록 하겠습니다.
새 글이 올라오면 Threads @wonizz.ai 에도 올립니다. 팔로우해 두면 피드에서 바로 볼 수 있습니다.