DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ œ ์ด๋ฆ„์€ Viktor Yagofarov์ด๊ณ  DomClick์—์„œ Ops(์šด์˜) ํŒ€์˜ ๊ธฐ์ˆ  ๊ฐœ๋ฐœ ๊ด€๋ฆฌ์ž๋กœ Kubernetes ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Dev <-> Ops ํ”„๋กœ์„ธ์Šค์˜ ๊ตฌ์กฐ, ๋Ÿฌ์‹œ์•„์—์„œ ๊ฐ€์žฅ ํฐ k8s ํด๋Ÿฌ์Šคํ„ฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ์šด์˜ํ•˜๋Š” ๊ธฐ๋Šฅ, ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ ํŒ€์ด ์ ์šฉํ•˜๋Š” DevOps/SRE ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ž‘์ „ํŒ€

์šด์˜ํŒ€์€ ํ˜„์žฌ 15๋ช…์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ XNUMX๋ช…์€ ์‚ฌ๋ฌด์‹ค์„ ๋‹ด๋‹นํ•˜๊ณ , XNUMX๋ช…์€ ๋‹ค๋ฅธ ์‹œ๊ฐ„๋Œ€์—์„œ ๊ทผ๋ฌดํ•˜๋ฉฐ ๋ฐค์—๋„ ๊ทผ๋ฌด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Ops์˜ ๋ˆ„๊ตฐ๊ฐ€๋Š” ํ•ญ์ƒ ๋ชจ๋‹ˆํ„ฐ ์•ž์— ์„œ์„œ ๋ณต์žกํ•œ ์‚ฌ๊ณ ์— ๋Œ€์‘ํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ •์‹ ์„ ๋ณด์กดํ•˜๊ณ  ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ถฉ๋ถ„ํ•œ ์ˆ˜๋ฉด์„ ์ทจํ•˜๊ณ  ์ปดํ“จํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๊ฐ€ ์‹œ๊ฐ„์„ ๋ณด๋‚ผ ์ˆ˜์žˆ๋Š” ์•ผ๊ฐ„ ๊ทผ๋ฌด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

