๐ ํ๋ก๋น์ ๋ - Helm
๐ณ๏ธโ๐ [๊ถ๊ธํ์ ]
๐[๋ชฉ์ฐจ]
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
vagrant@slave1:~$ helm version
version.BuildInfo{Version:"v3.17.1", GitCommit:"980d8ac1939e39138101364400756af2bdee1da5", GitTreeState:"clean", GoVersion:"go1.23.5"}
export HELM_VERSION="v3.8.0"
wget https://get.helm.sh/helm-$HELM_VERSION-linux-amd64.tar.gz
tar -xzf helm-$HELM_VERSION-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
vagrant@slave4:~$ helm version
version.BuildInfo{Version:"v3.8.0", GitCommit:"d14138609b01886f544b2025f5000351c9eb092e", GitTreeState:"clean", GoVersion:"go1.17.5"}
helm repo add trino https://trinodb.github.io/charts/
helm pull trino/trino --version 1.39.0 --untar
cd trino
Helm์ Chart + values.yaml ์กฐํฉ์ผ๋ก Kubernetes ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ "๋ฆด๋ฆฌ์ค(Release)"๋ผ๋ ๋จ์๋ก ๊ด๋ฆฌํ๋ค.
๋ฆด๋ฆฌ์ค(Release)๋ Chart๋ฅผ ํด๋ฌ์คํฐ์ ์ค์นํ ์ธ์คํด์ค๋ก Chart ์ด๋ฆ๊ณผ ์ฌ์ฉ์ ๊ฐ(values)์ ์กฐํฉ์ผ๋ก ์์ฑ๋๋ค.
helm install myapp ./mychart -f prod-values.yaml
โ ์ด๋ myapp์ด ๋ฆด๋ฆฌ์ค ์ด๋ฆ์ด ๋จ
Helm์ Chart๋ ๋จ์ํ YAML์ด ์๋๋ผ Go ํ ํ๋ฆฟ ์์ง์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
mychart/
โโโ Chart.yaml # Chart ๋ฉํ ์ ๋ณด
โโโ values.yaml # ๊ธฐ๋ณธ ๊ฐ ์ค์
โโโ templates/
โโโ deployment.yaml # Go ํ
ํ๋ฆฟ
โโโ service.yaml
โโโ _helpers.tpl # ๊ณตํต ํ
ํ๋ฆฟ ์กฐ๊ฐ
apiVersion: v1
kind: Service
metadata:
name: {{ include "mychart.fullname" . }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
ํ ํ๋ฆฟ์์ .Values๋ values.yaml์ key์ ์ ๊ทผํ๋ ๊ตฌ๋ฌธ์ด๋ค.
helm list
helm status <RELEASE_NAME>
helm get all <RELEASE_NAME>
helm get manifest <RELEASE_NAME>
helm get values <RELEASE_NAME>
helm history <RELEASE_NAME>
helm get manifest myapp
โ Helm์ด ๋ ๋๋งํ์ฌ Kubernetes์ ์ ์ฉํ ๋ฆฌ์์ค๋ค์ ๊ทธ๋๋ก ๋ณด์ฌ์ค๋ค.
Helm์ ๋ฆด๋ฆฌ์ค ์ ๋ณด๋ฅผ ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ์ ์ฅํ๋ค
kubectl get secret -n <namespace> -l "owner=helm"
์ด๋ ๊ฒ ์ ์ฅ๋ Secret์๋ ๋ค์ ์ ๋ณด๊ฐ base64๋ก ์ธ์ฝ๋ฉ๋์ด ๋ค์ด ์๋ค
Secret ๋ด์ฉ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์๋์ฒ๋ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
kubectl get secret sh.helm.release.v1.myapp.v1 -n default -o json | jq '.data.release' | base64 -d | base64 -d | less
| ๋ช ๋ น์ด | ๋ชฉ์ | ์ค๋ช | ํด๋ฌ์คํฐ ์ํฅ ์ฌ๋ถ |
|---|---|---|---|
helm lint ./mychart | ์ ์ ๊ฒ์ฆ | Chart ๊ตฌ์กฐ ๋ฐ ํ ํ๋ฆฟ ๋ฌธ๋ฒ ์ค๋ฅ ์ฒดํฌ | ์๋์ค |
helm template ./mychart -f values.yaml | ๋ ๋๋ง ํ์ธ | Helm ํ ํ๋ฆฟ์ ์ค์ Kubernetes YAML๋ก ๋ณํํ์ฌ ์ถ๋ ฅ | ์๋์ค |
helm install RELEASE ./mychart --dry-run --debug -f values.yaml | ์๋ฎฌ๋ ์ด์ | ์ค์ ์ค์น ์์ด ๋ ๋๋ง, ๋ณํฉ๋ values, ๋ฆด๋ฆฌ์ค ๋ฉํ ํ์ธ | ์๋์ค |
helm get manifest RELEASE | ์ ์ฉ ๊ฒฐ๊ณผ ํ์ธ | ์ค์น๋ Helm ๋ฆด๋ฆฌ์ค๊ฐ ์์ฑํ ๋ฆฌ์์ค ๋ชฉ๋ก์ ์ถ๋ ฅ | ์ (์ค์น ํ ์ฌ์ฉ) |
helm get values RELEASE --all | ์ ์ฉ๋ ๊ฐ ํ์ธ | ๋ฆด๋ฆฌ์ค์ ์ฌ์ฉ๋ ๋ชจ๋ values ํ์ธ (๊ธฐ๋ณธ๊ฐ + override ํฌํจ) | ์ |
helm get all RELEASE | ์ ์ฒด ์ ๋ณด ํ์ธ | values, manifest, notes ๋ฑ ์ ์ฒด ๋ฆด๋ฆฌ์ค ์ ๋ณด ์ถ๋ ฅ | ์ |
| ๊ธฐ๋ฅ | ๋ช ๋ น์ด / ํ ํ๋ฆฟ | ์ค๋ช |
|---|---|---|
| ๋ค์ค values ํ์ผ ๋ณํฉ | -f base.yaml -f dev.yaml | ์ฌ๋ฌ values.yaml ํ์ผ์ ๊ณ์ธต์ ์ผ๋ก ์ ์ฉ (๋ค์ ์๋ ๊ฒ์ด ์ฐ์ ์์ ๋์) |
| CLI ๊ฐ ์ค๋ฒ๋ผ์ด๋ | --set image.tag=1.2.3 | ๋น ๋ฅด๊ฒ ํน์ ํ๋ผ๋ฏธํฐ๋ง ๋ฎ์ด์ธ ์ ์์ |
| ์กฐ๊ฑด๋ถ ๋ฆฌ์์ค ์์ฑ | {{- if .Values.enabled }} ... {{- end }} | ํน์ ๊ฐ์ด true์ผ ๋๋ง ๋ฆฌ์์ค ์์ฑ๋จ |
ํ
ํ๋ฆฟ ์ฌ์ฌ์ฉ (_helpers.tpl) | {{ include "mychart.fullname" . }} | ๊ณตํต ๋ค์ด๋ฐ, ๋ผ๋ฒจ ๋ฑ์ ์ ์ํ์ฌ ๋ฐ๋ณต ์ ๊ฑฐ ๋ฐ ์ ์ง๋ณด์ ์ฉ์ด |
ํ์ผ ํฌํจ (.Files.Get) | {{ .Files.Get "config/config.json" }} | ์ธ๋ถ ์ค์ ํ์ผ์ ConfigMap ๋ฑ์ ์ฝ์ ๊ฐ๋ฅ |
| Hooks (์ฌ์ /์ฌํ ์์ ) | annotations: "helm.sh/hook": pre-install | Job ๋ฑ์ ์ฌ์ฉํด DB ๋ง์ด๊ทธ๋ ์ด์ , ์ด๊ธฐํ ๋ฑ์ ์ค์น ์ /ํ์ ์คํ ๊ฐ๋ฅ |
| ๋ฆด๋ฆฌ์ค๋ณ ๊ฐ ํ์ธ | helm get values <RELEASE> | ์ค์ ๋ฐฐํฌ์ ์ฌ์ฉ๋ ๋ชจ๋ values ํ์ธ ๊ฐ๋ฅ |
| ํ ํ๋ฆฟ ๋๋ฒ๊น | --dry-run --debug, helm template | ํด๋ฌ์คํฐ์ ๋ฐ์๋์ง ์๊ณ ๋ ๋๋ง ๊ฒฐ๊ณผ ํ์ธ ๊ฐ๋ฅ |
| ๋ฆด๋ฆฌ์ค ๊ธฐ๋ก ํ์ธ | helm history <RELEASE> | ์ด์ ๋ฐฐํฌ ๋ฒ์ ํ์คํ ๋ฆฌ ํ์ธ, ๋กค๋ฐฑ ๊ธฐ๋ฐ ์ ๋ณด ํ๋ณด ๊ฐ๋ฅ |
| ๋กค๋ฐฑ | helm rollback <RELEASE> <REVISION> | ์ด์ ๋ฒ์ ์ผ๋ก ๋๋๋ฆฌ๊ธฐ, ์ฅ์ ๋์์ ์ ์ฉ |
์ฌ์ฉ์๊ฐ ์ง์ ์ฌ์ฉํ๋ ๋ช ๋ น์ค ๋๊ตฌ์ด๋ค.
mychart/
โโโ Chart.yaml # Chart ์ด๋ฆ, ๋ฒ์ , ์ค๋ช
๋ฑ์ ๋ฉํ ์ ๋ณด
โโโ values.yaml # ์ฌ์ฉ์ ์ ์ ์ค์ ์ ๊ธฐ๋ณธ๊ฐ
โโโ templates/ # Go ํ
ํ๋ฆฟ ์์ง ๊ธฐ๋ฐ์ Kubernetes ๋ฆฌ์์ค ํ์ผ๋ค
โโโ charts/ # ์์กดํ๋ ๋ค๋ฅธ Chart๋ค