Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฑด๊ฐ•ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Polaris ๋„์ž…

๋ฉ”๋ชจ. ๋ฒˆ์—ญ: ์ด ํ…์ŠคํŠธ์˜ ์›๋ณธ์€ ๋ฐœํ‘œ๋œ ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ ๋ฐฐํ›„์— ์žˆ๋Š” ReactiveOps์˜ ์ˆ˜์„ SRE ์—”์ง€๋‹ˆ์–ด์ธ Rob Scott์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Kubernetes์— ๋ฐฐํฌ๋œ ๊ฒƒ์— ๋Œ€ํ•œ ์ค‘์•™ ์ง‘์ค‘์‹ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์•„์ด๋””์–ด์— ๋งค์šฐ ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ๋ฅผ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ณ  ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฑด๊ฐ•ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Polaris ๋„์ž…

์†Œ๊ฐœํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค ํด๋ผ๋ฆฌ์Šค Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์˜ "์ƒํƒœ"๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ReactiveOps์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Polaris๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค๋ฅผ ๊ณต๊ฐœํ•  ๋•Œ์ž…๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์‚ฌ์†Œํ•œ ๊ตฌ์„ฑ ๊ฒฐํ•จ์ด ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋ฐค์— ์ž ์„ ์ด๋ฃจ์ง€ ๋ชปํ•˜๋Š” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๊ฒƒ - ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฑด๋ง์ฆ์œผ๋กœ ์ธํ•ด ๊ฐ„๊ณผ๋œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ ๊ตฌ์„ฑ (์ž์› ์š”์ฒญ) - ์ž๋™ ํฌ๊ธฐ ์กฐ์ •์ด ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›Œํฌ๋กœ๋“œ์— ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋Š” ์ƒํƒœ๋กœ ๋‚จ๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์‚ฌ์†Œํ•œ ๊ตฌ์„ฑ ์‹ค์ˆ˜๋กœ ์ธํ•ด ์ƒ์‚ฐ ์ค‘๋‹จ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ์ด์ œ Polaris๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์™„์ „ํžˆ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Polaris๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

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

ํด๋ผ๋ฆฌ์Šค ๋Œ€์‹œ๋ณด๋“œ

Polaris ๋Œ€์‹œ๋ณด๋“œ๋Š” Kubernetes ๋ฐฐํฌ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ฐœ์„ ์„ ์œ„ํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์‹œ๊ฐ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ „์ฒด ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋ฒ”์ฃผ, ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฐ ๋ฐฐํฌ๋ณ„๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฑด๊ฐ•ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Polaris ๋„์ž…

Polaris๊ฐ€ ์„ค์ •ํ•œ ๊ธฐ๋ณธ ๊ธฐ์ค€์€ ์ƒ๋‹นํžˆ ๋†’์œผ๋ฏ€๋กœ ์ ์ˆ˜๊ฐ€ ์˜ˆ์ƒ๋ณด๋‹ค ๋‚ฎ์•„๋„ ๋†€๋ผ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. Polaris์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๋†’์€ ๊ธฐ์ค€์„ ์„ค์ •ํ•˜๊ณ  ํ›Œ๋ฅญํ•œ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ๊ตฌ์„ฑ์ด ๋„ˆ๋ฌด ๊ฒฝ์ง๋œ ๊ฒƒ ๊ฐ™์œผ๋ฉด ๋ฐฐํฌ ๊ตฌ์„ฑ ํ”„๋กœ์„ธ์Šค ์ค‘์— ์ˆ˜์ •ํ•˜์—ฌ ํŠน์ • ์›Œํฌ๋กœ๋“œ์— ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Polaris ์ถœํŒ๋ฌผ์˜ ์ผ๋ถ€๋กœ ์šฐ๋ฆฌ๋Š” ๋„๊ตฌ ์ž์ฒด๋ฅผ ์ œ์‹œํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๊ธฐ์— ํฌํ•จ๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ฒ€ํ† ์—๋Š” ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ด€๋ จ ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋งํฌ์™€ ์ฃผ์ œ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ๋ฆฌ์Šค ์›นํ›…

๋Œ€์‹œ๋ณด๋“œ๊ฐ€ โ€‹โ€‹๋ฐฐํฌ์˜ ํ˜„์žฌ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์–ป๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ Webhook์€ ํด๋Ÿฌ์Šคํ„ฐ์—๋งŒ ๋กค์•„์›ƒ๋˜๋Š” ๋ชจ๋“  ๋ฐฐํฌ์— ๋Œ€ํ•œ ํ‘œ์ค€์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์‹œ๋ณด๋“œ์—์„œ ์‹๋ณ„๋œ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ •๋œ ํ›„ ์›นํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ์ด ๋‹ค์‹œ๋Š” ์„ค์ •๋œ ํ‘œ์ค€ ์•„๋ž˜๋กœ ๋–จ์–ด์ง€์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Webhook์€ ๊ตฌ์„ฑ์— ์ƒ๋‹นํ•œ ํŽธ์ฐจ("์˜ค๋ฅ˜" ์ˆ˜์ค€)๊ฐ€ ํฌํ•จ๋œ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ ๋ฐฐํฌ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์‹œ์ž‘ํ•˜๊ธฐ

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

kubectl apply -f https://raw.githubusercontent.com/reactiveops/polaris/master/deploy/dashboard.yaml

์ด์ œ ๋กœ์ปฌ ํฌํŠธ โ€‹โ€‹8080์„ ํ†ตํ•ด ๋Œ€์‹œ๋ณด๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

kubectl port-forward --namespace polaris svc/polaris-dashboard 8080:80

๋ฌผ๋ก  Helm์„ ํฌํ•จํ•˜์—ฌ Polaris๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ๊ณผ ํ›จ์”ฌ ๋” ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค GitHub์˜ Polaris ๋ฆฌํฌ์ง€ํ† ๋ฆฌ.

์ด๊ฒƒ์€ ์‹œ์ž‘์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ Polaris์— ๊ตฌ์ถ•ํ•œ ๊ฒƒ์— ๋งŒ์กฑํ•˜์ง€๋งŒ ์ด์•ผ๊ธฐ๋Š” ์—ฌ๊ธฐ์„œ ๋๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋˜๋Š” ๋ฆฌ์†Œ์Šค ์ˆ˜์ค€์—์„œ ์˜ˆ์™ธ ํ™•์ธ ๊ทœ์น™์„ ๊ตฌํ˜„ํ•˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„ํš์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋กœ๋“œ๋งต.

Polaris๊ฐ€ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ธ์ƒ์„ ๋ฐ›์•˜๋‹ค๋ฉด ์‹œ๊ฐ„์„ ๋‚ด์–ด ์‚ฌ์šฉํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์•„์ด๋””์–ด, ํ”ผ๋“œ๋ฐฑ, ์งˆ๋ฌธ ๋˜๋Š” ํ’€ ์š”์ฒญ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ €ํฌ์—๊ฒŒ ์—ฐ๋ฝํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ํ”„๋กœ์ ํŠธ ์›น์‚ฌ์ดํŠธ์— GitHub์˜ ๋˜๋Š” ํŠธ์œ„ํ„ฐ.

๋ฒˆ์—ญ๊ฐ€์˜ ์ถ”์‹ 

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

์ถœ์ฒ˜ : habr.com

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