๋„คํŠธ์›Œํฌ ๋‹ด๋‹น์ž, DBA, ELK ์Šคํƒ ์ „๋ฌธ๊ฐ€, Kubernetes ๊ด€๋ฆฌ์ž/๊ฐœ๋ฐœ์ž, ๋ชจ๋‹ˆํ„ฐ๋ง, ๊ฐ€์ƒํ™”, ํ•˜๋“œ์›จ์–ด ์ „๋ฌธ๊ฐ€ ๋“ฑ ๋ชจ๋“  ์‚ฌ๋žŒ์€ ์„œ๋กœ ๋‹ค๋ฅธ ์—ญ๋Ÿ‰์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€๊ฐ€ ๋ชจ๋‘๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ์–ด๋Š ์ •๋„ ์šฐ๋ฆฌ ์ค‘ ๋ˆ„๊ตฌ๋ผ๋„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด k8s ํด๋Ÿฌ์Šคํ„ฐ์— ์ƒˆ ๋…ธ๋“œ ๋„์ž…, PostgreSQL ์—…๋ฐ์ดํŠธ, CI/CD + Ansible ํŒŒ์ดํ”„๋ผ์ธ ์ž‘์„ฑ, Python/Bash/Go์—์„œ ์ž๋™ํ™”, ํ•˜๋“œ์›จ์–ด ์—ฐ๊ฒฐ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์„ผํ„ฐ. ์–ด๋–ค ์˜์—ญ์—์„œ๋“  ๊ฐ•๋ ฅํ•œ ์—ญ๋Ÿ‰์ด ์žˆ๋‹ค๊ณ  ํ•ด์„œ ํ™œ๋™ ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๊ณ  ๋‹ค๋ฅธ ์˜์—ญ์—์„œ ๊ฐœ์„ ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ €๋Š” PostgreSQL ์ „๋ฌธ๊ฐ€๋กœ ํšŒ์‚ฌ์— ์ž…์‚ฌํ–ˆ๋Š”๋ฐ ํ˜„์žฌ ์ œ๊ฐ€ ์ฃผ๋กœ ๋‹ด๋‹นํ•˜๋Š” ๋ถ„์•ผ๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์ž…๋‹ˆ๋‹ค. ํŒ€์—์„œ๋Š” ์–ด๋–ค ํ‚ค๋“  ํ™˜์˜ํ•˜๋ฉฐ ๋ ˆ๋ฒ„๋ฆฌ์ง€ ๊ฐ๊ฐ์ด ๋งค์šฐ ๋ฐœ๋‹ฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์šฐ๋ฆฌ๋Š” ์‚ฌ๋ƒฅ ์ค‘์ž…๋‹ˆ๋‹ค. ํ›„๋ณด์ž์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์€ ๋งค์šฐ ํ‘œ์ค€์ ์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์‚ฌ๋žŒ์ด ํŒ€์— ์ ์‘ํ•˜๊ณ  ๊ฐˆ๋“ฑ์ด ์—†์œผ๋ฉฐ ์ž์‹ ์˜ ๊ด€์ ์„ ๋ฐฉ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ๋ฐœ์ „ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ์ผ์„ ๋‘๋ ค์›Œํ•˜์ง€ ์•Š๊ณ  ์•„์ด๋””์–ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด์— ๋Œ€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Šฅ๋ ฅ, Linux ๋ฐ ์˜์–ด์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. fakap์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ 10๋ถ„์ด ์•„๋‹Œ 10์ดˆ ์•ˆ์— ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ Google์— ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ Linux์— ๋Œ€ํ•œ ๊นŠ์€ ์ง€์‹์„ ๊ฐ–์ถ˜ ์ „๋ฌธ๊ฐ€๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์šฐ์Šค์šด ์ผ์ด์ง€๋งŒ ํ›„๋ณด์ž XNUMX๋ช… ์ค‘ XNUMX๋ช…์€ "๋กœ๋“œ ํ‰๊ท ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?"๋ผ๋Š” ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‚˜์š”?โ€, โ€œC ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ฝ”์–ด ๋คํ”„๋ฅผ ์กฐ๋ฆฝํ•˜๋Š” ๋ฐฉ๋ฒ•โ€์ด๋ผ๋Š” ์งˆ๋ฌธ์€ ์Šˆํผ๋งจ์ด๋‚˜ ๊ณต๋ฃก์˜ ์„ธ๊ณ„์—์„œ ๋‚˜์˜ค๋Š” ์งˆ๋ฌธ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์€ ๋‹ค๋ฅธ ์—ญ๋Ÿ‰์„ ๊ณ ๋„๋กœ ๋ฐœ๋‹ฌ์‹œ์ผฐ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” Linux๋ฅผ ๊ฐ€๋ฅด์น  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์ฐธ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. "ํ˜„๋Œ€ ํด๋ผ์šฐ๋“œ ์„ธ๊ณ„์—์„œ DevOps ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์•Œ์•„์•ผ ํ•˜๋Š” ์ด์œ "๋ผ๋Š” ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋Œ€๋‹ต์€ ๊ธฐ์‚ฌ ๋ฒ”์œ„์—์„œ ๋ฒ—์–ด๋‚˜์•ผ ํ•˜์ง€๋งŒ ์„ธ ๋‹จ์–ด๋กœ ๋งํ•˜๋ฉด ์ด ๋ชจ๋“  ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํŒ€ ๋„๊ตฌ

๋„๊ตฌ ํŒ€์€ ์ž๋™ํ™”์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ์ฃผ์š” ์ž„๋ฌด๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํŽธ๋ฆฌํ•œ ๊ทธ๋ž˜ํ”ฝ ๋ฐ CLI ๋„๊ตฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‚ด๋ถ€ ๊ฐœ๋ฐœ Confer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช‡ ๋ฒˆ์˜ ๋งˆ์šฐ์Šค ํด๋ฆญ๋งŒ์œผ๋กœ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ Kubernetes์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋กค์•„์›ƒํ•˜๊ณ  ๋ฆฌ์†Œ์Šค, ์ €์žฅ์†Œ์˜ ํ‚ค ๋“ฑ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” Jenkins + Helm 2๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์†Œํ”„ํŠธ์›จ์–ด ์ˆ˜๋ช…์ฃผ๊ธฐ์— ํ†ต์ผ์„ฑ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์ž์ฒด ๋„๊ตฌ๋ฅผ ๊ฐœ๋ฐœํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Ops ํŒ€์€ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์ง€๋งŒ ์ž‘์„ฑ ์‹œ ๋ชจ๋“  ๋ฌธ์ œ์— ๋Œ€ํ•ด ์กฐ์–ธ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹Helm 3๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

