ํด๋ผ์šฐ๋“œ์—์„œ Kubernetes ๋น„์šฉ ์ ˆ๊ฐ์„ ์œ„ํ•œ Kubecost ๊ฒ€ํ† 

ํด๋ผ์šฐ๋“œ์—์„œ Kubernetes ๋น„์šฉ ์ ˆ๊ฐ์„ ์œ„ํ•œ Kubecost ๊ฒ€ํ† 

ํ˜„์žฌ ์ ์  ๋” ๋งŽ์€ ํšŒ์‚ฌ๊ฐ€ ์ธํ”„๋ผ๋ฅผ ํ•˜๋“œ์›จ์–ด ์„œ๋ฒ„์™€ ์ž์ฒด ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ํด๋ผ์šฐ๋“œ๋กœ ์ด์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์†”๋ฃจ์…˜์€ ์„ค๋ช…ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ํ•˜๋“œ์›จ์–ด์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ธฐ์กด ๊ธฐ์ˆ (์˜ˆ: Kubernetes)์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€ํ•˜์— ๋”ฐ๋ผ ์ปดํ“จํŒ… ์„ฑ๋Šฅ์„ ๊ฐ„๋‹จํžˆ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. .

์žฌ์ •์  ์ธก๋ฉด์€ ํ•ญ์ƒ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ ์„ค๋ช…ํ•˜๋Š” ๋„๊ตฌ๋Š” Kubernetes์™€ ํ•จ๊ป˜ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์˜ˆ์‚ฐ์„ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์†Œ๊ฐœ

ํ๋ธŒ์ฝ”์ŠคํŠธ Google์˜ ์บ˜๋ฆฌํฌ๋‹ˆ์•„ ์Šคํƒ€ํŠธ์—…์œผ๋กœ, ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค(Kubernetes ํด๋Ÿฌ์Šคํ„ฐ + ๊ณต์œ  ๋ฆฌ์†Œ์Šค ๋‚ด)์˜ ์ธํ”„๋ผ ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์—์„œ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  Slack์— ์ ์ ˆํ•œ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ์†”๋ฃจ์…˜์„ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์นœ์ˆ™ํ•œ AWS ๋ฐ GCP ํด๋ผ์šฐ๋“œ ๋ชจ๋‘์— Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Linux ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ฒฝ์šฐ ๋“œ๋ฌผ์ง€๋งŒ Azure(์ผ๋ฐ˜์ ์œผ๋กœ Kubecost๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ)์— ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์ผ๋ถ€์— ๋Œ€ํ•ด์„œ๋Š” Kubecost์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์„œ๋น„์Šค ๋น„์šฉ์„ ์ง์ ‘ ๊ณ„์‚ฐํ•˜๊ณ  ์ธํ”„๋ผ ๋น„์šฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ์ตœ์ ํ™”ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋Ÿฌํ•œ ์ž‘์—…์„ ์ž๋™ํ™”ํ•  ๊ฐ€๋Šฅ์„ฑ์— ๊ด€์‹ฌ์ด ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” Kubecost ๋ชจ๋“ˆ์˜ ์†Œ์Šค ์ฝ”๋“œ๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด์„ ์Šค(Apache License 2.0) ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์ด ์ถฉ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค๋Š” ๋น„์ฆˆ๋‹ˆ์Šค์ž…๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ์ œํ’ˆ์€ ๋‹ซํ˜€ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ๋ฃŒ ๊ตฌ๋…, ์ด๋Š” ๋˜ํ•œ ์ƒ์—…์  ์ง€์›์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ €์ž๋Š” ์†Œ๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ(1๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” 10๊ฐœ์˜ ํด๋Ÿฌ์Šคํ„ฐ - ์ด ๊ธฐ์‚ฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋™์•ˆ ์ด ์ œํ•œ์€ 20๊ฐœ์˜ ๋…ธ๋“œ๋กœ ํ™•์žฅ๋จ)์— ๋Œ€ํ•œ ๋ฌด๋ฃŒ ๋ผ์ด์„ผ์Šค ๋˜๋Š” 1๊ฐœ์›” ๋™์•ˆ ์ „์ฒด ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ํ‰๊ฐ€ํŒ ๊ธฐ๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ž‘๋™ ๋ฐฉ์‹

