Helm Chart 구성하기
Helm Chart 구조와 주요 파일
sample_chart/
├─ Chart.yaml # 차트 메타데이터
├─ values.yaml # 기본값 정의
├─ charts/ # 의존성 차트 저장소
├─ templates/ # 쿠버네티스 리소스 템플릿
│ └─ _helpers.tpl # 템플릿 헬퍼 함수 (선택)
├─ templates/NOTES.txt # 설치 후 안내 메시지 (선택)
└─ README.md # 설명 파일 (선택)
Chart.yaml 차트의 이름, 버전, API 버전, 설명 등을 정의하는 메타데이터 파일.
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
version: 0.1.0
values.yaml 차트에서 사용할 기본 변수 값.
--set
이나-f
옵션으로 덮어쓸 수 있음.
replicaCount: 2
image:
repository: nginx
tag: "1.21"
charts/ 서브 차트(의존성 차트)를 저장하는 디렉토리.
helm dependency update
실행 시 다운로드됨.templates/ 실제 쿠버네티스 매니페스트 템플릿이 위치.
_helpers.tpl
: 재사용 가능한 템플릿 함수 모음.NOTES.txt
: 차트 설치 후 사용자에게 표시할 메시지.
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
README.md 차트에 대한 설명 문서.
Helm Chat 설치 및 디렉토리 구성하기
1. Install Helm
MacOS:
brew install helm
Linux:
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
⇒ helm version
2. Create Chart
# create helm chart
helm create mychart

# Local Render & Validate
helm lint mychart # 정적 점검
helm template myrelease mychart -f ./mychart/values.yaml # 렌더링 결과 미리보기
---
# Source: mychart/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: myrelease-mychart
labels:
helm.sh/chart: mychart-0.1.0
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: myrelease
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
automountServiceAccountToken: true
---
# Source: mychart/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: myrelease-mychart
labels:
helm.sh/chart: mychart-0.1.0
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: myrelease
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
spec:
type: ClusterIP
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: myrelease
# Package
helm package mychart
# 출력: mychart-0.1.0.tgz (Chart.yaml의 version 사용)
Helm Chart Repository 구성하기
Helm 레포지토리는 차트(.tgz 패키지)들의 인덱스 목록(index.yaml) 과 바이너리 파일(.tgz)을 HTTP/OCI 프로토콜로 제공하는 저장소 (~ Docker Registry)
클래식(HTTP) 레포: 정적 호스팅으로
index.yaml
+*.tgz
제공
# Make index.yaml file
helm repo index . --url https://example.github.io/charts-repo
helm repo index . --url https://example.github.io/charts-repo --merge index.yaml
OCI 레포: 컨테이너 레지스트리를 기반으로 차트를 push/pull
클래식 Helm 레포
정적 웹(예: GitHub Pages)
index.yaml
+ *.tgz
간단·보편적, Argo/Helm 즉시 호환
index 병합/URL 관리 필요
OCI 레포
컨테이너 레지스트리
oci://…/chart:version
권한/감사 일원화, index 불필요
레지스트리 인증/권한 셋업
Git(원시 차트)
GitHub 등
Chart.yaml
/templates/
패키징 無, PR 워크플로우 친화
“Helm 레포”는 아님(Argo가 Git 읽음)
** ArgoCD 에서는 패키징하지않고 깃헙 레포의 구조만으로 배포가 가능 (ArgoCD 쪽 문서 참조)
Last updated
Was this helpful?