๊ฐœ๋ฐœ์ž

DevOps์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœํŒ€์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  Confer to dev -> qa/stage -> prod๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์ถœ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ๋Š๋ ค์ง€์ง€ ์•Š๊ณ  ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ฑ…์ž„์€ Dev ๋ฐ Ops ํŒ€์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ฎ์—๋Š” OpsํŒ€ ๋‹น์ง์ž๊ฐ€ ๋จผ์ € ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์‚ฌ๊ฑด์— ๋Œ€์‘ํ•ด์•ผ ํ•˜๊ณ , ์ €๋…๊ณผ ๋ฐค์—๋Š” ๋‹น์ง ๊ด€๋ฆฌ์ž(Ops)๊ฐ€ ์•Œ๋ฉด ๋‹น์ง ๊ฐœ๋ฐœ์ž๋ฅผ ๊นจ์›Œ์•ผ ํ•œ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์ธํ”„๋ผ์— ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋‹ˆํ„ฐ๋ง์˜ ๋ชจ๋“  ์ง€ํ‘œ์™€ ๊ฒฝ๊ณ ๋Š” ์ž๋™ ๋˜๋Š” ๋ฐ˜์ž๋™์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Ops์˜ ์ฑ…์ž„ ์˜์—ญ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ”„๋กœ๋•์…˜์— ์ถœ์‹œ๋˜๋Š” ์ˆœ๊ฐ„๋ถ€ํ„ฐ ์‹œ์ž‘๋˜์ง€๋งŒ Dev์˜ ์ฑ…์ž„์€ ๊ฑฐ๊ธฐ์„œ ๋๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๋™์ผํ•œ ๋ณดํŠธ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋Š” ๊ด€๋ฆฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(์˜ˆ: Go ๋ฐฑ์—”๋“œ + HTML5)๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์กฐ์–ธํ•˜๊ณ , ๊ด€๋ฆฌ์ž๋Š” ์ธํ”„๋ผ ๋ฌธ์ œ ๋˜๋Š” k8s์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์กฐ์–ธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์šฐ๋ฆฌ๋Š” ๋ชจ๋†€๋ฆฌ์Šค๊ฐ€ ์ „ํ˜€ ์—†๊ณ  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž๋กœ ์ธก์ •ํ•˜๋ฉด ์ง€๊ธˆ๊นŒ์ง€ prod k900s ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ทธ ์ˆ˜๋Š” 1000์—์„œ 8 ์‚ฌ์ด์—์„œ ๋ณ€๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ. Pod ์ˆ˜๋Š” 1700~2000๊ฐœ ์‚ฌ์ด์—์„œ ๋ณ€๋™ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ prod ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” ์•ฝ 2000๊ฐœ์˜ Pod๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถˆํ•„์š”ํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ฐ˜์ž๋™์œผ๋กœ ์ž˜๋ผ๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํ•œ ์ˆ˜์น˜๋ฅผ ๋ง์”€๋“œ๋ฆด ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. K8์€ ๋ถˆํ•„์š”ํ•œ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์“ธ๋ชจ์—†๋Š” ์—ฐ์‚ฐ์ž, ์ด๋Š” ๋งŽ์€ ์ž์›๊ณผ ๋น„์šฉ์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

์ž์› ๊ด€๋ฆฌ

๋ชจ๋‹ˆํ„ฐ๋ง

