๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

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

์˜ค๋Š˜์˜ ์ „๋ฌธ๊ฐ€๋Š” ๋‹ค๋‹ˆ์—˜ ํด๋ Œ์น™(Daniel Polenchik)์ž…๋‹ˆ๋‹ค.๋‹ค๋‹ˆ์—˜๋ ˆ ํด๋ Œ์‹œ์น˜). Daniel์€ ๊ฐ•์‚ฌ์ด์ž ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๋กœ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Learnk8s.

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๊ถ๊ธˆํ•˜์‹  ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด ์ด๋ฉ”์ผ๋กœ ๋ฌธ์˜ํ•˜์„ธ์š” ๋˜๋Š” ํŠธ์œ„ํ„ฐ: @learnk8s.

์ด์ „ ๊ฒŒ์‹œ๋ฌผ์„ ๋†“์น˜์…จ๋‚˜์š”? ์—ฌ๊ธฐ์„œ ์ฐพ์•„๋ณด์„ธ์š”.

์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ์žˆ๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ•˜๋‚˜์š”?

๊ฐ„๋‹จํžˆ: Kubefed v2 ์ถœ์‹œ ์˜ˆ์ •, ๋‹ค์Œ ๋‚ด์šฉ๋„ ์ฝ์–ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํ•˜์ฃผ ะธ ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ์Šค์ผ€์ค„๋Ÿฌ ํ”„๋กœ์ ํŠธ.

์ธํ”„๋ผ๋Š” ํŠนํžˆ ํ†ต์ œ๋œ ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ์ง€์—ญ์— ๊ฑธ์ณ ๋ณต์ œ ๋ฐ ๋ถ„์‚ฐ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

ํ•œ ์ง€์—ญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ค‘๋‹จ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋ž˜ํ”ฝ์ด ๋‹ค๋ฅธ ์ง€์—ญ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค.

Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์‚ฌํ•œ ์ „๋žต์„ ์‚ฌ์šฉํ•˜๊ณ  ์—ฌ๋Ÿฌ ์ง€์—ญ์— ์›Œํฌ๋กœ๋“œ๋ฅผ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ€, ์ง€์—ญ, ํ™˜๊ฒฝ ๋˜๋Š” ์ด๋Ÿฌํ•œ ์š”์†Œ์˜ ์กฐํ•ฉ๋ณ„๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ์™€ ์˜จํ”„๋ ˆ๋ฏธ์Šค์—์„œ ํ˜ธ์ŠคํŒ…๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํ•˜๋‚˜์˜ ๋ฆฌ๋”์‹ญ ํด๋Ÿฌ์Šคํ„ฐ

๋‹จ์ผ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ์‰ฌ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ์„ธ๊ทธ๋จผํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค.

๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค์˜ ์ ˆ๋ฐ˜์€ ๋งˆ์Šคํ„ฐ์— ์ ‘์†ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ ๋ช…๋ น์„ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋™์‹œ์— ์˜ค๋ž˜๋œ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”๋„ ์žˆ์Šต๋‹ˆ๋‹ค(kube-proxy ์ƒˆ ํ•ญ๋ชฉ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์—†์Œ) ๋ฐ ์ถ”๊ฐ€ Pod๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(kubelet์€ ์—…๋ฐ์ดํŠธ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์—†์Œ).

์„ค์ƒ๊ฐ€์ƒ์œผ๋กœ Kubernetes๊ฐ€ ๋…ธ๋“œ๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๊ณ ์•„๋กœ ํ‘œ์‹œํ•˜๊ณ  ๋ˆ„๋ฝ๋œ Pod๋ฅผ ๊ธฐ์กด ๋…ธ๋“œ์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ํฌ๋“œ ์ˆ˜๋Š” ๋‘ ๋ฐฐ๋กœ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

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

