๐Ÿ“ฆ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ฑ ์„ค์น˜, ์ด์ œ apt์ฒ˜๋Ÿผ ์‰ฝ๊ฒŒ – Helm ๊ธฐ์ดˆ ์™„์ „ ์ •๋ณต

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋ ค๋ฉด 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์ด์ง€๋งŒ, ์ˆ˜๋™์œผ๋กœ ํ•˜๋ฉด:

  1. Deployment YAML ์ž‘์„ฑ
  2. Service YAML ์ž‘์„ฑ
  3. ConfigMap YAML ์ž‘์„ฑ (์„ค์ • ์žˆ๋Š” ๊ฒฝ์šฐ)
  4. RBAC YAML ์ž‘์„ฑ (๊ถŒํ•œ ํ•„์š”์‹œ)
  5. ๊ฐ๊ฐ kubectl apply

๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ๋Š”? ๋‹ค์‹œ YAML ๊ณ ์น˜๊ณ  apply. ๋กค๋ฐฑ์€? ์ด์ „ YAML ์ฐพ์•„์„œ ๋‹ค์‹œ apply… Helm์€ ์ด ๋ฐ˜๋ณต ์ž‘์—…์„ ์ž๋™ํ™”ํ•ด์ค๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ธ€์—์„œ๋Š” Helm์„ “์“ฐ๋Š” ์‚ฌ๋žŒ”์—์„œ “๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ”์œผ๋กœ โ€” Custom Helm Chart๋ฅผ ์ง์ ‘ ์ œ์ž‘ํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.