์ฒด๊ณ„์ ์ด๊ณ  ์œ ์ตํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์€ ๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ ์šด์˜์˜ ์ดˆ์„์ด ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•„์ง ๋ชจ๋“  ๋ชจ๋‹ˆํ„ฐ๋ง ์š”๊ตฌ ์‚ฌํ•ญ์„ 100% ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ์†”๋ฃจ์…˜์„ ์ฐพ์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ™˜๊ฒฝ์—์„œ ์ •๊ธฐ์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ๋งž์ถคํ˜• ์†”๋ฃจ์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • ์ž ๋น„์ธ . ์ฃผ๋กœ ์ธํ”„๋ผ์˜ ์ „๋ฐ˜์ ์ธ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•œ ์˜ค๋ž˜๋œ ๋ชจ๋‹ˆํ„ฐ๋ง์ž…๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ, ๋„คํŠธ์›Œํฌ ๋“ฑ์˜ ์ธก๋ฉด์—์„œ ๋…ธ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ์‹œ๊ธฐ๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์ดˆ์ž์—ฐ์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋ณ„๋„์˜ ์—์ด์ „ํŠธ DaemonSet๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ์˜ DNS ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ์–ด๋ฆฌ์„์€ coredns ํฌ๋“œ๋ฅผ ์ฐพ๊ณ  ์™ธ๋ถ€ ํ˜ธ์ŠคํŠธ์˜ ๊ฐ€์šฉ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์™œ ์ด๊ฒƒ์„ ๊ท€์ฐฎ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ๊ฒฝ์šฐ ์ด ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์‹ฌ๊ฐํ•œ ์‹คํŒจ ์ง€์ ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ๋‚˜๋Š” ์„ค๋ช…, ํด๋Ÿฌ์Šคํ„ฐ์—์„œ DNS ์„ฑ๋Šฅ์œผ๋กœ ์ธํ•ด ์–ด๋ ค์›€์„ ๊ฒช์€ ๋ฐฉ๋ฒ•.
  • ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค ์˜คํผ๋ ˆ์ดํ„ฐ. ๋‹ค์–‘ํ•œ ๋‚ด๋ณด๋‚ด๊ธฐ ์„ธํŠธ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ๋Œ€๊ทœ๋ชจ ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ, Grafana์˜ ๋Œ€๊ทœ๋ชจ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๊ฒฝ๊ณ ๋ฅผ ์œ„ํ•ด Alertmanager๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

ํ๋ธŒ์˜ ํŒ€ ๋ฆฌ์†Œ์Šค

์˜ˆ์ œ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค.

์–ด๋–ค ํŒ€์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์–‘์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋ ค๋ฉด ั€ะตััƒั€ัั‹ (ํ”„๋กœ์„ธ์„œ, ๋ฉ”๋ชจ๋ฆฌ, ๋กœ์ปฌ SSD), ๊ฐ ๋ช…๋ น์„ ์ž์ฒด์ ์œผ๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ์ด์ „์— ํŒ€์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋…ผ์˜ํ•œ ํ›„ "ํ๋ธŒ"์—์„œ ํ”„๋กœ์„ธ์„œ, ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋””์Šคํฌ ์ธก๋ฉด์—์„œ ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ช…๋ น์€ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ์ˆ˜์ฒœ ๊ฐœ์˜ ์ฝ”์–ด์™€ ํ…Œ๋ผ๋ฐ”์ดํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” AD(RBAC ์‚ฌ์šฉ)๋ฅผ ํ†ตํ•ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ํ•ด๋‹น ์ œํ•œ์€ ํ’€ ์š”์ฒญ์„ ํ†ตํ•ด GIT ์ €์žฅ์†Œ์— ์ถ”๊ฐ€๋œ ๋‹ค์Œ ๋ชจ๋“  ๊ฒƒ์ด Ansible ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋กค์•„์›ƒ๋ฉ๋‹ˆ๋‹ค.

ํŒ€์— ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•˜๋Š” ์˜ˆ:

namespaces:

  chat-team:
    pods: 23
    limits:
      cpu: 11
      memory: 20Gi
    requests:
      cpu: 11
      memory: 20Gi

์š”์ฒญ ๋ฐ ํ•œ๋„

ํ๋ธŒํ˜•" ์˜๋ขฐ ๋ณด์žฅ๋œ ์˜ˆ์•ฝ ๋ฆฌ์†Œ์Šค ์ˆ˜์ž…๋‹ˆ๋‹ค. ํฌ๋“œ (ํ•˜๋‚˜ ์ด์ƒ์˜ Docker ์ปจํ…Œ์ด๋„ˆ)๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ํ•œ๋„๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š๋Š” ์ตœ๋Œ€๊ฐ’์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ํŒ€์ด ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์„ ์„ค์ •ํ•˜๊ณ  ํ•ด๋‹น ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์•„๋ž˜์˜ ๋ชจ๋“  ์š”์ฒญ์ด ์ด๋ฏธ "์‚ฌ์šฉ"๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ "ํ๋ธŒ"์— ๋ฐฐํฌํ•  ์ˆ˜ ์—†๋Š” ๋ฐฉ๋ฒ•์„ ๊ทธ๋ž˜ํ”„์—์„œ ์ž์ฃผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์œ„์˜ ์Šคํฌ๋ฆฐ์ƒท์—์„œ "์š”์ฒญ๋œ" CPU๊ฐ€ ์‹ค์ œ ์Šค๋ ˆ๋“œ ์ˆ˜์™€ ์ผ์น˜ํ•˜๊ณ  ์ œํ•œ์ด ์‹ค์ œ CPU ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค =)

