์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ

Kubernetes ์•ฑ์„ ํŒจํ‚ค์ง€ํ™”ํ•˜์—ฌ ์„ค์น˜ยท์—…๊ทธ๋ ˆ์ด๋“œยท๋กค๋ฐฑ์„ ๊ด€๋ฆฌํ•˜๋Š” Helm์˜ ๊ฐœ๋…๊ณผ values.yaml์„ ํ†ตํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์„ ์ˆ˜์ง€์‹


์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ

Deployment, Service, ConfigMap ๋“ฑ ์—ฌ๋Ÿฌ YAML ํŒŒ์ผ์„ ๊ฐœ๋ณ„ ๊ด€๋ฆฌํ•˜๋ฉด, ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๋ณ€๊ฒฝ๊ณผ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. Helm์€ ์ด YAML๋“ค์„ ํ•˜๋‚˜์˜ Chart๋กœ ํŒจํ‚ค์ง•ํ•˜๊ณ , values.yaml๋กœ ์„ค์ •๋งŒ ๋ฐ”๊ฟ”์„œ ์žฌ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. MLOps์—์„œ MLflow, ArgoCD, Prometheus ๋“ฑ์„ ์„ค์น˜ํ•  ๋•Œ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์‹ค์Šต ์ฝ”๋“œ: GitHub (Helm)


๐Ÿงญ ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ

โ‘  Helm ์„ค์น˜ ๋ฐ Chart ์ €์žฅ์†Œ ๋“ฑ๋ก
โ‘ก bitnami/nginx Chart ๊ฒ€์ƒ‰ โ†’ ์„ค์น˜
โ‘ข ๊ธฐ๋ณธ ์„ค์น˜ ๊ฒฐ๊ณผ ํ™•์ธ (LoadBalancer โ†’ Pending)
โ‘ฃ values.yaml๋กœ NodePort ์„ค์ • ๋ณ€๊ฒฝ
โ‘ค ์„ค์ • ์ ์šฉํ•˜์—ฌ ์žฌ์„ค์น˜ + ํฌํŠธ ์ ‘์† ํ™•์ธ

๐Ÿ“ ์‹ค์Šต ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ

k8s-helm/
โ”œโ”€โ”€ values-nginx.yaml   # ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์šฉ ์„ค์ • ํŒŒ์ผ
โ””โ”€โ”€ README.md

โš™๏ธ [1๋‹จ๊ณ„] Helm ์„ค์น˜

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version

๐Ÿ“ฆ [2๋‹จ๊ณ„] Chart ์ €์žฅ์†Œ ๋“ฑ๋ก & ๊ฒ€์ƒ‰

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo nginx

Helm Chart๋Š” ํŒจํ‚ค์ง€ํ™”๋œ K8s ์•ฑ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค.


๐Ÿš€ [3๋‹จ๊ณ„] Nginx ๊ธฐ๋ณธ ์„ค์น˜ (LoadBalancer ๋ฐฉ์‹)

helm install my-nginx bitnami/nginx
kubectl get all
# ๊ฒฐ๊ณผ (์ผ๋ถ€)
service/my-nginx  LoadBalancer  10.103.5.39  <pending>  80:31794/TCP,443:32036/TCP

LoadBalancer๋Š” ํด๋ผ์šฐ๋“œ์šฉ ๋ฐฉ์‹์ด๋ผ Minikube์—์„œ๋Š” <pending> ์ƒํƒœ๋กœ ์™ธ๋ถ€ ์ ‘์†์ด ์•ˆ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ [4๋‹จ๊ณ„] values.yaml๋กœ NodePort ์„ค์ • ๋ณ€๊ฒฝ

values-nginx.yaml

service:
  type: NodePort
  nodePorts:
    http: 30090

์žฌ์„ค์น˜

helm uninstall my-nginx
helm install my-nginx bitnami/nginx -f values-nginx.yaml
kubectl get all
# ๊ฒฐ๊ณผ (์ •์ƒ ๋™์ž‘)
service/my-nginx  NodePort  10.109.159.213  <none>  80:30090/TCP,443:32694/TCP

์ ‘์† ํ…Œ์ŠคํŠธ

minikube ip         # IP ํ™•์ธ
curl http://<minikube-ip>:30090

๐Ÿ“Œ [5๋‹จ๊ณ„] ์ฃผ์š” Helm ๋ช…๋ น์–ด ์ •๋ฆฌ

๋ช…๋ น์–ด์„ค๋ช…
helm list์„ค์น˜๋œ Helm ๋ฆด๋ฆฌ์ฆˆ ๋ชฉ๋ก ํ™•์ธ
helm uninstall <์ด๋ฆ„>Helm ๋ฐฐํฌ ์‚ญ์ œ
helm get all <์ด๋ฆ„>์ƒ์„ฑ๋œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค ์ƒ์„ธ ๋ณด๊ธฐ
helm upgrade์„ค์ •๊ฐ’ ๋ณ€๊ฒฝ ํ›„ ์žฌ๋ฐฐํฌ (-f ์‚ฌ์šฉ)
helm upgrade my-nginx bitnami/nginx -f values-nginx.yaml

๐ŸŽฏ ์ •๋ฆฌ ์š”์•ฝ

ํ•ญ๋ชฉ์„ค๋ช…
HelmK8s ์•ฑ์„ ํŒจํ‚ค์ง•/์„ค์น˜/๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ
Chart์—ฌ๋Ÿฌ YAML ํŒŒ์ผ๊ณผ ์„ค์ •๊ฐ’์„ ๊ฐ€์ง„ ํŒจํ‚ค์ง€ ํ…œํ”Œ๋ฆฟ
values.yaml์‚ฌ์šฉ์ž ์ •์˜ ์„ค์ •๊ฐ’ (YAML ํ…œํ”Œ๋ฆฟ์˜ ๋ณ€์ˆ˜ ๋Œ€์ฒด์šฉ)
๊ธฐ๋ณธ ์„ค์น˜ ๊ฒฐ๊ณผLoadBalancer๋กœ ์ธํ•ด Minikube์—์„œ๋Š” ์™ธ๋ถ€ ์ ‘์† ์–ด๋ ค์›€
NodePort ์„ค์ •์ปค์Šคํ„ฐ๋งˆ์ด์ง•์œผ๋กœ ์‹ค์Šต ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์กฐ์ • ๊ฐ€๋Šฅ

์„ค๊ณ„ ํŒ๋‹จ (Why This Way?)

MLOps ์Šคํƒ์€ ์ˆ˜์‹ญ ๊ฐœ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•˜์—ฌ ์ˆœ์ˆ˜ YAML ๊ด€๋ฆฌ๊ฐ€ ๋น„ํ˜„์‹ค์ ์ด๋ฏ€๋กœ Helm Chart๋กœ ํŒจํ‚ค์ง•ํ•˜๊ณ , values.yaml ํ™˜๊ฒฝ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด GitOps(ArgoCD)์™€ ๊ฒฐํ•ฉํ•˜์—ฌ Git ์ปค๋ฐ‹๋งŒ์œผ๋กœ ๋ฐฐํฌ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.


๋‹ค์Œ์— ์ฝ์„ ๊ธ€

โ†’ Kubernetes 5๋‹จ๊ณ„: Prometheus + Grafana ๋ชจ๋‹ˆํ„ฐ๋ง โ€” ํด๋Ÿฌ์Šคํ„ฐ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘๊ณผ ์‹œ๊ฐํ™”