[Kubernetes - 5๋‹จ๊ณ„: Prometheus + Grafana ๋ชจ๋‹ˆํ„ฐ๋ง]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ Prometheus๋กœ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๊ณ , Grafana ๋Œ€์‹œ๋ณด๋“œ๋กœ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ์ดˆ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ Kubernetes 4๋‹จ๊ณ„: Helm โ€” Helm Chart ์„ค์น˜์™€ values.yaml ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Pod, Node์˜ CPU/๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๋ฉด, ์žฅ์•  ๋Œ€์‘๊ณผ ๋ฆฌ์†Œ์Šค ์ตœ์ ํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Prometheus๊ฐ€ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๊ณ , Grafana๊ฐ€ ์ด๋ฅผ ๋Œ€์‹œ๋ณด๋“œ๋กœ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ๋Š” MLOps์—์„œ ๋ชจ๋ธ ์„œ๋น™ ์ง€์—ฐ, ํ•™์Šต ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง์˜ ๊ธฐ๋ฐ˜์ด ๋ฉ๋‹ˆ๋‹ค. ์‹ค์Šต ์ฝ”๋“œ: GitHub (Monitoring) ๐Ÿงญ ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ โ‘  Helm ์ €์žฅ์†Œ ์ถ”๊ฐ€ โ‘ก Prometheus ์„ค์น˜ (๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘) โ‘ข Grafana ์„ค์น˜ (๋Œ€์‹œ๋ณด๋“œ ์‹œ๊ฐํ™”) โ‘ฃ Web UI ์ ‘์† โ†’ Prometheus ์—ฐ๊ฒฐ โ†’ ๋Œ€์‹œ๋ณด๋“œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๐Ÿ“‚ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ k8s-monitoring/ โ”œโ”€โ”€ values-prometheus.yaml # Prometheus ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์„ค์ • โ”œโ”€โ”€ values-grafana.yaml # Grafana ์„ค์ • + ๋น„๋ฐ€๋ฒˆํ˜ธ ์ง€์ • โ”œโ”€โ”€ README.md โš™๏ธ [1๋‹จ๊ณ„] Helm ์ €์žฅ์†Œ ์ถ”๊ฐ€ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo add grafana https://grafana.github.io/helm-charts helm repo update ๐Ÿ“ฆ [2๋‹จ๊ณ„] Prometheus ์„ค์น˜ ๊ธฐ๋ณธ ์„ค์น˜ helm install prometheus prometheus-community/prometheus kubectl port-forward svc/prometheus-server 9090:80 ์ ‘์†: http://localhost:9090 ...

June 5, 2025 ยท 2 min

[Kubernetes - 4๋‹จ๊ณ„: Helm]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ 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 ๋“ฑ์„ ์„ค์น˜ํ•  ๋•Œ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ...

June 5, 2025 ยท 2 min

[Kubernetes - 3๋‹จ๊ณ„ : Ingress & Nginx Controller]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ํ•˜๋‚˜์˜ ์ง„์ž…์ ์—์„œ ๊ฒฝ๋กœ(Path) ๊ธฐ๋ฐ˜์œผ๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” Ingress ๋ฆฌ์†Œ์Šค์™€ Nginx Ingress Controller๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ Kubernetes 1๋‹จ๊ณ„: Deployment & Service โ€” Pod ๋ฐฐํฌ์™€ Service ๋…ธ์ถœ Kubernetes 2๋‹จ๊ณ„: ConfigMap & Secret โ€” ์„ค์ • ๋ถ„๋ฆฌ ๊ฐœ๋… ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ Service๋งˆ๋‹ค NodePort๋ฅผ ์—ด๋ฉด ํฌํŠธ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ , ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Ingress๋Š” ๋‹จ์ผ ์ง„์ž…์ ์—์„œ HTTP ์š”์ฒญ์„ ๊ฒฝ๋กœ๋‚˜ ํ˜ธ์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚ด๋ถ€ ์„œ๋น„์Šค์— ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. ์‹ค๋ฌด์—์„œ MLflow, Jupyter, API ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ ์•„๋ž˜ ๊ฒฝ๋กœ๋กœ ๋ถ„๋ฆฌํ•  ๋•Œ ํ•„์ˆ˜์ ์ธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ...

June 5, 2025 ยท 2 min

