GitLab.com์„ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ XNUMX๋…„๊ฐ„์˜ ๊ฒฐ๊ณผ

๋ฉ”๋ชจ. ๋ฒˆ์—ญ: GitLab์˜ Kubernetes ๋„์ž…์€ ํšŒ์‚ฌ ์„ฑ์žฅ์— ๊ธฐ์—ฌํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์š”์ธ ์ค‘ ํ•˜๋‚˜๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ๊นŒ์ง€ GitLab.com ์˜จ๋ผ์ธ ์„œ๋น„์Šค์˜ ์ธํ”„๋ผ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ, ๋ถˆ๊ณผ 8๋…„ ์ „๋งŒ ํ•ด๋„ KXNUMXs๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์‹œ์ž‘๋˜์—ˆ์ง€๋งŒ ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด๋“ค์ด ์–ด๋–ค ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ๋Š”์ง€์— ๋Œ€ํ•œ GitLab SRE ์—”์ง€๋‹ˆ์–ด์˜ ์ตœ๊ทผ ๊ธฐ์‚ฌ ๋ฒˆ์—ญ์„ ๋ฐœํ‘œํ•˜๊ฒŒ ๋œ ๊ฒƒ์„ ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

GitLab.com์„ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ XNUMX๋…„๊ฐ„์˜ ๊ฒฐ๊ณผ

์•ฝ XNUMX๋…„ ๋™์•ˆ ์šฐ๋ฆฌ ์ธํ”„๋ผ ๋ถ€์„œ๋Š” GitLab.com์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ์„œ๋น„์Šค๋ฅผ Kubernetes๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ „ํ™˜ ์ค‘ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฐํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ๊ท€์ค‘ํ•œ ๊ตํ›ˆ์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

GitLab.com์˜ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ํ•ด๋‹น ์„œ๋ฒ„๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์˜ ํด๋ผ์šฐ๋“œ์—์„œ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ€์ƒ ๋จธ์‹ ์€ Chef์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ ๋‹น์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฆฌ๋ˆ…์Šค ํŒจํ‚ค์ง€. ๋ฐฐํฌ ์ „๋žต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ CI ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ •๋˜๊ณ  ์ˆœ์ฐจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์„œ๋ฒ„ ํ”Œ๋ฆฟ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋Š๋ฆฌ๊ณ  ์กฐ๊ธˆ ๋Š๋ฆฌ๊ธด ํ•˜์ง€๋งŒ ์ง€๋ฃจํ•œ - GitLab.com์ด ์˜คํ”„๋ผ์ธ ์‚ฌ์šฉ์ž์™€ ๋™์ผํ•œ ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. (์ž์ฒด ๊ด€๋ฆฌ) ์ด๋ฅผ ์œ„ํ•ด Linux ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GitLab์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

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

Kubernetes ๋ฐ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ GitLab์„ ์œ„ํ•œ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„

์ด ํ”„๋กœ์ ํŠธ๋Š” 2017๋…„์— ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. GitLab ์ฐจํŠธ ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด GitLab์„ ์ค€๋น„ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— GitLab์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” GitLab์„ Kubernetes๋กœ ์ „ํ™˜ํ•˜๋ฉด SaaS ํ”Œ๋žซํผ์˜ ํ™•์žฅ์„ฑ์ด ํ–ฅ์ƒ๋˜๊ณ  ๋ฐฐํฌ๊ฐ€ ๋‹จ์ˆœํ™”๋˜๋ฉฐ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค์˜ ํšจ์œจ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ์šฐ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋งŽ์€ ๊ธฐ๋Šฅ์€ ๋งˆ์šดํŠธ๋œ NFS ํŒŒํ‹ฐ์…˜์— ์˜์กดํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์ „ํ™˜ํ•˜๋Š” ์†๋„๊ฐ€ ๋Š๋ ค์กŒ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ Kubernetes๋กœ์˜ ์ถ”์ง„์„ ํ†ตํ•ด ์—”์ง€๋‹ˆ์–ด๋Š” ์ ์ง„์ ์ธ ์ „ํ™˜์„ ๊ณ„ํšํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ, ๊ทธ ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ณ„์† ๊ฐœ๋ฐœํ•˜๋Š” ๋™์‹œ์— ๋„คํŠธ์›Œํฌ ์Šคํ† ๋ฆฌ์ง€์— ๋Œ€ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ข…์†์„ฑ ์ค‘ ์ผ๋ถ€๋ฅผ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. 2019๋…„ ์—ฌ๋ฆ„์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณ„ํš์„ ์‹œ์ž‘ํ•œ ์ด๋ž˜๋กœ ์ด๋Ÿฌํ•œ ์ œํ•œ ์‚ฌํ•ญ ์ค‘ ๋งŽ์€ ๋ถ€๋ถ„์ด ํ•ด๊ฒฐ๋˜์—ˆ์œผ๋ฉฐ GitLab.com์„ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ˜„์žฌ ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค!