์ด์ œ ์ผ๋ถ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ณ (์ €๋Š” "ํ๋ธŒ" ์ž์ฒด์˜ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ธ kube-system ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค) ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋œ ํ”„๋กœ์„ธ์„œ ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€ ์š”์ฒญ๋œ ์‹œ๊ฐ„์˜ ๋น„์œจ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU๊ฐ€ ์‹œ์Šคํ…œ ์„œ๋น„์Šค์šฉ์œผ๋กœ ์˜ˆ์•ฝ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. kube-system์˜ ๊ฒฝ์šฐ ์ด๋Š” ์ •๋‹นํ•ฉ๋‹ˆ๋‹ค. nginx ์ˆ˜์‹  ์ปจํŠธ๋กค๋Ÿฌ ๋˜๋Š” nodelocaldns๊ฐ€ ์ตœ๊ณ ์กฐ์— ๋‹ฌํ–ˆ์„ ๋•Œ CPU์— ๋„๋‹ฌํ•˜๊ณ  ๋งŽ์€ RAM์„ ์†Œ๋น„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋Š” ๊ทธ๋Ÿฌํ•œ ์˜ˆ์•ฝ์ด ์ •๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ง€๋‚œ 3์‹œ๊ฐ„ ๋™์•ˆ์˜ ์ฐจํŠธ์— ์˜์กดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์žฅ๊ธฐ๊ฐ„์— ๊ฑธ์นœ ๊ธฐ๋ก ์ธก์ •ํ•ญ๋ชฉ์„ ๋ณด๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.

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

DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹์š•์„ ์–ต์ œํ•ด์•ผ ํ•˜๋Š” ๊ผฌํˆฌ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์•ฝ ์กฐ์ ˆ + ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ ๊ธ€์„ XNUMX๊ฐœ ์ด์ƒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ถ๊ธˆํ•œ ์ ์€ ๋Œ“๊ธ€๋กœ ์งˆ๋ฌธํ•ด์ฃผ์„ธ์š”. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์ด๋Ÿฌํ•œ ์ธก์ • ํ•ญ๋ชฉ์„ ์ž๋™ํ™”ํ•˜๋Š” ์ž‘์—…์€ ๋งค์šฐ ์–ด๋ ต๊ณ  ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋ฉฐ "์ฐฝ" ๊ธฐ๋Šฅ ๋ฐ "CTE" Prometheus/VictoriaMetrics์™€์˜ ๊ท ํ˜• ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PromQL์—์„œ๋Š” ์ด์™€ ๊ฐ™์€ ๊ฒƒ์ด ์—†์œผ๋ฉฐ ๋ฌด์„œ์šด ์ฟผ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ํ…์ŠคํŠธ ํ™”๋ฉด์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ตœ์ ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” Cube์—์„œ ์ž์‹ ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋ฉฐ, ์–ด๋Š ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฆฌ์†Œ์Šค๋ฅผ "์ ˆ๋‹จ"ํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ๋ฐค์ƒˆ๋„๋ก ์ „์ฒด CPU๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ์–ธ์ œ, ์–ด๋””์„œ ์Šค์Šค๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ•๋ก 

ํšŒ์‚ฌ์—์„œ๋Š” ์ง€๊ธˆ์ฒ˜๋Ÿผ ์œ ํ–‰์˜, ์šฐ๋ฆฌ๋Š” DevOps๋ฅผ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. SRE- ์‹ค๋ฌด์ž ํšŒ์‚ฌ์— 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค, ์ „์ฒด ์ธํ”„๋ผ์— ๋Œ€ํ•œ ์•ฝ 350๋ช…์˜ ๊ฐœ๋ฐœ์ž ๋ฐ 15๋ช…์˜ ๊ด€๋ฆฌ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ "์œ ํ–‰"ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“  "๊ธฐ๋ณธ" ๋’ค์—๋Š” ๋ชจ๋“  ๊ฒƒ๊ณผ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์ž๋™ํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ธด๊ธ‰ํ•œ ํ•„์š”์„ฑ์ด ์žˆ์œผ๋ฉฐ ๊ด€๋ฆฌ์ž๋Š” ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ์žˆ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค์—์„œ.