etcd ์‚ฌ์šฉ ๋—๋ชฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ฐ’์„ ๋””์Šคํฌ์— ์“ฐ๊ธฐ ์ „์— ํ˜‘์ƒํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ์ƒํƒœ๋ฅผ etcd์— ๊ธฐ๋กํ•˜๊ธฐ ์ „์— ๋Œ€๋ถ€๋ถ„์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•ฉ์˜์— ๋„๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋กœ ๋‹ค๋ฅธ ์ง€์—ญ์— ์žˆ๋Š” XNUMX๊ฐœ์˜ etcd ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ etcd ์ธ์Šคํ„ด์Šค ๊ฐ„์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•˜๋ฉด ๊ฐ’์„ ํ˜‘์ƒํ•˜๊ณ  ๋””์Šคํฌ์— ์“ฐ๋Š” ๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
์ด๋Š” Kubernetes ์ปจํŠธ๋กค๋Ÿฌ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‘๋‹ต์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์—ฐ์‡„ ๋ฐ˜์‘์ด ๋ฐœ์ƒํ•˜๊ณ  ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋งค์šฐ ๋Š๋ฆฌ๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค..

etcd๋Š” ์ง€์—ฐ ์‹œ๊ฐ„์— ๋งค์šฐ ๋ฏผ๊ฐํ•˜๋ฏ€๋กœ ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” ์ผ๋ฐ˜ ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ ๋Œ€์‹  SSD ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค..

ํ˜„์žฌ ๋‹จ์ผ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ๋Œ€๊ทœ๋ชจ ๋„คํŠธ์›Œํฌ์˜ ์ข‹์€ ์˜ˆ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ SIG ํด๋Ÿฌ์Šคํ„ฐ ๊ทธ๋ฃน์€ Kubernetes๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ 1: kubefed๋ฅผ ์‚ฌ์šฉํ•œ ํด๋Ÿฌ์Šคํ„ฐ ํŽ˜๋”๋ ˆ์ด์…˜

SIG-cluster์˜ ๊ณต์‹ ๋‹ต๋ณ€ - kubefed2, ์›๋ž˜ kube ํŽ˜๋”๋ ˆ์ด์…˜ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์šด์˜์ž์˜ ์ƒˆ ๋ฒ„์ „.

์ฒ˜์Œ์œผ๋กœ ์šฐ๋ฆฌ๋Š” kube ํŽ˜๋”๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ์Œ์„ ๋‹จ์ผ ๊ฐœ์ฒด๋กœ ๊ด€๋ฆฌํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘์€ ์ข‹์•˜์ง€๋งŒ ๊ฒฐ๊ตญ Kube Federation์€ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ ์ธ๊ธฐ๋ฅผ ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์—ฐํ•ฉ ์ „๋‹ฌ ๋ฐ ์„œ๋น„์Šค๋Š” ์ง€์›ํ–ˆ์ง€๋งŒ StatefulSet์€ ์ง€์›ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ, ์—ฐํ•ฉ ๊ตฌ์„ฑ์ด ์ฃผ์„ ํ˜•ํƒœ๋กœ ์ „์†ก๋˜์–ด ์œ ์—ฐ์„ฑ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์„๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜๋”๋ ˆ์ด์…˜์˜ ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ๋ณต์ œ๋ณธ ํŒŒํ‹ฐ์…”๋‹์„ ์–ด๋–ป๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒ์ƒํ•ด ๋ณด์„ธ์š”.

๊ทธ๊ฒƒ์€ ์™„์ „ํžˆ ์—‰๋ง์ด์—ˆ์Šต๋‹ˆ๋‹ค.

SIG-cluster๋Š” kubefed v1 ์ดํ›„ ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ๊ฐ๋„์—์„œ ๋ฌธ์ œ์— ์ ‘๊ทผํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์„ ๋Œ€์‹  ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์น˜๋œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ถœ์‹œํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. CRD(์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌ์†Œ์Šค ์ •์˜)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽ˜๋”๋ ˆ์ด์…˜์˜ ์ผ๋ถ€๊ฐ€ ๋  ๊ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์„ธ ๊ฐ€์ง€ ์„น์…˜์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ CRD ์ •์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž์›์˜ ํ‘œ์ค€ ์ •์˜(์˜ˆ: ๋ฐฐํฌ)
  • ์„น์…˜ placement, ํŽ˜๋”๋ ˆ์ด์…˜์—์„œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐฐํฌ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์„น์…˜ override, ํŠน์ • ๋ฆฌ์†Œ์Šค์˜ ๊ฒฝ์šฐ ๋ฐฐ์น˜์˜ ๊ฐ€์ค‘์น˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ฐฐ์น˜ ๋ฐ ์žฌ์ •์˜ ์„น์…˜์ด ํฌํ•จ๋œ ๊ฒฐํ•ฉ ๊ฒŒ์žฌ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