๊ทธ๋ž˜์„œ Kubecost์˜ ์ฃผ์š” ๋ถ€๋ถ„์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. ๋น„์šฉ ๋ชจ๋ธ, Go๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์‹œ์Šคํ…œ์„ ์„ค๋ช…ํ•˜๋Š” Helm ์ฐจํŠธ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋น„์šฉ ๋ถ„์„๊ธฐ ๊ทธ ํ•ต์‹ฌ์—๋Š” Prometheus, Grafana ๋ฐ ์—ฌ๋Ÿฌ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ โ€‹โ€‹ํฌํ•จ๋œ ๋น„์šฉ ๋ชจ๋ธ์˜ ์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋น„์šฉ ๋ชจ๋ธ์—๋Š” ๋น„์šฉ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ํŒ์€ ๋ฌผ๋ก  ๋น„์šฉ์— ๋Œ€ํ•œ ๊ทธ๋ž˜ํ”„์™€ ์ž์„ธํ•œ ํ†ต๊ณ„๋ฅผ ํ‘œ ํ˜•์‹์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ์ž์ฒด ์›น ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Grafana์— ์ œ์‹œ๋œ ๋Œ€์‹œ๋ณด๋“œ๋Š” Kubecost ๊ฐœ๋ฐœ์˜ ์ดˆ๊ธฐ ๋‹จ๊ณ„์ด๋ฉฐ ๋น„์šฉ ๋ชจ๋ธ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ ํ•ด๋‹น ๊ตฌ์„ฑ ์š”์†Œ์˜ CPU/๋ฉ”๋ชจ๋ฆฌ/๋„คํŠธ์›Œํฌ/๋””์Šคํฌ ๊ณต๊ฐ„ ์†Œ๋น„์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ํ†ต๊ณ„๋ฅผ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค. .

Kubecost๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?

  • ๋น„์šฉ ๋ชจ๋ธ์€ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž์˜ API๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ๊ฐ€๊ฒฉ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๋˜ํ•œ, ๋…ธ๋“œ์˜ ์ฒ  ์ข…๋ฅ˜์™€ ์ง€์—ญ์— ๋”ฐ๋ผ ๋…ธ๋“œ๋‹น ๋น„์šฉ์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ ์‹คํ–‰ ๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๋ฆฌํ”„ ํฌ๋“œ๋Š” ์‹คํ–‰ ์ค‘์ธ ๋…ธ๋“œ๋‚˜ ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค์— ๋”ฐ๋ผ CPU ์‚ฌ์šฉ๋Ÿ‰ ์‹œ๊ฐ„๋‹น, ์†Œ๋น„๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ๋‹น, ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ๋‹น ์‹œ๊ฐ„๋‹น ๋น„์šฉ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๊ฐœ๋ณ„ ํฌ๋“œ ์šด์˜ ๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ์„œ๋น„์Šค, ๋ฐฐํฌ, StatefulSet์— ๋Œ€ํ•œ ์š”๊ธˆ์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
  • ํ†ต๊ณ„๋Š” kube-state-metrics ๋ฐ node-exporter์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธก์ •ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

Kubecost๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Kubernetes์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๋งŒ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.. ํด๋Ÿฌ์Šคํ„ฐ์— ์—†๋Š” ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, GitLab ์„œ๋ฒ„, S3 ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ๊ธฐํƒ€ ์„œ๋น„์Šค(๋™์ผํ•œ ํด๋ผ์šฐ๋“œ์— ์žˆ๋”๋ผ๋„)๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GCP์™€ AWS์˜ ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ •์˜ ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ํ•จ๊ป˜ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜

Kubecost์—๋Š” ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • Kubernetes ๋ฒ„์ „ 1.8 ์ด์ƒ
  • kube-์ƒํƒœ-๋ฉ”ํŠธ๋ฆญ;
  • ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค;
  • ๋…ธ๋“œ ์ˆ˜์ถœ์—…์ž.