Kubernetes์˜ GitLab.com ๊ธฐ๋Šฅ

GitLab.com์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ์ผ ์ง€์—ญ GKE ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (์ด๋ฏธ ๊นŒ๋‹ค๋กœ์šด) ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์˜ ๋ณต์žก์„ฑ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋‚˜ NFS์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ์„œ๋น„์Šค์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. GitLab.com์€ ์ฃผ๋กœ ๋ชจ๋†€๋ฆฌ์‹ Rails ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์›Œํฌ๋กœ๋“œ ํŠน์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์ฒด ๋…ธ๋“œ ํ’€์— ๊ฒฉ๋ฆฌ๋œ ๋‹ค์–‘ํ•œ ์—”๋“œํฌ์ธํŠธ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ŸฐํŠธ์—”๋“œ์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์œ ํ˜•์€ ์›น, API, Git SSH/HTTPS ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋Œ€ํ•œ ์š”์ฒญ์œผ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์˜ ๊ฒฝ์šฐ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋Œ€๊ธฐ์—ด์˜ ์ž‘์—…์„ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ „ ์ •์˜๋œ ๋ฆฌ์†Œ์Šค ๊ฒฝ๊ณ„์ด๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์›Œํฌ๋กœ๋“œ์— ๋Œ€ํ•œ ์„œ๋น„์Šค ์ˆ˜์ค€ ๋ชฉํ‘œ(SLO)๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  GitLab.com ์„œ๋น„์Šค๋Š” ์ˆ˜์ •๋˜์ง€ ์•Š์€ GitLab Helm ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์€ ํ•˜์œ„ ์ฐจํŠธ์—์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ ์„œ๋น„์Šค๋ฅผ ์ ์ฐจ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด์„œ ์„ ํƒ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Redis, Postgres, GitLab Pages ๋ฐ Gitaly์™€ ๊ฐ™์€ ์ผ๋ถ€ ์ƒํƒœ ์ €์žฅ ์„œ๋น„์Šค๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์ง€๋งŒ Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Chef๊ฐ€ ํ˜„์žฌ ๊ด€๋ฆฌํ•˜๋Š” VM ์ˆ˜๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ๊ตฌ์„ฑ ๊ฐ€์‹œ์„ฑ ๋ฐ ๊ด€๋ฆฌ

๋ชจ๋“  ์„ค์ •์€ GitLab ์ž์ฒด์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Terraform๊ณผ Helm์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. GitLab์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋Šฅํ•  ๋•Œ๋งˆ๋‹ค GitLab ์ž์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜์ง€๋งŒ ์šด์˜ ์ž‘์—…์„ ์œ„ํ•ด ๋ณ„๋„์˜ GitLab ์„ค์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” GitLab.com ๋ฐฐํฌ ๋ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ GitLab.com์˜ ๊ฐ€์šฉ์„ฑ์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์šฉ ํŒŒ์ดํ”„๋ผ์ธ์€ ๋ณ„๋„์˜ GitLab ์„ค์น˜์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ ๋‹ค์Œ ์ฃผ์†Œ์—์„œ ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ์ €์žฅ์†Œ์˜ ๋ฏธ๋Ÿฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • k8s-์›Œํฌ๋กœ๋“œ/gitlab-com โ€” GitLab Helm ์ฐจํŠธ๋ฅผ ์œ„ํ•œ GitLab.com ๊ตฌ์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ;
  • k8s-์›Œํฌ๋กœ๋“œ/gitlab-helmfiles - GitLab ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋กœ๊น… ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ๊ตฌ์„ฑ์€ ๋ฌผ๋ก  PlantUML๊ณผ ๊ฐ™์€ ํ†ตํ•ฉ ๋„๊ตฌ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • Gitlab-com-์ธํ”„๋ผ โ€” Kubernetes ๋ฐ ๋ ˆ๊ฑฐ์‹œ VM ์ธํ”„๋ผ๋ฅผ ์œ„ํ•œ Terraform ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ž์ฒด, ๋…ธ๋“œ ํ’€, ์„œ๋น„์Šค ๊ณ„์ • ๋ฐ IP ์ฃผ์†Œ ์˜ˆ์•ฝ์„ ํฌํ•จํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

GitLab.com์„ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ XNUMX๋…„๊ฐ„์˜ ๊ฒฐ๊ณผ
๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ๊ณต๊ฐœ ๋ณด๊ธฐ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์งง์€ ์š”์•ฝ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— SRE๊ฐ€ ๋ถ„์„ํ•˜๋Š” ์ž์„ธํ•œ ์ฐจ์ด์ ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

