์ด ๊ธ์์ ๋ค๋ฃจ๋ ๊ฒ
Kubernetes ์ฑ์ ํจํค์งํํ์ฌ ์ค์นยท์ ๊ทธ๋ ์ด๋ยท๋กค๋ฐฑ์ ๊ด๋ฆฌํ๋ Helm์ ๊ฐ๋ ๊ณผ values.yaml์ ํตํ ์ปค์คํฐ๋ง์ด์ง ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค.
์ ์์ง์
- Kubernetes 1๋จ๊ณ: Deployment & Service โ ๊ธฐ๋ณธ ๋ฆฌ์์ค ์ดํด
- Kubernetes 3๋จ๊ณ: Ingress & Nginx Controller โ ์๋น์ค ๋ผ์ฐํ ๊ฐ๋
์ด ๋จ๊ณ์์ ํด๊ฒฐํ๋ ค๋ ๋ฌธ์
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
๐ฏ ์ ๋ฆฌ ์์ฝ
| ํญ๋ชฉ | ์ค๋ช |
|---|---|
| Helm | K8s ์ฑ์ ํจํค์ง/์ค์น/๊ด๋ฆฌํ๋ ๋๊ตฌ |
| Chart | ์ฌ๋ฌ YAML ํ์ผ๊ณผ ์ค์ ๊ฐ์ ๊ฐ์ง ํจํค์ง ํ ํ๋ฆฟ |
| values.yaml | ์ฌ์ฉ์ ์ ์ ์ค์ ๊ฐ (YAML ํ ํ๋ฆฟ์ ๋ณ์ ๋์ฒด์ฉ) |
| ๊ธฐ๋ณธ ์ค์น ๊ฒฐ๊ณผ | LoadBalancer๋ก ์ธํด Minikube์์๋ ์ธ๋ถ ์ ์ ์ด๋ ค์ |
| NodePort ์ค์ | ์ปค์คํฐ๋ง์ด์ง์ผ๋ก ์ค์ต ํ๊ฒฝ์ ๋ง๊ฒ ์กฐ์ ๊ฐ๋ฅ |
์ค๊ณ ํ๋จ (Why This Way?)
MLOps ์คํ์ ์์ญ ๊ฐ ๋ฆฌ์์ค๊ฐ ํ์ํ์ฌ ์์ YAML ๊ด๋ฆฌ๊ฐ ๋นํ์ค์ ์ด๋ฏ๋ก Helm Chart๋ก ํจํค์งํ๊ณ , values.yaml ํ๊ฒฝ ๋ถ๋ฆฌ๋ฅผ ํตํด GitOps(ArgoCD)์ ๊ฒฐํฉํ์ฌ Git ์ปค๋ฐ๋ง์ผ๋ก ๋ฐฐํฌ๋ฅผ ์ ์ดํฉ๋๋ค.
๋ค์์ ์ฝ์ ๊ธ
โ Kubernetes 5๋จ๊ณ: Prometheus + Grafana ๋ชจ๋ํฐ๋ง โ ํด๋ฌ์คํฐ ๋ฉํธ๋ฆญ ์์ง๊ณผ ์๊ฐํ