์šฐ๋ฆฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์กฐ๊ฑด์ด ๋ฏธ๋ฆฌ ์ถฉ์กฑ๋˜์—ˆ์œผ๋ฏ€๋กœ Prometheus์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ์˜ฌ๋ฐ”๋ฅธ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณต์‹ kubecost Helm ์ฐจํŠธ์—๋Š” ๋ฒ ์–ด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Kubecost๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํ‘œ์ค€ ์„ค์น˜ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น ๊ฐœ๋ฐœ์ž ์›น์‚ฌ์ดํŠธ์—์„œ ํ•„์ˆ˜ ๋น„์šฉ ๋ถ„์„๊ธฐ ์ €์žฅ์†Œ๋ฅผ Helm์— ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ์ฐจํŠธ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.. ๋‚จ์€ ๊ฒƒ์€ ํฌํŠธ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ(kubectl์„ ํ†ตํ•ด) ๋ฐ/๋˜๋Š” ๋น„์šฉ ๋ชจ๋ธ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •์„ ์›ํ•˜๋Š” ์ƒํƒœ๋กœ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

    ์šฐ๋ฆฌ๋Š” ํƒ€์‚ฌ์˜ ๊ธฐ์„ฑ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ๋ฒ•์„ ์‹œ๋„์กฐ์ฐจ ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ "์ง์ ‘ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”"๋ผ๋Š” ์ข‹์€ ์˜ต์…˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ๋” ์„ธ๋ถ€์ ์ธ ์กฐ์ •์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ ๊ฒฝ๋กœ๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  2. ๋ณธ์งˆ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ™์€ ์ฐจํŠธํ•˜์ง€๋งŒ ์ง์ ‘ ๊ตฌ์„ฑํ•˜๊ณ  ์„ค์น˜ํ•˜์„ธ์š”. ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ.

    ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด kubecost ์ž์ฒด ์™ธ์—๋„ ์ด ์ฐจํŠธ์—๋Š” Grafana ๋ฐ Prometheus ์ฐจํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ์›ํ•˜๋Š” ๋Œ€๋กœ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ฐจํŠธ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ values.yaml ๋น„์šฉ ๋ถ„์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๋ฐฐํฌํ•ด์•ผ ํ•˜๋Š” ๋น„์šฉ ๋ถ„์„๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ ๋ชฉ๋ก
    • Prometheus์˜ ์—”๋“œํฌ์ธํŠธ(์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ)
    • ๋น„์šฉ ๋ชจ๋ธ ๋ฐ Grafana์— ๋Œ€ํ•œ ๋„๋ฉ”์ธ ๋ฐ ๊ธฐํƒ€ ์ˆ˜์‹  ์„ค์ •
    • ํฌ๋“œ์— ๋Œ€ํ•œ ์ฃผ์„;
    • ์˜๊ตฌ ์ €์žฅ์†Œ ์‚ฌ์šฉ์˜ ํ•„์š”์„ฑ๊ณผ ํฌ๊ธฐ.

    ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ ์˜ต์…˜์˜ ์ „์ฒด ๋ชฉ๋ก์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜.

    ๊ธฐ๋ณธ ๋ฒ„์ „์˜ kubecost๋Š” ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์›น ํŒจ๋„์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ธ์ฆ์„ ์ฆ‰์‹œ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  3. ์„ค์น˜ ์‹œ์Šคํ…œ ์ฝ”์–ด๋งŒ - ๋น„์šฉ ๋ชจ๋ธ. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์— Prometheus๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋ณ€์ˆ˜์— ํ•ด๋‹น ์ฃผ์†Œ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. prometheusEndpoint ํ—ฌ๋ฆ„์„ ์œ„ํ•ด. ๊ทธ ํ›„ - ์‹ ์ฒญ YAML ๊ตฌ์„ฑ ์„ธํŠธ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ.

    ์ด๋ฒˆ์—๋„ ๊ธฐ๋ณธ ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜์—ฌ Ingress๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋น„์šฉ ๋ชจ๋ธ ์ง€ํ‘œ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•œ ์„น์…˜์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. extraScrapeConfigs Prometheus ๊ตฌ์„ฑ์—์„œ:

    - job_name: kubecost
      honor_labels: true
      scrape_interval: 1m
      scrape_timeout: 10s
      metrics_path: /metrics
      scheme: http
      dns_sd_configs:
      - names:
        - <ะฐะดั€ะตั ะฒะฐัˆะตะณะพ ัะตั€ะฒะธัะฐ kubecost>
        type: 'A'
        port: 9003