SRE์˜ ๊ฒฝ์šฐ ๋งํฌ๋Š” ์ƒ์‚ฐ ๋ฐ ์•ก์„ธ์Šค๊ฐ€ ์ œํ•œ๋œ GitLab ์„ค์น˜์˜ ์„ธ๋ถ€ ์ฐจ์ด์ ์œผ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ง์›๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์šด์˜ ํ”„๋กœ์ ํŠธ(SRE์—๋งŒ ๊ณต๊ฐœ๋จ)์— ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๊ณ ๋„ ์ œ์•ˆ๋œ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์šฉ ๊ณต๊ฐœ GitLab ์ธ์Šคํ„ด์Šค์™€ CI ํŒŒ์ดํ”„๋ผ์ธ์šฉ ๋น„๊ณต๊ฐœ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฒฐํ•ฉํ•จ์œผ๋กœ์จ ๊ตฌ์„ฑ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด GitLab.com์œผ๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋™์‹œ์— ๋‹จ์ผ ์›Œํฌํ”Œ๋กœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณผ์ •์—์„œ ์•Œ๊ฒŒ ๋œ ์‚ฌ์‹ค

์ด๋™ํ•˜๋Š” ๋™์•ˆ Kubernetes์˜ ์ƒˆ๋กœ์šด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๋ฐฐํฌ์— ์ ์šฉํ•˜๋Š” ๊ฒฝํ—˜์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

1. ๊ฐ€์šฉ์กด ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์œผ๋กœ ์ธํ•œ ๋น„์šฉ ์ฆ๊ฐ€

GitLab.com์„ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ XNUMX๋…„๊ฐ„์˜ ๊ฒฐ๊ณผ
GitLab.com์˜ Git ์ €์žฅ์†Œ ํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ์ผ์ผ ์†ก์‹  ํ†ต๊ณ„(์ผ์ผ ๋ฐ”์ดํŠธ)

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

์ง€์—ญ GKE ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๋ณต์„ฑ์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์šฉ์„ฑ ์˜์—ญ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ์ง€์—ญ GKE ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋‹จ์ผ ์˜์—ญ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋ถ„ํ•  ๋Œ€๋Ÿ‰์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ƒ์„ฑํ•˜๋Š” ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜์ค€ ์ค‘๋ณต์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์†ก์‹  ๋น„์šฉ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

2. ์ œํ•œ, ๋ฆฌ์†Œ์Šค ์š”์ฒญ ๋ฐ ํ™•์žฅ

GitLab.com์„ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ XNUMX๋…„๊ฐ„์˜ ๊ฒฐ๊ณผ
Registry.gitlab.com์—์„œ ํ”„๋กœ๋•์…˜ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ณต์ œ๋ณธ ์ˆ˜์ž…๋‹ˆ๋‹ค. UTC 15:00์— ํŠธ๋ž˜ํ”ฝ์ด ์ตœ๊ณ ์กฐ์— ๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํ† ๋ฆฌ๋Š” 2019๋…„ XNUMX์›” ์ฒซ ๋ฒˆ์งธ ์„œ๋น„์Šค์ธ GitLab Container Registry๋ฅผ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด์„œ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌํ•˜๊ณ  ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์„œ๋น„์Šค๋Š” ์™ธ๋ถ€ ์ข…์†์„ฑ์ด ๊ฑฐ์˜ ์—†๋Š” ์ƒํƒœ ๋น„์ €์žฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ๋ฒˆ์งธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ์ ํ•ฉํ•œ ์„ ํƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ง๋ฉดํ•œ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ๋…ธ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด ๋งŽ์€ ์ˆ˜์˜ ํฌ๋“œ๊ฐ€ ์ œ๊ฑฐ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์š”์ฒญ๊ณผ ํ•œ๋„๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

3. ์ง€ํ‘œ ๋ฐ ๋กœ๊ทธ

GitLab.com์„ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ XNUMX๋…„๊ฐ„์˜ ๊ฒฐ๊ณผ
์ธํ”„๋ผ ๋ถ€๋ฌธ์€ ๋Œ€๊ธฐ ์‹œ๊ฐ„, ์˜ค๋ฅ˜์œจ ๋ฐ ์„ค์น˜ ํฌํ™”๋„์— ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ˆ˜์ค€ ๋ชฉํ‘œ (SLO)์— ์—ฐ๊ฒฐ๋จ ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์˜ ์ผ๋ฐ˜ ๊ฐ€์šฉ์„ฑ.

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

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