[Kubernetes - 2๋‹จ๊ณ„: ConfigMap & Secret]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •๊ฐ’(ConfigMap)๊ณผ ๋ฏผ๊ฐ ์ •๋ณด(Secret)๋ฅผ ์ฝ”๋“œ์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ Kubernetes ๋ฆฌ์†Œ์Šค๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ Kubernetes 1๋‹จ๊ณ„: Deployment & Service โ€” Pod ๋ฐฐํฌ์™€ Service ๊ธฐ๋ณธ ๊ฐœ๋… ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— DB ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ํ™˜๊ฒฝ ์„ค์ •์„ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๋ฉด, ํ™˜๊ฒฝ๋ณ„ ๋ฐฐํฌ๊ฐ€ ์–ด๋ ต๊ณ  ๋ณด์•ˆ ์œ„ํ—˜์ด ์ƒ๊น๋‹ˆ๋‹ค. Kubernetes์˜ ConfigMap๊ณผ Secret์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ค์ •๊ณผ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ Pod์— ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์Šต ์ฝ”๋“œ: GitHub (Configmap_and_Secret) ๐Ÿงญ ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ โ‘  ConfigMap ์ƒ์„ฑ (์ผ๋ฐ˜ ์„ค์ •๊ฐ’) โ‘ก Secret ์ƒ์„ฑ (๋ฏผ๊ฐ ์ •๋ณด โ€“ base64 ์ธ์ฝ”๋”ฉ) โ‘ข Pod์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ฃผ์ž… โ‘ฃ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๊ฐ’ ํ™•์ธ (env ๋ช…๋ น์–ด) โ‘ค ์‹ค์ „ ์ ์šฉ ๋ฐ ๋ณด์•ˆ ์ฃผ์˜์‚ฌํ•ญ ํ•™์Šต ๐Ÿ“‚ ์‹ค์Šต์— ์‚ฌ์šฉ๋œ ํŒŒ์ผ ๊ตฌ์„ฑ k8s-configmap-secret/ โ”œโ”€โ”€ configmap.yaml # ์ผ๋ฐ˜ ์„ค์ •๊ฐ’ ์ •์˜ โ”œโ”€โ”€ secret.yaml # ๋ฏผ๊ฐ ์ •๋ณด (base64 ์ธ์ฝ”๋”ฉ) โ”œโ”€โ”€ pod-env.yaml # Pod ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ฃผ์ž… โ””โ”€โ”€ README.md ๐Ÿ“„ ์ฃผ์š” YAML ํŒŒ์ผ ์ •๋ฆฌ configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: app-config data: APP_MODE: "production" APP_PORT: "8080" secret.yaml apiVersion: v1 kind: Secret metadata: name: app-secret type: Opaque data: DB_PASSWORD: c3VwZXJzZWNyZXQ= # base64 โ†’ "supersecret" ์ธ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•: echo -n "supersecret" | base64 ...

June 5, 2025 ยท 2 min

[Kubernetes - 1๋‹จ๊ณ„ : Deployment & Service]

์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ Kubernetes์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ ๋‹จ์œ„์ธ Deployment์™€ Service๋ฅผ ์‚ฌ์šฉํ•ด Nginx๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์„ ์ˆ˜์ง€์‹ ์ด ๊ธ€๋ถ€ํ„ฐ ์‹œ์ž‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Docker๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Kubernetes ์œ„์— ๋ฐฐํฌํ•˜๋ ค๋ฉด, Pod๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Deployment์™€ ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜๋Š” Service์˜ ๊ด€๊ณ„๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Minikube ๋กœ์ปฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Nginx๋ฅผ ๋ฐฐํฌํ•˜๊ณ  kubectl ๋ช…๋ น์–ด๋ฅผ ์ฒด๋“ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์Šต ์ฝ”๋“œ: GitHub (Deployment_and_Service) ๐Ÿงญ ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ โ‘  Minikube ์„ค์น˜ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ ์‹œ์ž‘ โ‘ก kubectl ๋ช…๋ น์–ด ์‹ค์Šต โ‘ข Nginx Deployment + Service ๋ฐฐํฌ โ‘ฃ ์ƒํƒœ ํ™•์ธ / ํŒŒ๋“œ ์ ‘์† / ๋กœ๊ทธ ํ™•์ธ / ์ˆ˜ํ‰ ํ™•์žฅ โ‘ค ๋ธ”๋กœ๊ทธ ์ •๋ฆฌ โš™๏ธ 1๋‹จ๊ณ„ โ€“ Minikube & kubectl ์„ค์น˜ Docker ์„ค์น˜ & ๊ถŒํ•œ ๋ถ€์—ฌ sudo apt update && sudo apt install -y docker.io sudo usermod -aG docker $USER ์„ค์น˜ ํ›„ logout โ†’ login ๋˜๋Š” newgrp docker ์‹คํ–‰ ํ•„์š” ...

June 5, 2025 ยท 2 min