Ops๋กœ์„œ ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์„œ๋น„์Šค ์‘๋‹ต๋ฅ  ๋ฐ ์˜ค๋ฅ˜์™€ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ์ง€ํ‘œ์™€ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

ํ•œ ๋‹ฌ ๋™์•ˆ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์•„๋งˆ๋„ ์ข‹์€ ์‹ ํ˜ธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ "์›ํ•˜๋Š” ๊ฒƒ"์ด โ€‹โ€‹์ด๋ฏธ ์‹คํ˜„๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์ค‘์—๋Š” ์ ์–ด๋„ ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ์”ฉ ์ƒˆ๋กœ์šด ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋Š” ์ผ์ด ์ผ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.

DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด์ œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ด€๋ฆฌ์ž์—๊ฒŒ "์–ด๋–ค ์ข…๋ฅ˜์˜ ์ธก์ • ํ•ญ๋ชฉ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€"์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฑฐ์˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ ๊ฒฐ๊ณผ๋Š” ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„ ์„œ๋น„์Šค ๋ฉ”์‹œ ๊ณง ์ถœ์‹œ๋  ์˜ˆ์ •์ด๋ฉฐ ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ์‚ถ์ด ํ›จ์”ฌ ๋” ์‰ฌ์›Œ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Tools์˜ ๋™๋ฃŒ๋“ค์€ ์ด๋ฏธ ์ถ”์ƒ์ ์ธ "๊ฑด๊ฐ•ํ•œ ์‚ฌ๋žŒ์˜ Istio" ๊ตฌํ˜„์— ๊ฐ€๊นŒ์›Œ์กŒ์Šต๋‹ˆ๋‹ค. ๊ฐ HTTP(s) ์š”์ฒญ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง์—์„œ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์„œ๋น„์Šค ๊ฐ„(๋ฟ๋งŒ ์•„๋‹ˆ๋ผ) ์ƒํ˜ธ ์ž‘์šฉ ์ค‘์— "๋ชจ๋“  ๋‹จ๊ณ„์—์„œ ๋ชจ๋“  ๊ฒƒ์ด ์ค‘๋‹จ๋˜์—ˆ๋Š”์ง€"๋ฅผ ํ•ญ์ƒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DomClick ํ—ˆ๋ธŒ์˜ ๋‰ด์Šค๋ฅผ ๊ตฌ๋…ํ•˜์„ธ์š”. =)

Kubernetes ์ธํ”„๋ผ ์ง€์›

์—ญ์‚ฌ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ํŒจ์น˜ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค ํ๋ธŒ์Šคํ”„๋ ˆ์ด โ€” Kubernetes ๋ฐฐํฌ, ํ™•์žฅ, ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ Ansible ์—ญํ• ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์‹œ์ ์—์„œ๋Š” kubeadm์ด ์•„๋‹Œ ์„ค์น˜์— ๋Œ€ํ•œ ์ง€์›์ด ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์—์„œ ์ค‘๋‹จ๋˜์—ˆ๊ณ  kubeadm์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ œ์•ˆ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ Southbridge ํšŒ์‚ฌ๋Š” ์ž์ฒด ํฌํฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค(kubeadm ์ง€์› ๋ฐ ์ค‘์š”ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋น ๋ฅธ ์ˆ˜์ • ํฌํ•จ).

๋ชจ๋“  k8s ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์šฐ๋ฆฌ๋Š” ํ๋ธŒ์Šคํ”„๋ ˆ์ด Southbridge์—์„œ Merjim์ด๋ผ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š”.
  • ๋‹ค์Œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ถœ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ŠคํŠธ๋ ˆ์Šค- "ํ๋ธŒ".
  • ํ•œ ๋ฒˆ์— ํ•œ ๋…ธ๋“œ์”ฉ ์—…๋ฐ์ดํŠธ๋ฅผ ๋กค์•„์›ƒํ•ฉ๋‹ˆ๋‹ค(Ansible์—์„œ๋Š” "์ง๋ ฌ: 1"์ž„). ๋ฐ๋ธŒ- "ํ๋ธŒ".
  • ์—…๋ฐ์ดํŠธํ•œ๋‹ค ์ž๊ทนํ•˜๋‹ค ํ† ์š”์ผ ์ €๋…์—๋Š” ํ•œ ๋ฒˆ์— ํ•œ ๋…ธ๋“œ์”ฉ.