์ด์ „ VM ์ธํ”„๋ผ์™€ ์ƒˆ๋กœ์šด Kubernetes ๊ธฐ๋ฐ˜ ์ธํ”„๋ผ์—์„œ ๋™์ผํ•œ ์š”์ฒญ์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋…ํŠนํ•œ ๊ณผ์ œ๋ฅผ ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํ”„ํŠธ ์•ค ์‹œํ”„ํŠธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๊ณผ ๋‹ฌ๋ฆฌ (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ "์žˆ๋Š” ๊ทธ๋Œ€๋กœ" ์ƒˆ๋กœ์šด ์ธํ”„๋ผ๋กœ ๋น ๋ฅด๊ฒŒ ์ด์ „ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์—ฌ๊ธฐ์— - ๋Œ€๋žต. ๋ฒˆ์—ญ), "๊ธฐ์กด" VM ๋ฐ Kubernetes์— ๋Œ€ํ•œ ๋ณ‘๋ ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๊ฐ€ ๋‘ ํ™˜๊ฒฝ ๋ชจ๋‘์™€ ํ˜ธํ™˜๋˜๊ณ  ๋ฉ”ํŠธ๋ฆญ์„ ํ•˜๋‚˜์˜ ๋ณด๊ธฐ๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „ํ™˜ ๊ธฐ๊ฐ„ ๋™์•ˆ ์ผ๊ด€๋œ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์„ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ๋™์ผํ•œ ๋Œ€์‹œ๋ณด๋“œ์™€ ๋กœ๊ทธ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

4. ํŠธ๋ž˜ํ”ฝ์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ „ํ™˜

GitLab.com์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„์˜ ์ผ๋ถ€๋Š” ๋‹ค์Œ ์ „์šฉ์ž…๋‹ˆ๋‹ค. ์นด๋‚˜๋ฆฌ์•„ ๋‹จ๊ณ„. Canary Park๋Š” ๋‚ด๋ถ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ™œ์„ฑํ™”. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ธํ”„๋ผ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋œ ์„œ๋น„์Šค๋Š” ์ œํ•œ๋œ ์–‘์˜ ๋‚ด๋ถ€ ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋ณด๋‚ด๊ธฐ ์ „์— SLO๊ฐ€ ์ถฉ์กฑ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์† ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

5. ํฌ๋“œ์˜ ์˜ˆ์•ฝ ์šฉ๋Ÿ‰ ๋ฐ ์šฉ๋„

๊ฑฐ์˜ ์ฆ‰์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์„œ๋น„์Šค์šฉ ํฌ๋“œ๋Š” ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘๋˜์—ˆ์ง€๋งŒ Sidekiq์šฉ ํฌ๋“œ ์‹œ์ž‘์€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. XNUMX๋ถ„. ์ž‘์—…์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ž๋ฅผ ์œ„ํ•ด ์›Œํฌ๋กœ๋“œ๋ฅผ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ Sidekiq ํฌ๋“œ์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๊ธธ์–ด ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๊ฒƒ์„ ์งœ๋‚ด๊ณ  ์‹ถ์€ ์œ ํ˜น์€ ํ•ญ์ƒ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฒ˜์Œ์—๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ œ ๋„‰๋„‰ํ•œ ํฌ๋“œ ์˜ˆ์‚ฐ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋‚˜์ค‘์— ์ด๋ฅผ ์ค„์ด๋ฉด์„œ SLO๋ฅผ ๋ฉด๋ฐ€ํžˆ ๊ด€์ฐฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Sidekiq ์„œ๋น„์Šค์šฉ ํฌ๋“œ ์‹คํ–‰ ์†๋„๊ฐ€ ํฌ๊ฒŒ ๋นจ๋ผ์กŒ์œผ๋ฉฐ ์ด์ œ ํ‰๊ท  ์•ฝ 40์ดˆ๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค. ํฌ๋“œ ์‹คํ–‰ ์‹œ๊ฐ„ ๋‹จ์ถ•์—์„œ ๊ณต์‹ GitLab Helm ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GitLab.com๊ณผ ์ž์ฒด ๊ด€๋ฆฌ ์„ค์น˜ ์‚ฌ์šฉ์ž ๋ชจ๋‘๋ฅผ ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๊ฐ ์„œ๋น„์Šค๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ํ›„ ์šฐ๋ฆฌ๋Š” ํ”„๋กœ๋•์…˜์—์„œ Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ , ์ฆ‰ ๋” ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ, ํ™•์žฅ, ๋” ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ํ• ๋‹น์— ๋งŒ์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์˜ ์žฅ์ ์€ GitLab.com ์„œ๋น„์Šค ๊ทธ ์ด์ƒ์ž…๋‹ˆ๋‹ค. ๊ณต์‹ Helm ์ฐจํŠธ์˜ ๋ชจ๋“  ๊ฐœ์„ ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด์ต์ด ๋ฉ๋‹ˆ๋‹ค.

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

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

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

์ถœ์ฒ˜ : habr.com

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