apiVersion: types.federation.k8s.io/v1alpha1
kind: FederatedDeployment
metadata:
  name: test-deployment
  namespace: test-namespace
spec:
  template:
    metadata:
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - image: nginx
              name: nginx
  placement:
    clusterNames:
      - cluster2
      - cluster1
  overrides:
    - clusterName: cluster2
      clusterOverrides:
        - path: spec.replicas
          value: 5

๋ณด์‹œ๋‹ค์‹œํ”ผ ๊ณต๊ธ‰์€ ๋‘ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. cluster1 ะธ cluster2.

์ฒซ ๋ฒˆ์งธ ํด๋Ÿฌ์Šคํ„ฐ๋Š” 5๊ฐœ์˜ ๋ณต์ œ๋ณธ์„ ์ œ๊ณตํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ํด๋Ÿฌ์Šคํ„ฐ๋Š” XNUMX๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ ์ˆ˜๋ฅผ ๋” ๋งŽ์ด ์ œ์–ดํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ kubefed2๋Š” ๋ณต์ œ๋ณธ์— ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ReplicaSchedulingPreference ๊ฐœ์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

apiVersion: scheduling.federation.k8s.io/v1alpha1
kind: ReplicaSchedulingPreference
metadata:
  name: test-deployment
  namespace: test-ns
spec:
  targetKind: FederatedDeployment
  totalReplicas: 9
  clusters:
    A:
      weight: 1
    B:
      weight: 2

CRD ๊ตฌ์กฐ์™€ API๋Š” ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๊ณต์‹ ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ์—์„œ ํ™œ๋ฐœํ•œ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

kubefed2๋ฅผ ์ฃผ์‹œํ•˜์„ธ์š”. ํ•˜์ง€๋งŒ ์•„์ง ํ”„๋กœ๋•์…˜์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

kubefed2์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”. kubefed2์— ๊ด€ํ•œ ๊ณต์‹ ๊ธฐ์‚ฌ Kubernetes์— ๋Œ€ํ•œ ๋ธ”๋กœ๊ทธ์™€ kubefed ํ”„๋กœ์ ํŠธ์˜ ๊ณต์‹ ์ €์žฅ์†Œ.

์˜ต์…˜ 2: Booking.com ์Šคํƒ€์ผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๊ฒฐํ•ฉ

Booking.com ๊ฐœ๋ฐœ์ž๋Š” kubefed v2์—์„œ๋Š” ์ž‘์—…ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ, ์—ฌ๋Ÿฌ ์ง€์—ญ ๋ฐ ์—ฌ๋Ÿฌ ํด๋ผ์šฐ๋“œ์—์„œ ๋ฐฐ์†ก์„ ์ œ๊ณตํ•˜๋Š” ์šด์˜์ž์ธ Shipper๋ฅผ ์ƒ๊ฐํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ฃผ kubefed2์™€ ๋‹ค์†Œ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋„๊ตฌ ๋ชจ๋‘ ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ ์ „๋žต(์‚ฌ์šฉ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ ๋ณด์œ ํ•œ ๋ณต์ œ๋ณธ ์ˆ˜)์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐฐ์†ก์—…์ฒด์˜ ๋ชฉํ‘œ๋Š” ๋ฐฐ์†ก ์ค‘ ์˜ค๋ฅ˜ ์œ„ํ—˜์„ ์ค„์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Shipper์—์„œ๋Š” ์ด์ „ ๋ฐฐํฌ์™€ ํ˜„์žฌ ๋ฐฐํฌ ๊ฐ„์˜ ๋ณต์ œ๋ณธ ๋ถ„ํ• ๊ณผ ์ˆ˜์‹  ํŠธ๋ž˜ํ”ฝ ๋ณผ๋ฅจ์„ ์„ค๋ช…ํ•˜๋Š” ์ผ๋ จ์˜ ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘ธ์‹œํ•˜๋ฉด Shipper ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์กฐ์ธ๋œ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์— ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์ง„์ ์œผ๋กœ ๋กค์•„์›ƒํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฐฐ์†ก์—…์ฒด๋„ ๋งค์šฐ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์กฐํƒ€ ์ฐจํŠธ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋‹๋ผ ๋ฆฌ์†Œ์Šค๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ Shipper๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ ์ œ๊ณต ๋Œ€์‹  Helm ์ฐจํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: shipper.booking.com/v1alpha1
kind: Application
metadata:
  name: super-server