์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ์–ป์Šต๋‹ˆ๊นŒ?

์ „์ฒด ์„ค์น˜๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ๋Œ€์‹œ๋ณด๋“œ ์„ธํŠธ๊ฐ€ ํฌํ•จ๋œ kubecost ๋ฐ Grafana ์›น ํŒจ๋„์„ ๋งˆ์Œ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋น„์šฉ๋ฉ”์ธ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์€ ์‹ค์ œ๋กœ ํ•ด๋‹น ์›”์˜ ๋ฆฌ์†Œ์Šค ์˜ˆ์ƒ ๋น„์šฉ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๊ฒƒ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ˜„์žฌ ๋ฆฌ์†Œ์Šค ์†Œ๋น„ ์ˆ˜์ค€์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ์‚ฌ์šฉ ๋น„์šฉ(์›”๋ณ„)์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ฐ€๊ฒฉ์ž…๋‹ˆ๋‹ค.

์ด ์ธก์ •ํ•ญ๋ชฉ์€ ๋น„์šฉ์„ ๋ถ„์„ํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. kubecost์—์„œ ์ถ”์ƒ์ ์ธ XNUMX์›”์˜ ์ด ๋น„์šฉ์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฒญ๊ตฌ๋กœ ์ด๋™. ํ•˜์ง€๋งŒ 1/2/7/30/90์ผ ๋™์•ˆ์˜ ๋น„์šฉ์„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ๋ผ๋ฒจ, Pod๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฒญ๊ตฌ์—๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ์—์„œ Kubernetes ๋น„์šฉ ์ ˆ๊ฐ์„ ์œ„ํ•œ Kubecost ๊ฒ€ํ† 

๋งํ•˜๊ธฐ ๋ผ๋ฒจ. ์ฆ‰์‹œ ์„ค์ •์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๋น„์šฉ ๊ทธ๋ฃนํ™”๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ๋ฒ”์ฃผ๋กœ ์‚ฌ์šฉ๋  ๋ผ๋ฒจ ์ด๋ฆ„์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ์—์„œ Kubernetes ๋น„์šฉ ์ ˆ๊ฐ์„ ์œ„ํ•œ Kubecost ๊ฒ€ํ† 

์–ด๋–ค ๋ผ๋ฒจ์ด๋“  ๊ฑธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์ฒด ๋ผ๋ฒจ๋ง ์‹œ์Šคํ…œ์ด ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์—ฌ๊ธฐ์—์„œ ๋น„์šฉ ๋ชจ๋ธ์ด ์—ฐ๊ฒฐ๋˜๋Š” API ์—”๋“œํฌ์ธํŠธ์˜ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , GCP์—์„œ ํ• ์ธ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ , ์ธก์ •์„ ์œ„ํ•ด ๋ฆฌ์†Œ์Šค ๋ฐ ํ†ตํ™”์— ๋Œ€ํ•œ ์ž์ฒด ๊ฐ€๊ฒฉ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์–ด๋–ค ์ด์œ ๋กœ ์ด ๊ธฐ๋Šฅ์€ ์ด ๋น„์šฉ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

Kubecost๋Š” ๋‹ค์–‘ํ•œ ๋ชจ์Šต์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฌธ์ œ (๊ทธ๋ฆฌ๊ณ  ์œ„ํ—˜์ด ์žˆ์„ ๊ฒฝ์šฐ์—๋„ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค). ์•ˆํƒ€๊น๊ฒŒ๋„ ์ด ์˜ต์…˜์€ ๊ตฌ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ์ด ์žˆ๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ์ง€์†์ ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ์—์„œ Kubernetes ๋น„์šฉ ์ ˆ๊ฐ์„ ์œ„ํ•œ Kubecost ๊ฒ€ํ† 

