What is the HELM ?
Helm
์ด๋ k8s
ํจํค์ง ๊ด๋ฆฌ๋ฅผ ๋์์ฃผ๋ ๋งค๋์ ์ด๋ค. ๊ณต์์ฌ์ดํธ (nodejs
์ npm
, python
์ pip
, MacOS
์ brew
์ ๊ฐ์ ์ญํ ์ด๋ผ๊ณ ํ ์ ์๋ค) Helm
์ ์ด์ฉํ๋ฉด k8s
์ ์ฝ๊ฒ ๊ทธ๋ฆฌ๊ณ ๋น ๋ฅด๊ฒ ์ํ๋ ํจํค์ง๋ค์ ์ค์นํ๊ณ , ๊ด๋ฆฌ(์
๋ฐ์ดํธ, ๋ฐฐํฌ ๋ฑ) ํ ์ ์๋ค.
๊ธฐ๋ณธ์ด ๋๋ ํ์๊ฐ๋
์ ์๊ฐํ์๋ฉด, Chart
, Repository
, Release
3๊ฐ์ง๊ฐ ์๋ค.
Chart
:Helm
์ ๋จ์๊ฐ ๋๋ ํจํค์ง์ด๋ฉฐ,application
์ด ๊ตฌ๋๋๊ธฐ ์ํด ํ์ํ ์ฌ๋ฌ ๋ฆฌ์์ค๋ค์ด ํฌํจ๋์ด ์๋ค.Repository
:chart
๊ฐ ์ ์ฅ๋๊ณ ๊ณต์ ๋๋ ๊ณณ์ด๋ค.docker
๋ก ์๊ฐํ๋ค๋ฉดdockethub
์ ์ญํ ์ด๋ผ๊ณ ํ ์ ์๋ค. ๋ํ์ ์ธrepo
๋ก๋ bitnami(https://bitnami.com/stacks)๊ฐ ์๋ค.Release
:Helm
์ด ์คํ๋๋chart instance
์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋์ผํchart
๋ฅผ ์ฌ๋ฌ๋ฒ ์คํ(์ค์น) ๊ฐ๋ฅํ๊ณ ,chart
,config
๋ค์ด ๊ฒฐํฉ๋์ด ์คํ๋๋ค.
โ Helm
์ ์คํํ๊ธฐ ์ํด์๋ k8s
๊ฐ ํ์์ ์ผ๋ก ์ค์น๋์ด ์์ด์ผ ์ ์์ ์ผ๋ก ๋์ํ๋ค. (k8s cluster
, kubeconfig
)
Basic tree of the helm chart
helm
์ ์ด์ฉํด์ ์๋ก์ด chart๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ๊ธฐ๋ณธ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ chart๊ฐ ์์ฑ๋๋ค. ๊ทธ tree ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
|____ Chart.yaml
|____ values.yaml
|____ charts/
|____ templates/
|____ NOTES.txt
|____ _helpers.tpl
|____ deployment.yaml
|____ ingress.yaml
|____ service.yaml
...
Chart.yaml
: chart ์ ๋ณด๋ฅผ ์ ์ (name, description, version ๋ฑ. ์์ธํ ํญ๋ชฉ์ ๊ณต์๋ฌธ์ ์ฐธ์กฐ)values.yaml
: k8s template yaml์ ์ ์ฉํ๋ dynamic value๋ค์ ์ ์charts
: dependency chart๋ฅผ ์ ์ฅํ๋ directorytemplates
: k8s resource template์ด ์ ์ฅ๋๋ directoryNOTES.txt
: chart ์ค์นํ ์ถ๋ ฅํ ๋ฉ์์ง๋ฅผ ์ ์_helpers
: templates ํด๋์์ ์ฌ์ฉํ ๋ณ์๋ค์ ์ ์deployment.yaml
,ingress.yaml
,service.yaml
: k8s์ ์คํํ resource template
๊ธฐ๋ณธ Command
โ helm create [name]
์๋ก์ด helm chart๋ฅผ ์์ฑ
โ helm search
helm hub/repository์์ chart ๊ฒ์
โ helm update
apt update์ ๋น์ทํ ์ญํ . chart ์ ๋ณด๋ฅผ ์ต์ ํ
โ helm install
k8s์ helm chart ์ค์น (kubectl apply์ ๋น์ท)
โ helm uninstall
์ค์น๋ release๋ฅผ ์ญ์
โ helm list
k8s์ install๋ ๋ชจ๋ release๋ฅผ ๋ฆฌ์คํธ์
โ helm show
chart์ ๋ํ ์ ๋ณด ๋ณด๊ธฐ
โ helm repo
chart repository ์ถ๊ฐ, ์
๋ฐ์ดํธ ๋ฑ
โ helm package [name]
ํ์ฌ ํด๋์ chart archive ์์ฑ ([name]-[version].tgz
ํฌ๋งท์ผ๋ก ์์ฑ)
โ helm history [name]
release history๋ฅผ ํ์ธ
โ helm hellback [name] [revision]
์
๋ ฅํ revision์ผ๋ก rollback ํ๋ค
โ helm install [name] . --dry-run --debug
helm chart๋ฅผ ์ค์นํ๋ ์๋ฎฌ๋ ์ด์
์ ์คํํ์ฌ ์ค์ ๋ก ์ด๋ค ์์
์ด ์ํ๋ ์ง ๋ฏธ๋ฆฌ ํ์ธํ ์ ์๋ค
Helm install with dynamic variable: chart.yaml, values.yaml
templates
์ดํ์ yaml
ํ์ผ์ ์์ฑํ ๋, ๊ทธ ๋ด๋ถ ๋ณ์๋ค์ values.yaml
์์ ์ฝ์ด์ ๋์ ์ผ๋ก injection
์์ผ์ค ์ ์๋ค. helm
์ ์ฌ์ฉํ๋ ์ด์ ๋ผ๊ณ ํด๋ ๊ณผ์ธ์ด ์๋ ๊ธฐ๋ฅ์ด๋ค.
Chart.yaml
, values.yaml
ํ์ผ์ ์๋์ฒ๋ผ ์ ์ํ๊ณ , templates
ํด๋ ์ดํ์ deployment.yaml
์๋์ฒ๋ผ ์์ฑํ๊ฒ ๋๋ฉด,
## Chart.yaml
apiVersion: v2
name: myapp
description: myapp nginx description
type: application
version: 0.0.1
appVersion: 1.0.0
## values.yaml
replicaCount: 2
image:
repository: nginx
tag: 1.2.3
pullPolicy: ifNotPresent
pullSecret:
service:
type: NodePort
## deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: "deploy-{{ .Release.Name }}" # install ํ ๋์ ์ง์ ํ๋ name์ด ์ฃผ์
๋๋ค.
# ํน์ ๊ฐ์ผ๋ก ์ง์ ํด๋ ๊ฒฝ์ฐ ๊ฐ์ ๊ฐ์ด ๋ค์ด๊ฐ์ ์๊ธฐ ๋๋ฌธ์ name์ ๋ฐ๋ผ๊ฐ๋๋ก ์ค์ ํ๋๊ฒ์ ์ฃผ์
spec:
replicas: {{ .Values.replicaCount }} # values์์ replicaCount๋ฅผ ์ฝ์ด์ replicas: 2 ๋ก ์์ฑ๋๋ค.
selector:
matchLabels:
app: "{{ .Chart.Name }}" # chart์์ name์ ์ฝ์ด์จ๋ค. ์ฆ, app: myapp
template:
metadata:
labels:
app: "{{ .Chart.Name }}" # chart์์ name์ ์ฝ์ด์จ๋ค. ์ฆ, app: myapp
spec:
containers:
- image: "{{ .Values.image.repository }}" # values์์ repository์ ์ฝ์ด์จ๋ค. ์ฆ, image: nginx
imagePullPolicy: "{{ .Values.image.pullPolicy }}" # values์์ pullPolicy์ ์ฝ์ด์จ๋ค. ์ฆ, imagePullPolicy: ifNotPresent
name: "{{ .Chart.Name }}" # chart์์ name์ ์ฝ์ด์จ๋ค. ์ฆ, app: myapp
ports:
- containerPort: 80
- https://helm.sh/
- https://helm.sh/docs/topics/charts/