์ฟ ๋ฒ๋คํฐ์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ๋ ค๋ฉด Deployment, Service, ConfigMap, PVC ๋ฑ ์ฌ๋ฌ YAML ํ์ผ์ ๊ฐ๊ฐ applyํด์ผ ํฉ๋๋ค. MySQL ํ๋ ์ฌ๋ฆฌ๋ ๋ฐ ํ์ผ์ด 5๊ฐ, 10๊ฐ๊ฐ ๋๊ธฐ๋ ํฉ๋๋ค. Helm์ ์ด ๋ชจ๋ ๊ฒ์ ํ๋์ ํจํค์ง(Chart)๋ก ๋ฌถ์ด์, helm install ๋ช
๋ น์ด ํ๋๋ก ๋ฐฐํฌํ๊ณ , ์
๊ทธ๋ ์ด๋ํ๊ณ , ๋กค๋ฐฑํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ฆฌ๋
์ค์ apt, brew ๊ฐ์ ํจํค์ง ๋งค๋์ ๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค์ ์น์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
๐งฉ Helm์ ํต์ฌ ๊ฐ๋ 3๊ฐ์ง
Repository (์ฑ์คํ ์ด) โ Chart (์ฑ) โ Release (์ค์น๋ ์ฑ)
bitnami ์ ์ฅ์ โ nginx Chart โ my-nginx (๋ด ํด๋ฌ์คํฐ์ ์ค์น๋จ)
- Repository: Chart๋ค์ด ๋ชจ์ฌ ์๋ ์ ์ฅ์ (npm registry, PyPI ๊ฐ์ ๊ฒ)
- Chart: ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค ์ผ์ฒด๋ฅผ ๋ด์ ํจํค์ง
- Release: Chart๋ฅผ ํด๋ฌ์คํฐ์ ์ค์นํ ๊ฒฐ๊ณผ๋ฌผ. ์ด๋ฆ์ ์ง์ ๋ถ์
๋๋ค (
my-nginx,prod-mysql๋ฑ)
๐ ์ค์ต Step 1 โ ์ ์ฅ์ ๋ฑ๋ก ๋ฐ ์ค์น
# Bitnami ์ ์ฅ์ ์ถ๊ฐ
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# ์ฌ์ฉ ๊ฐ๋ฅํ nginx chart ๊ฒ์
helm search repo nginx
์ค์น ๊ฐ๋ฅํ bitnami/nginx ๋ชฉ๋ก์ด ๋ณด์ด๋ฉด ์ค๋น ์๋ฃ์
๋๋ค.
# ์ค์น! (my-nginx๋ ๋ด๊ฐ ๋ถ์ธ ์ด๋ฆ, ์ธ์ ๋ ๋ฐ๊ฟ ์ ์์)
helm install my-nginx bitnami/nginx
# Helm์ด ๊ด๋ฆฌํ๋ Release ๋ชฉ๋ก ํ์ธ
helm list
# ์ค์ ํ๋๊ฐ ๋ด๋์ง ํ์ธ
kubectl get pod,svc
โ๏ธ ์ค์ต Step 2 โ ์ค์ ๋ณ๊ฒฝ (Upgrade)
Helm์ ๊ฐ๋ ฅํจ์ ์ค์ ํ์ผ์ ์ค๋ฒ๋ผ์ด๋ํด์ ์ํ๋ ๋๋ก ์ปค์คํฐ๋ง์ด์งํ ์ ์๋ค๋ ๊ฒ๋๋ค.
# my-values.yaml
replicaCount: 2 # ๊ธฐ๋ณธ๊ฐ 1๊ฐ โ 2๊ฐ๋ก
service:
type: NodePort # ๊ธฐ๋ณธ๊ฐ LoadBalancer โ NodePort๋ก
resources:
limits:
cpu: 100m
memory: 128Mi
# ์ด๋ฏธ ์ค์น๋ Release๋ฅผ ์ง์ฐ์ง ์๊ณ ์ค์ ๋ง ์
๊ทธ๋ ์ด๋
helm upgrade my-nginx bitnami/nginx -f my-values.yaml
# ํ๋๊ฐ 2๊ฐ๋ก ๋์ด๋๊ณ ์๋น์ค ํ์
์ด ๋ฐ๋์๋์ง ํ์ธ
kubectl get pod,svc
์ ๊ทธ๋ ์ด๋ ํ์๋ ๊ธฐ์กด ํ๋๋ฅผ ํ ๋ฒ์ ๋ด๋ฆฌ์ง ์๊ณ Rolling Update ๋ฐฉ์์ผ๋ก ์ ํํฉ๋๋ค. ์๋น์ค๋ ๋๊ธฐ์ง ์์ต๋๋ค.
โช ์ค์ต Step 3 โ ๋กค๋ฐฑ
๋ฐฐํฌ์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค๋ฉด? Helm์ ๊ฐ ๋ฐฐํฌ ์์ ์ Revision์ผ๋ก ์ ์ฅํด๋๊ธฐ ๋๋ฌธ์ ์ํ๋ ์์ ์ผ๋ก ๋๋๋ฆด ์ ์์ต๋๋ค.
# ๋ฐฐํฌ ์ด๋ ฅ ํ์ธ
helm history my-nginx
# REVISION STATUS CHART DESCRIPTION
# 1 superseded nginx-15.x.x Install complete
# 2 deployed nginx-15.x.x Upgrade complete
# Revision 1 (์ฒ์ ์ค์น ์ํ)๋ก ๋กค๋ฐฑ
helm rollback my-nginx 1
# ํ๋๊ฐ ๋ค์ 1๊ฐ๋ก ์ค์๋์ง ํ์ธ
kubectl get pods
# ํ์คํ ๋ฆฌ ๋ค์ ํ์ธ โ Revision 3์ด ์๋ก ์๊น
helm history my-nginx
๋กค๋ฐฑ ํ ํ์คํ ๋ฆฌ๋ฅผ ๋ณด๋ฉด Revision 3์ด ์๋ก ์๊น๋๋ค. Revision 1์ด ์ฌ๋ผ์ง ์ด์ ? ์ฟ ๋ฒ๋คํฐ์ค ๋กค๋ฐฑ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, Revision 1์ ์ค์ ์ ํ์ฌ ์ ์ฉํ ์ Revision 3์ด ์์ฑ๋ฉ๋๋ค. ์ด๊ฒ “์ ์ธ์ ์ํ ๊ด๋ฆฌ”์ ๋ณธ์ง์ ๋๋ค.
๐๏ธ ์ญ์
# Release ๋ฐ ๊ด๋ จ ๋ฆฌ์์ค ์ ์ฒด ์ญ์
helm uninstall my-nginx
# ํ์ผ ์ ๋ฆฌ
rm my-values.yaml
๐ Helm ํต์ฌ ๋ช ๋ น์ด ์นํธ์ํธ
| ๊ตฌ๋ถ | ๋ช ๋ น์ด | ์ค๋ช |
|---|---|---|
| ์ ์ฅ์ | helm repo add [์ด๋ฆ] [URL] | ์ฐจํธ ์ ์ฅ์ ์ถ๊ฐ |
helm repo update | ์ ์ฅ์ ๋ชฉ๋ก ์ต์ ํ | |
helm search repo [ํค์๋] | ์ฐจํธ ๊ฒ์ | |
| ์ค์น/๊ด๋ฆฌ | helm install [๋ฆด๋ฆฌ์ฆ] [์ฐจํธ] | ์ค์น |
helm list | ์ค์น๋ Release ๋ชฉ๋ก | |
helm status [๋ฆด๋ฆฌ์ฆ] | Release ์ํ ํ์ธ | |
| ๋ณ๊ฒฝ | helm upgrade [๋ฆด๋ฆฌ์ฆ] [์ฐจํธ] -f [ํ์ผ] | ์ค์ ์ ๊ทธ๋ ์ด๋ |
| ๋ณต๊ตฌ | helm history [๋ฆด๋ฆฌ์ฆ] | ๋ฐฐํฌ ์ด๋ ฅ ํ์ธ |
helm rollback [๋ฆด๋ฆฌ์ฆ] [๋ฒํธ] | ํน์ Revision์ผ๋ก ๋กค๋ฐฑ | |
| ์ญ์ | helm uninstall [๋ฆด๋ฆฌ์ฆ] | Release ์ ์ฒด ์ญ์ |
๐ก Helm์ด ์์ผ๋ฉด ์ด๋ป๊ฒ ๋์๊น?
Nginx ํ๋๋ง ํด๋ helm install์ด์ง๋ง, ์๋์ผ๋ก ํ๋ฉด:
- Deployment YAML ์์ฑ
- Service YAML ์์ฑ
- ConfigMap YAML ์์ฑ (์ค์ ์๋ ๊ฒฝ์ฐ)
- RBAC YAML ์์ฑ (๊ถํ ํ์์)
- ๊ฐ๊ฐ
kubectl apply
๋ฒ์ ์
๊ทธ๋ ์ด๋๋? ๋ค์ YAML ๊ณ ์น๊ณ apply. ๋กค๋ฐฑ์? ์ด์ YAML ์ฐพ์์ ๋ค์ apply… Helm์ ์ด ๋ฐ๋ณต ์์
์ ์๋ํํด์ค๋๋ค.
๋ค์ ๊ธ์์๋ Helm์ “์ฐ๋ ์ฌ๋”์์ “๋ง๋๋ ์ฌ๋”์ผ๋ก โ Custom Helm Chart๋ฅผ ์ง์ ์ ์ํ๋ ๊ณผ์ ์ ๋ค๋ฃน๋๋ค.