์ฟ ๋ฒ๋คํฐ์ค ํจํค์ง ๋งค๋์ Helm 3 ์ต์ ๊ธฐ์ค ์ด๋ณด์ ์๋ฒฝ ๊ฐ์ด๋: ํ์ ์ฌ์ ์ค์น, Chart-Repository-Release 3๋ ๊ฐ๋
, ๊ณต์ ์ฐจํธ ๋ฐฐํฌ, values.yaml ์ปค์คํฐ๋ง์ด์ง, ๋๋ง์ ์ฐจํธ ์์ฑ(Scaffolding), Go ํ
ํ๋ฆฟ ๋ฌธ๋ฒ & Sprig ํจ์, ์์กด์ฑ ์๋ธ์ฐจํธ, ๋กค๋ฐฑ, OCI ๋ฐฐํฌ ๋ฐ ์ค๋ฌด CLI ์นํธ์ํธ
## 1. ํ์ ์ฌ์ ์ค์น ์๊ฑด & ํ๊ฒฝ ๊ตฌ์ฑ (Prerequisites)
Helm(ํฌ๋ฆ)์ **"์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ํ apt/yum/npm"**๊ณผ ๊ฐ์ ๊ณต์ ํ์ค ํจํค์ง ๋งค๋์ ์
๋๋ค. ๋ณต์กํ ์์ญ ๊ฐ์ ์ฟ ๋ฒ๋คํฐ์ค YAML ๋งค๋ํ์คํธ(Deployment, Service, Ingress, ConfigMap ๋ฑ)๋ฅผ ๋จ ํ๋์ ์ฐจํธ(Chart)๋ก ๋ฌถ์ด ๋ฐฐํฌ, ์
๊ทธ๋ ์ด๋, ๋กค๋ฐฑ์ ์๋ํํฉ๋๋ค.
### โธ๏ธ 1. ์ฌ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์ฐ๊ฒฐ ํ์ธ
Helm์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ํต์ ํ๋ฏ๋ก, ๋ก์ปฌ ๋๋ ์๊ฒฉ ํด๋ฌ์คํฐ์ `kubectl`์ด ์ ์ ์ฐ๊ฒฐ๋์ด ์์ด์ผ ํฉ๋๋ค.
```bash
# ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์ฐ๊ฒฐ ์ํ ํ์ธ (Docker Desktop k8s, Minikube, Kind ๋ฑ)
kubectl cluster-info
# ํ์ฌ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ํ ํ์ธ (Ready ์ํ์ฌ์ผ ํจ)
kubectl get nodes
```
---
### ๐ป 2. OS๋ณ Helm 3 ํด๋ผ์ด์ธํธ ์ค์น
| ์ด์์ฒด์ (OS) | ์ค์น ๋ช
๋ น์ด / ๋ฐฉ๋ฒ |
| :--- | :--- |
| **Windows** | ํฐ๋ฏธ๋(๊ด๋ฆฌ์)์์ Chocolatey ๋๋ Scoop ์คํ:<br>`choco install kubernetes-helm`<br>๋๋ `scoop install helm` |
| **macOS** | Homebrew๋ฅผ ํตํ ์ค์น:<br>`brew install helm` |
| **Linux (Ubuntu/Debian)** | ๊ณต์ ์คํฌ๋ฆฝํธ ๋๋ APT ์ค์น:<br>`curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 \| bash` |
์ค์น ํ ์ ์ ๋์ ๋ฐ ๋ฒ์ ํ์ธ:
```bash
helm version
# ์ถ๋ ฅ ์์: version.BuildInfo{Version:"v3.16.2", GitCommit:"...", GitTreeState:"clean", GoVersion:"go1.22.7"}
```
---
## 2. Helm 3 ํต์ฌ ๊ฐ๋
& ์ํคํ
์ฒ (Mental Model)
Helm์ ์๋ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ํ 3๋ ํต์ฌ ๊ฐ์ฒด์ ํ์ผ ๊ตฌ์กฐ์
๋๋ค.
```text
[Helm 3 ์ํคํ
์ฒ ๋ฉํ ๋ชจ๋ธ]
โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Helm Repository โ โ Kubernetes Cluster โ
โ (์ฐจํธ ์ ์ฅ์) โ โ โ
โ - ArtifactHub โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ - Bitnami Repo โ โ โ Release: "my-nginx" (์ธ์คํด์ค) โ โ
โโโโโโโโโโฌโโโโโโโโโโ โ โ - Deployment (ํ๋ 3๊ฐ) โ โ
โ helm repo add โ โ - Service (NodePort) โ โ
โผ โ โ - Ingress (๋๋ฉ์ธ ๋ผ์ฐํ
) โ โ
โโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Helm Chart โ helm install โ โฒ โ
โ (๋๋ฉด / ํ
ํ๋ฆฟ) โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ + values.yaml โ --values โ * Helm 3๋ ๋ณ๋ Tiller ์๋ฒ ์์ด โ
โ (์ฌ์ฉ์ ์ค์ ๊ฐ) โ โ kubectl ๊ถํ๊ณผ Secret์ผ๋ก ์ํ ์ง์ ๋ณด๊ด! โ
โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
### ๐ 3๋ ํต์ฌ ๊ฐ๋
1. **Chart (์ฐจํธ)**: ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ์ผ๋ค์ ๋ฌถ์(ํจํค์ง ์ค๊ณ๋).
2. **Repository (์ ์ฅ์)**: ๋น๋๋ ์ฐจํธ๋ค์ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค๊ณผ ๊ณต์ ํ๊ณ ๋ด๋ ค๋ฐ๋ ์จ๋ผ์ธ ์ ์ฅ์ (์: Artifact Hub, Bitnami).
3. **Release (๋ฆด๋ฆฌ์ค)**: ํน์ ์ฐจํธ๊ฐ `values.yaml` ์ค์ ๊ฐ๊ณผ ๊ฒฐํฉํ์ฌ **ํด๋ฌ์คํฐ ์์ ์ค์ ๋ก ๋ฐฐํฌ๋์ด ์คํ ์ค์ธ ๊ตฌ์ฒด์ ์ธ ์ธ์คํด์ค**. (๋์ผํ Nginx ์ฐจํธ๋ก `dev-nginx`, `prod-nginx` ๋ฑ ์ฌ๋ฌ ๋ฆด๋ฆฌ์ค ์์ฑ ๊ฐ๋ฅ)
### ๐ ํ์ค Helm Chart ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
```text
my-chart/
โโโ Chart.yaml # ์ฐจํธ์ ์ด๋ฆ, ๋ฒ์ , ์ค๋ช
๋ฑ ๋ฉํ๋ฐ์ดํฐ (ํ์)
โโโ values.yaml # ํ
ํ๋ฆฟ์ ์ฃผ์
๋ ๊ธฐ๋ณธ ์ค์ ๊ฐ ๋ณ์ ์ ์ (ํ์)
โโโ charts/ # ์ด ์ฐจํธ๊ฐ ์์กดํ๋ ์๋ธ์ฐจํธ(Subcharts) ๋ณด๊ด ํด๋
โโโ templates/ # ์ค์ ์ฟ ๋ฒ๋คํฐ์ค YAML ํ
ํ๋ฆฟ๋ค์ด ์์นํ๋ ํต์ฌ ํด๋
โ โโโ deployment.yaml # Pod ๋ฐฐํฌ ํ
ํ๋ฆฟ
โ โโโ service.yaml # ๋คํธ์ํฌ ์๋น์ค ํ
ํ๋ฆฟ
โ โโโ _helpers.tpl # ๊ณตํต์ผ๋ก ์ฌ์ฌ์ฉํ ํ
ํ๋ฆฟ ํฌํผ ํจ์ ์กฐ๊ฐ๋ค
โ โโโ NOTES.txt # helm install ์๋ฃ ์ ์ฌ์ฉ์ ํ๋ฉด์ ์ถ๋ ฅ๋๋ ์๋ด๋ฌธ
โโโ .helmignore # ํจํค์ง ์ ์ ์ธํ ํ์ผ ๋ชฉ๋ก (.gitignore์ ์ ์ฌ)
```
---
## 3. [์ด๋ณด์ 1๋จ๊ณ] ๊ณต์ ์ฐจํธ ์ค์น & ๋ฆด๋ฆฌ์ค ๋ผ์ดํ์ฌ์ดํด
๊ฐ์ฅ ๊ฒ์ฆ๋ Bitnami ์ ์ฅ์์์ Nginx ์น์๋ฒ๋ฅผ ๊ฒ์ํ๊ณ ์ค์น, ์กฐํ, ์ญ์ ํ๋ ์ ์ฒด ๋ผ์ดํ์ฌ์ดํด์
๋๋ค.
```bash
# 1. ์๊ฒฉ ์ฐจํธ ์ ์ฅ์(Repository) ์ถ๊ฐ
helm repo add bitnami https://charts.bitnami.com/bitnami
# 2. ์ ์ฅ์ ์ต์ ์ธ๋ฑ์ค ์
๋ฐ์ดํธ
helm repo update
# 3. ์ํ๋ ์ฐจํธ ๊ฒ์ (Search)
helm search repo nginx
# 4. ์ฐจํธ ๊ธฐ๋ณธ ์ ๋ณด ๋ฐ ์์ ๊ฐ๋ฅํ values ์ค์ ํ์ธ
helm show values bitnami/nginx
# 5. ํด๋ฌ์คํฐ์ ์ค์น (Release ์ด๋ฆ: my-web-server)
helm install my-web-server bitnami/nginx
# 6. ํ์ฌ ๋ฐฐํฌ๋ ๋ฆด๋ฆฌ์ค ๋ชฉ๋ก ํ์ธ (List)
helm list
# 7. ์ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ๋ฐ ์๋น์ค ์์ฑ ์ํ ํ์ธ
kubectl get pods,svc -l app.kubernetes.io/instance=my-web-server
# 8. ๋ฆด๋ฆฌ์ค ์ํ ์์ธ ํ์ธ (Status)
helm status my-web-server
# 9. ๋ฆด๋ฆฌ์ค ์ญ์ (Uninstall - ์ฐ๊ฒฐ๋ Pod, Service ๋ฑ์ด ์ผ๊ด ์ ๋ฆฌ๋จ)
helm uninstall my-web-server
```
---
## 4. [์ด๋ณด์ 2๋จ๊ณ] values.yaml์ ํตํ ์ค์ ์ปค์คํฐ๋ง์ด์ง
๊ณต์ ์ฐจํธ์ ๊ธฐ๋ณธ ์ค์ ๋์ , ๋ด ํ๊ฒฝ์ ๋ง๊ฒ ๋ ํ๋ฆฌ์นด ์๋ ํฌํธ๋ฅผ ๋ณ๊ฒฝํ๋ ์ค๋ฌด ๋ฐฉ๋ฒ์
๋๋ค.
### ๐ ๏ธ ์ค์ ๊ฐ์ ๋ณ๊ฒฝํ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ
1. **๋ช
๋ น์ค ํ๋๊ทธ (`--set`)**: ๋จ์ผ ๋ณ์ ๋ณ๊ฒฝ ์ ์ ์ฉ
```bash
helm install my-nginx bitnami/nginx --set replicaCount=3
```
2. **ํ์
๊ฐ์ ์ง์ (`--set-string`)**: ์ซ์ ํํ์ ๋ฌธ์์ด ํฌํธ ์ง์ ์
```bash
helm install my-nginx bitnami/nginx --set-string service.port="8080"
```
3. **์ปค์คํ
ํ์ผ ์ ๋ฌ (`-f` / `--values`)**: **์ค๋ฌด 1์์ ๊ถ์ฅ ๋ฐฉ์**
### ๐ ์ปค์คํ
์ค์ ํ์ผ ์์ฑ: `my-values.yaml`
```yaml
# my-values.yaml
replicaCount: 2
service:
type: NodePort
nodePorts:
http: "30080"
resources:
limits:
cpu: 250m
memory: 256Mi
requests:
cpu: 100m
memory: 128Mi
```
### ๐ ๋ฐฐํฌ ๋ฐ ๋ฌด์ค๋จ ์
๊ทธ๋ ์ด๋ (Upgrade)
```bash
# 1. ์ปค์คํ
values ํ์ผ๋ก ์ค์น
helm install my-nginx bitnami/nginx -f my-values.yaml
# 2. ์ค์ ํ์ผ ์์ ํ ๋ฌด์ค๋จ ์
๊ทธ๋ ์ด๋ ๋ฐ์ (helm upgrade)
helm upgrade my-nginx bitnami/nginx -f my-values.yaml
# ํ: ์์ผ๋ฉด ์ค์นํ๊ณ ์์ผ๋ฉด ์
๊ทธ๋ ์ด๋ํ๋ ๋ง๋ฅ ๋ช
๋ น์ด (CI/CD ํ์)
helm upgrade --install my-nginx bitnami/nginx -f my-values.yaml
```
---
## 5. [์ด๋ณด์ 3๋จ๊ณ] ๋๋ง์ ์ฒซ Helm Chart ๋ง๋ค๊ธฐ (Scaffolding)
๋ด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ๊ธฐ ์ํด ์ฐจํธ ๋ณด์ผ๋ฌํ๋ ์ดํธ๋ฅผ ์์ฑํ๊ณ ๊ฒ์ฆํ๋ ์ค์ ๋จ๊ณ์
๋๋ค.
```bash
# 1. ์ ์ฐจํธ ์์ฑ ์ค์บํด๋ฉ
helm create my-app
cd my-app
```
์์ฑ๋ `my-app` ๋๋ ํ ๋ฆฌ์ ํต์ฌ ํ์ผ๋ค์ ์ดํด๋ด
๋๋ค:
### ๐ `Chart.yaml` (์ฐจํธ ๋ฉํ๋ฐ์ดํฐ)
```yaml
apiVersion: v2
name: my-app
description: ๋์ ์ฒซ ๋ฒ์งธ ์ฌ๋ด ๋ง์ดํฌ๋ก์๋น์ค Helm Chart
type: application
version: 0.1.0 # ๐ ํฌ๋ฆ ์ฐจํธ ์์ฒด์ ๋ฒ์ (SemVer)
appVersion: "1.0.0" # ๐ ๋ฐฐํฌํ ์ค์ ๋์ปค ์ปจํ
์ด๋ ์ด๋ฏธ์ง ํ๊ทธ ๋ฒ์
```
### ๐ `values.yaml` (์ฌ์ฉ์ ์
๋ ฅ ๊ธฐ๋ณธ๊ฐ)
```yaml
replicaCount: 2
image:
repository: nginx
pullPolicy: IfNotPresent
tag: "1.25-alpine"
service:
type: ClusterIP
port: 80
```
### ๐งช ๋ฐฐํฌ ์ ๋ฌธ๋ฒ ๊ฒ์ฆ & ๋ ๋๋ง ์๋ฎฌ๋ ์ด์
```bash
# 1. ๋ฆฐํธ ๊ฒ์ฌ (๋ฌธ๋ฒ ๋ฐ ๊ตฌ์กฐ์ ์ค๋ฅ ํ์ง)
helm lint ./
# 2. ํ
ํ๋ฆฟ ๋ ๋๋ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ (ํด๋ฌ์คํฐ ์ ์ก ์์ด ์์ฑ๋ YAML ์ฝ์ ์ถ๋ ฅ)
helm template my-release ./
# 3. ๋๋ผ์ด ๋ฐ (ํด๋ฌ์คํฐ์ ์ ์ฉํ์ง ์๊ณ API ์๋ฒ ์ ํจ์ฑ๋ง ํ
์คํธ)
helm install my-release ./ --dry-run
```
---
## 6. [์ด๋ณด์ 4๋จ๊ณ] ํ
ํ๋ฆฟ ์ ์ด๋ฌธ & ํ์ ๋ด์ฅ ํจ์
`templates/*.yaml` ํ์ผ ๋ด์์ ๋์ ์ผ๋ก YAML์ ์ ์ดํ๋ Go ํ
ํ๋ฆฟ + Sprig ํจ์ ํต์ฌ ๋ฌธ๋ฒ์
๋๋ค.
### ๐งฉ 1. ๊ธฐ๋ณธ ๊ฐ ์นํ ๋ฐ ๋ด์ฅ ๊ฐ์ฒด
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
# ๋ฆด๋ฆฌ์ค ์ด๋ฆ๊ณผ ์ฐจํธ ์ด๋ฆ ์๋ ๊ฒฐํฉ
name: {{ .Release.Name }}-{{ .Chart.Name }}
namespace: {{ .Release.Namespace }}
spec:
replicas: {{ .Values.replicaCount }}
```
### โก 2. ํ์ดํ(`|`)์ ์ ์ฉํ ํจ์
- **default**: ๊ฐ์ด ์์ ๋ ๊ธฐ๋ณธ๊ฐ ํ ๋น
```yaml
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default "latest" }}"
```
- **quote**: ์์ ํ๊ฒ ๋ฐ์ดํ๋ก ๊ฐ์ธ๊ธฐ
```yaml
PORT: {{ .Values.service.port | quote }}
```
- **toYaml & nindent (๊ฐ์ฅ ์ค์)**: ๋ธ๋ก ์ ์ฒด๋ฅผ ๋ค์ฌ์ฐ๊ธฐํ์ฌ ์ฃผ์
```yaml
resources:
{{- toYaml .Values.resources | nindent 12 }}
```
*(โป `-` ๊ธฐํธ๋ ์๋ค ๊ณต๋ฐฑ๊ณผ ๊ฐํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํด ์ค๋๋ค)*
### ๐ 3. ์กฐ๊ฑด๋ฌธ (`if / else / end`)
```yaml
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Release.Name }}-ingress
spec:
rules:
- host: {{ .Values.ingress.host | quote }}
{{- else }}
# Ingress๊ฐ ๋นํ์ฑํ๋์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋์ง ์์ต๋๋ค.
{{- end }}
```
### ๐ 4. ๋ฐ๋ณต๋ฌธ (`range`)
```yaml
env:
{{- range $key, $value := .Values.extraEnv }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
```
---
## 7. ์ฐจํธ ์์กด์ฑ ๊ด๋ฆฌ (Subcharts & Dependencies)
๋ด ์น ์ฑ์ Redis ์บ์๋ PostgreSQL DB ์ฐจํธ๋ฅผ ํจ๊ป ๋ฌถ์ด์ ์ํด๋ฆญ์ผ๋ก ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
### ๐ `Chart.yaml`์ ์์กด์ฑ ์ ์ธ
```yaml
apiVersion: v2
name: my-app
version: 0.1.0
appVersion: "1.0.0"
dependencies:
- name: redis
version: "19.6.4"
repository: "https://charts.bitnami.com/bitnami"
condition: redis.enabled # values.yaml์์ ์ผ๊ณ ๋ ์ ์๋ ํ๋๊ทธ
```
### ๐ฆ ์์กด์ฑ ๋น๋ ๋ฐ ๋๊ธฐํ
```bash
# ์ ์ธ๋ ์๋ธ์ฐจํธ๋ค์ charts/ ํด๋๋ก ์๋ ๋ค์ด๋ก๋
helm dependency update ./
# ๋น๋ ํ์ธ
helm dependency build ./
```
---
## 8. ๋กค๋ฐฑ & ๋ฆฌ๋น์ ํ์คํ ๋ฆฌ ๊ด๋ฆฌ (Rollback)
์๋ชป๋ ์ค์ ์ด๋ ์ด๋ฏธ์ง ๋ฒ๊ทธ๋ก ๋ฐฐํฌ์ ์คํจํ์ ๋, **1์ด ๋ง์ ์ด์ ์ ์ ์ํ๋ก ๋๋๋ฆฌ๋** Helm์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์
๋๋ค.
```bash
# 1. ๋ฆด๋ฆฌ์ค์ ๋ชจ๋ ๊ณผ๊ฑฐ ๋ฐฐํฌ ์ด๋ ฅ(Revision) ์กฐํ
helm history my-app
# ์ถ๋ ฅ ์์:
# REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
# 1 Tue Oct 6 21:00:00 2026 superseded my-app-0.1.0 1.0.0 Install complete
# 2 Tue Oct 6 21:10:00 2026 deployed my-app-0.2.0 2.0.0 Upgrade failed!
# 2. ํน์ ๋ฆฌ๋น์ (Revision 1)์ผ๋ก ์ฆ์ ๋กค๋ฐฑ
helm rollback my-app 1
# 3. ๋กค๋ฐฑ ์๋ฃ ํ ์ํ ํ์ธ (์๋ก์ด Revision 3์ด ์์ฑ๋๋ฉด์ 1๋ฒ ์ค์ ์ผ๋ก ๋ณต์๋จ)
helm status my-app
```
---
## 9. OCI ๋ ์ง์คํธ๋ฆฌ (Docker Hub / Harbor) ํจํค์ง & ๋ฐฐํฌ
Helm 3.8+๋ถํฐ๋ ๋ณ๋ ChartMuseum ์์ด **๊ธฐ์กด ๋์ปค ์ปจํ
์ด๋ ๋ ์ง์คํธ๋ฆฌ(OCI)**์ ํฌ๋ฆ ์ฐจํธ๋ฅผ ์ํฐํฉํธ๋ก ์ง์ ํธ์ํ๊ณ ๊ณต์ ํ ์ ์์ต๋๋ค.
```bash
# 1. ์ฐจํธ ๋๋ ํ ๋ฆฌ๋ฅผ .tgz ์์ถ ํ์ผ๋ก ํจํค์ง
helm package ./my-app
# ์์ฑ ํ์ผ: my-app-0.1.0.tgz
# 2. OCI ๋ ์ง์คํธ๋ฆฌ ๋ก๊ทธ์ธ (Docker Hub, AWS ECR, Harbor ๋ฑ)
helm registry login registry-1.docker.io -u <์ฌ์ฉ์๋ช
>
# 3. OCI ๋ ์ง์คํธ๋ฆฌ๋ก ์ฐจํธ ํธ์
helm push my-app-0.1.0.tgz oci://registry-1.docker.io/<์ฌ์ฉ์๋ช
>
# 4. OCI ๋ ์ง์คํธ๋ฆฌ์์ ์ฐจํธ ์ง์ ๋ฐฐํฌ
helm install my-app oci://registry-1.docker.io/<์ฌ์ฉ์๋ช
>/my-app --version 0.1.0
```
---
## 10. CLI ํ์ ์นํธ์ํธ ํ
์ด๋ธ
| ๋ช
๋ น ๋ถ๋ฅ | ๋ช
๋ น์ด | ์ค๋ช
|
| :--- | :--- | :--- |
| **์ ์ฅ์** | `helm repo add <name> <url>` | ์๊ฒฉ ์ฐจํธ ์ ์ฅ์ ๋ฑ๋ก |
| | `helm repo update` | ๋ฑ๋ก๋ ์ ์ฅ์์ ์ฐจํธ ๋ชฉ๋ก ์ต์ ํ |
| **๊ฒ์** | `helm search repo <keyword>` | ๋ก์ปฌ ์ ์ฅ์์์ ์ฐจํธ ๊ฒ์ |
| | `helm search hub <keyword>` | ๊ณต์ Artifact Hub ์ ์ฒด์์ ์ฐจํธ ๊ฒ์ |
| **์ค์น & ์
๊ทธ๋ ์ด๋** | `helm install <release> <chart>` | ์ ๋ฆด๋ฆฌ์ค ์ค์น |
| | `helm upgrade <release> <chart> -f values.yaml` | ์ค์ ๋ฐ์ ๋ฌด์ค๋จ ์
๊ทธ๋ ์ด๋ |
| | `helm upgrade --install <release> <chart>` | ์์ผ๋ฉด ์ค์น, ์์ผ๋ฉด ์
๊ทธ๋ ์ด๋ (CI/CD ์ถ์ฒ) |
| **์กฐํ & ์ํ** | `helm list -A` | ์ ์ฒด ๋ค์์คํ์ด์ค ๋ฐฐํฌ ๋ฆด๋ฆฌ์ค ์กฐํ |
| | `helm status <release>` | ๋ฆด๋ฆฌ์ค ์์ธ ์ ๋ณด ๋ฐ ์๋ด๋ฌธ(NOTES) ํ์ธ |
| | `helm get values <release>` | ํด๋น ๋ฆด๋ฆฌ์ค์ ์ ์ฉ๋ ์ค์ values ๊ฐ ์กฐํ |
| **๋ณต๊ตฌ & ๋กค๋ฐฑ** | `helm history <release>` | ๋ฐฐํฌ ๋ฆฌ๋น์ ์ด๋ ฅ ํ์ธ |
| | `helm rollback <release> <revision>` | ํน์ ๋ฆฌ๋น์ ์ผ๋ก ์ฆ์ ์๋ณต |
| **์ญ์ ** | `helm uninstall <release>` | ๋ฆด๋ฆฌ์ค ๋ฐ ๊ด๋ จ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค ์ผ๊ด ์ญ์ |
---
## 11. ์ค๋ฌด ์ฃผ์์ฌํญ & ํ๋ก๋์
์ฒดํฌ๋ฆฌ์คํธ
| ์ ๊ฒ ํญ๋ชฉ | ๊ถ์ฅ ์ฌํญ | ์ด์ |
| :--- | :--- | :--- |
| **๋ค์ฌ์ฐ๊ธฐ(Indent) ์ฃผ์** | `nindent` ์ซ์ ๊ณ์ฐ์ ์๊ฒฉํ๊ฒ ๊ฒ์ฆ (`helm template` ํ์ธ) | YAML ํน์ฑ์ 1์นธ๋ง ์ด๊ธ๋๋ ๋ฌธ๋ฒ ์๋ฌ๋ก ๋ฐฐํฌ ์ฐจ๋จ |
| **๋น๋ฐ๋ฒํธ ํ๋ฌธ ๋ฐฉ์ง** | DB ๋น๋ฐ๋ฒํธ๋ `values.yaml`์ ์ง์ ์ ์ง ๋ง๊ณ `ExternalSecrets` ๋๋ `SealedSecrets` ์ฌ์ฉ | Git ์ ์ฅ์์ ๋น๋ฐ๋ฒํธ๊ฐ ๋
ธ์ถ๋๋ ๋ณด์ ์ฌ๊ณ ๋ฐฉ์ง |
| **์์ ๋ฐฐํฌ ํ๋๊ทธ** | CI/CD ๋ฐฐํฌ ์ `--atomic --timeout 5m` ์ต์
ํ์ ๋ถ์ฌ | Pod ๊ธฐ๋ ์คํจ ์ ๋ฐฐํฌ๊ฐ ๋ฉ์ถ์ง ์๊ณ ์๋์ผ๋ก ์ง์ ๋ฒ์ ๋กค๋ฐฑ |
| **๋ค์์คํ์ด์ค ๊ฒฉ๋ฆฌ** | `helm install <name> <chart> -n <namespace> --create-namespace` | default ๋ค์์คํ์ด์ค ์ค์ผ ๋ฐฉ์ง ๋ฐ ํ๊ฒฝ๋ณ(dev/prod) ๋ถ๋ฆฌ |
| **appVersion๊ณผ version ๊ตฌ๋ถ** | ์ปจํ
์ด๋ ์ด๋ฏธ์ง ํ๊ทธ๋ `appVersion`, ์ฐจํธ ํ
ํ๋ฆฟ ๋ณ๊ฒฝ์ `version` ์ฌ๋ฆฌ๊ธฐ | SemVer ๊ท๊ฒฉ์ ์ค์ํด์ผ Helm ์์กด์ฑ ํด์ ์ถฉ๋ ์๋ฐฉ |
์๊ฒฌ ๋ฐ ์ง๋ฌธ
0์์ง ๋ฑ๋ก๋ ์๊ฒฌ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋๊ธ์ ๋จ๊ฒจ๋ณด์ธ์!
๋๊ธ ์์
๋๊ธ ์ญ์