์ค‘์š”ํ•œ ๋„๊ตฌ - ํด๋Ÿฌ์Šคํ„ฐ ์ ˆ๊ฐ์•ก. ํฌ๋“œ์˜ ํ™œ๋™(๋„คํŠธ์›Œํฌ๋ฅผ ํฌํ•จํ•œ ๋ฆฌ์†Œ์Šค ์†Œ๋น„)์„ ์ธก์ •ํ•˜๊ณ  ๋น„์šฉ๊ณผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋Š” ๋น„์šฉ๋„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ ํ™” ํŒ์€ ๋งค์šฐ ๋ช…๋ฐฑํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฒฝํ—˜์ƒ ์•„์ง ์‚ดํŽด๋ด์•ผ ํ•  ๋ถ€๋ถ„์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ํฌ๋“œ์˜ ๋„คํŠธ์›Œํฌ ํ™œ๋™์ด ๋ชจ๋‹ˆํ„ฐ๋ง๋˜๊ณ (Kubecost๋Š” ๋น„ํ™œ์„ฑ ๋…ธ๋“œ์— ์ฃผ์˜ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•จ), ์š”์ฒญ๋œ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์†Œ๋น„๋Ÿ‰์„ ๋น„๊ตํ•˜๊ณ , ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” CPU(์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ์ถ•์†Œ ์ œ์•ˆ), ๋””์Šคํฌ ์†Œ๋น„๋Ÿ‰๋„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ ๋ฐ ์ˆ˜์‹ญ ๊ฐœ์˜ ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜.

๋ชจ๋“  ์ตœ์ ํ™” ๋ฌธ์ œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Kubecost ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ์ ํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ๋‹ค๋ฃจ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Cluster Savings๋Š” ๋…ธ๋“œ ์‚ญ์ œ๊ฐ€ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋ฉด์„œ ๋…ธ๋“œ ์‚ญ์ œ๋ฅผ ์ œ์•ˆํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋…ธ๋“œ ์„ ํƒ๊ธฐ ๋ฐ ๋…ธ๋“œ์— ๋ฐฐํฌ๋œ Pod์˜ taint์˜ ์กด์žฌ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์ œํ’ˆ ์ž‘์„ฑ์ž์กฐ์ฐจ๋„ ์ตœ๊ทผ ๊ธฐ์‚ฌ (๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ์ ํŠธ ์ฃผ์ œ์— ๊ด€์‹ฌ์ด์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋งค์šฐ ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.) ๋น„์šฉ ์ตœ์ ํ™”์— ์„œ๋‘๋ฅด์ง€ ๋ง๊ณ  ์‹ ์ค‘ํ•˜๊ฒŒ ๋ฌธ์ œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

๋ช‡ ๊ฐ€์ง€ ํ”„๋กœ์ ํŠธ์—์„œ kubecost๋ฅผ ํ•œ ๋‹ฌ๊ฐ„ ์‚ฌ์šฉํ•œ ํ›„, Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์‚ฌ์šฉ๋˜๋Š” ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด์˜ ์„œ๋น„์Šค ๋น„์šฉ์„ ๋ถ„์„ํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ์žˆ์–ด ํฅ๋ฏธ๋กญ๊ณ  ๋ฐฐ์šฐ๊ณ  ์„ค์น˜ํ•˜๊ธฐ ์‰ฌ์šด ๋„๊ตฌ๋ผ๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์‚ฐ์€ ๋งค์šฐ ์ •ํ™•ํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์‹คํ—˜์—์„œ ๊ณ„์‚ฐ์€ ๊ณต๊ธ‰์ž๊ฐ€ ์‹ค์ œ๋กœ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ๊ณผ ์ผ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ๋‹จ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๊ณ  ์ผ๋ถ€ ์œ„์น˜์—์„œ๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์— ํŠน์ •ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๋น„์šฉ์„ ์ง€์†์ ์œผ๋กœ 5~30% ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ˆ์ด ์–ด๋””๋กœ ๊ฐ€๊ณ  ๋ฌด์—‡์„ "์‚ญ๊ฐ"ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‹ ์†ํ•˜๊ฒŒ ํŒŒ์•…ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ ์ผ์ž…๋‹ˆ๋‹ค) ์ด๋Š” ํ›Œ๋ฅญํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค. .

PS

๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€