์ถ”ํ›„์— ๊ต์ฒดํ•  โ€‹โ€‹๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค ํ๋ธŒ์Šคํ”„๋ ˆ์ด ๋” ๋นจ๋ฆฌ ๋ญ”๊ฐ€๋ฅผ ์œ„ํ•ด ๊ฐ€์‹ญ์‹œ์˜ค kubeadm.

์ „์ฒด์ ์œผ๋กœ Stress, Dev ๋ฐ Prod์˜ ์„ธ ๊ฐ€์ง€ "ํ๋ธŒ"๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ ๋‹ค๋ฅธ ์ œํ’ˆ์„ ์ถœ์‹œํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค(ํ•ซ ๋Œ€๊ธฐ) ๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ Prod-โ€œCubeโ€. ์ŠคํŠธ๋ ˆ์Šค ะธ ๋ฐ๋ธŒ "๊ฐ€์ƒ ๋จธ์‹ "(Stress์šฉ oVirt ๋ฐ Dev์šฉ VMWare ํด๋ผ์šฐ๋“œ)์— ์‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๊ทนํ•˜๋‹ค- "ํ๋ธŒ"๋Š” "๋ฒ ์–ด ๋ฉ”ํƒˆ"์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” CPU ์Šค๋ ˆ๋“œ 32๊ฐœ, ๋ฉ”๋ชจ๋ฆฌ 64~128GB, SSD RAID 300 10GB๋ฅผ ๊ฐ–์ถ˜ ๋™์ผํ•œ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค. ์ด 50๊ฐœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. XNUMX๊ฐœ์˜ "์”ฌ" ๋…ธ๋“œ๊ฐ€ "๋งˆ์Šคํ„ฐ" ์ „์šฉ์ž…๋‹ˆ๋‹ค. ์ž๊ทนํ•˜๋‹ค- "์ฟ ๋ฐ”": 16GB ๋ฉ”๋ชจ๋ฆฌ, 12๊ฐœ CPU ์Šค๋ ˆ๋“œ.

ํŒ๋งค๋ฅผ ์œ„ํ•ด์„œ๋Š” "๋ฒ ์–ด๋ฉ”ํƒˆ"์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ด์–ด๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. OpenStack: "์‹œ๋„๋Ÿฌ์šด ์ด์›ƒ"๊ณผ CPU๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์„ ํ›”์น˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ๋‚ด OpenStack์˜ ๊ฒฝ์šฐ ๊ด€๋ฆฌ ๋ณต์žก์„ฑ์ด ์•ฝ ๋‘ ๋ฐฐ๋กœ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

CI/CD "Cubic" ๋ฐ ๊ธฐํƒ€ ์ธํ”„๋ผ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ฒฝ์šฐ ๋ณ„๋„์˜ GIT ์„œ๋ฒ„์ธ Helm 3์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(Helm 2์—์„œ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ๊ณ ํ†ต์Šค๋Ÿฌ์› ์ง€๋งŒ ์˜ต์…˜์— ๋งค์šฐ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค) ์›์ž์˜), ์  ํ‚จ์Šค, ์•ค์„œ๋ธ”, ๋„์ปค. ์šฐ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ์—์„œ ๊ธฐ๋Šฅ ๋ถ„๊ธฐ์™€ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์œผ๋กœ์˜ ๋ฐฐํฌ๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

DomClick์˜ Kubernetes: 1000๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ‰ํ™”๋กญ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•
์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์šด์˜ ์—”์ง€๋‹ˆ์–ด์˜ ๊ด€์ ์—์„œ DomClick์˜ DevOps ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ๋Š” ๋‚ด๊ฐ€ ์˜ˆ์ƒํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ๋œ ๊ธฐ์ˆ ์ ์ธ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Habrรฉ์˜ DomClick ๋‰ด์Šค๋ฅผ ๋”ฐ๋ฅด์„ธ์š”. Kubernetes ๋“ฑ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ "ํ•˜๋“œ์ฝ”์–ด" ๊ธฐ์‚ฌ๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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