spec:
  revisionHistoryLimit: 3
  template:
    chart:
      name: nginx
      repoUrl: https://storage.googleapis.com/shipper-demo
      version: 0.0.1
    clusterRequirements:
      regions:
        - name: local
    strategy:
      steps:
        - capacity:
            contender: 1
            incumbent: 100
          name: staging
          traffic:
            contender: 0
            incumbent: 100
        - capacity:
            contender: 100
            incumbent: 0
          name: full on
          traffic:
            contender: 100
            incumbent: 0
    values:
      replicaCount: 3

Shipper๋Š” ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ข‹์€ ์˜ต์…˜์ด์ง€๋งŒ Helm๊ณผ์˜ ๊ธด๋ฐ€ํ•œ ๊ด€๊ณ„๋Š” ๋ฐฉํ•ด๊ฐ€ ๋  ๋ฟ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ Helm์—์„œ Helm์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”? ์ปค์Šคํ„ฐ๋งˆ์ด์ œ์ด์…˜ ๋˜๋Š” ์นดํ”ผ ํƒ„?

Shipper์™€ ๊ทธ ์ฒ ํ•™์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”. ์ด๋ฒˆ ๊ณต์‹ ๋ณด๋„์ž๋ฃŒ.

์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, ๊ณต์‹ ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ๋กœ ์ด๋™.

์˜ต์…˜ 3: "๋งˆ๋ฒ•์˜" ํด๋Ÿฌ์Šคํ„ฐ ๋ณ‘ํ•ฉ

Kubefed v2 ๋ฐ Shipper๋Š” ํด๋Ÿฌ์Šคํ„ฐ ํŽ˜๋”๋ ˆ์ด์…˜๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌ์†Œ์Šค ์ •์˜๋ฅผ ํ†ตํ•ด ํด๋Ÿฌ์Šคํ„ฐ์— ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ณ‘ํ•ฉํ•  ๋ชจ๋“  ์ „๋‹ฌ, StatefulSet, DaemonSet ๋“ฑ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

YAML์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํŽ˜๋”๋ ˆ์ด์…˜์— ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ์Šค์ผ€์ค„๋Ÿฌ๋Š” Admirality ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค., ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ž‘์—… ๋ถ€ํ•˜ ์˜ˆ์•ฝ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

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

์ƒ์„ฑ๋œ ๊ฐ ํฌ๋“œ๋Š” ์ฆ‰์‹œ ๋”๋ฏธ๋กœ ๊ต์ฒด๋ฉ๋‹ˆ๋‹ค.

๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ์Šค์ผ€์ค„๋Ÿฌ ์‚ฌ์šฉ ์•ก์„ธ์Šค ์ˆ˜์ •์„ ์œ„ํ•œ ์›นํ›…ํ†ตํ™”๋ฅผ ๊ฐ€๋กœ์ฑ„๊ณ  ์œ ํœด ๋”๋ฏธ ํฌ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์›๋ž˜ ํฌ๋“œ๋Š” ์ „์ฒด ํŽ˜๋”๋ ˆ์ด์…˜์„ ํด๋งํ•œ ํ›„ ๋ฐฐ์น˜ ๊ฒฐ์ •์ด ๋‚ด๋ ค์ง€๋Š” ๋˜ ๋‹ค๋ฅธ ๊ณ„ํš ์ฃผ๊ธฐ๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Pod๊ฐ€ ๋Œ€์ƒ ํด๋Ÿฌ์Šคํ„ฐ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์•„๋ฌด ์ž‘์—…๋„ ํ•˜์ง€ ์•Š๊ณ  ๊ณต๊ฐ„๋งŒ ์ฐจ์ง€ํ•˜๋Š” ์ถ”๊ฐ€ ํฌ๋“œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

์žฅ์ ์€ ์†Œ๋ชจํ’ˆ์„ ๊ฒฐํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํฌ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฐ ๋ฆฌ์†Œ์Šค๋Š” ์ž๋™์œผ๋กœ ๋ณ‘ํ•ฉํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ๊ฐ‘์ž๊ธฐ ์—ฌ๋Ÿฌ ์ง€์—ญ์— ๊ฑธ์ณ ๋ณด๊ธ‰ํ’ˆ์ด ๋ถ„์‚ฐ๋˜์—ˆ๋Š”๋ฐ๋„ ๋ˆˆ์น˜ ์ฑ„์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์˜ ๋ชจ๋“  ๊ฒƒ์ด ๋งˆ๋ฒ•์— ๋‹ฌ๋ ค ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋งค์šฐ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Shipper๋Š” ๋ฐฐ์†ก์˜ ์˜ํ–ฅ์„ ๋Œ€๋ถ€๋ถ„ ์™„ํ™”ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ๋ฐ˜๋ฉด, ๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์•„๋งˆ๋„ ์ผ๊ด„ ์ž‘์—…์— ๋” ์ ํ•ฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ์ ์ง„์  ์ „๋‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ์Šค์ผ€์ค„๋Ÿฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ์ €์žฅ์†Œ ํŽ˜์ด์ง€.

๋‹ค์ค‘ ํด๋Ÿฌ์Šคํ„ฐ ์Šค์ผ€์ค„๋Ÿฌ์˜ ์‹ค์ œ ์ž‘๋™์— ๋Œ€ํ•ด ์ฝ๊ณ  ์‹ถ๋‹ค๋ฉด Admiralty์—์„œ Argo์˜ ํฅ๋ฏธ๋กœ์šด ์‚ฌ์šฉ ์‚ฌ๋ก€ โ€” ์›Œํฌํ”Œ๋กœ, ์ด๋ฒคํŠธ, CI ๋ฐ CD Kubernetes.

๊ธฐํƒ€ ๋„๊ตฌ ๋ฐ ์†”๋ฃจ์…˜

์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋ณต์žกํ•œ ์ž‘์—…์ด๋ฉฐ ๋ณดํŽธ์ ์ธ ์†”๋ฃจ์…˜์€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์ฃผ์ œ๋ฅผ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ค๋Š˜์€ ๊ทธ๊ฒŒ ๋‹ค์•ผ

๋๊นŒ์ง€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์šฐ๋ฆฌ์—๊ฒŒ ๋งํ•ด.

๊ท€ํ•˜์˜ ๋ฐฉ๋ฒ•์„ ๋งํฌ์— ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Chris Nesbitt-Smith(ํฌ๋ฆฌ์Šค ๋„ค์Šค๋น—-์Šค๋ฏธ์Šค) ๋ฐ Vincent de Sme(๋นˆ์„ผํŠธ ๋“œ ์Šค๋ฉง) (์‹ ๋ขฐ์„ฑ ์—”์ง€๋‹ˆ์–ด swatmobile.io) ๊ธฐ์‚ฌ๋ฅผ ์ฝ๊ณ  ์—ฐ๋งน์ด ์–ด๋–ป๊ฒŒ ์šด์˜๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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