๋‹ค์šดํƒ€์ž„ ์—†์ด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์—…๊ทธ๋ ˆ์ด๋“œ

๋‹ค์šดํƒ€์ž„ ์—†์ด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์—…๊ทธ๋ ˆ์ด๋“œ

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์—…๊ทธ๋ ˆ์ด๋“œ ํ”„๋กœ์„ธ์Šค

์–ด๋Š ์‹œ์ ์—์„œ๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‹คํ–‰ ์ค‘์ธ ๋…ธ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ, ์ปค๋„ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์ƒˆ ๊ฐ€์ƒ ๋จธ์‹  ์ด๋ฏธ์ง€ ๋ฐฐํฌ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes ์šฉ์–ด์—์„œ๋Š” ์ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ€๋ฆ…๋‹ˆ๋‹ค. "์ž๋ฐœ์  ๋ฐฉํ•ด".

์ด ๊ฒŒ์‹œ๋ฌผ์€ 4๊ฐœ ๊ฒŒ์‹œ๋ฌผ ์‹œ๋ฆฌ์ฆˆ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

  1. ์ด ๊ฒŒ์‹œ๋ฌผ.
  2. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํฌ๋“œ์˜ ์˜ฌ๋ฐ”๋ฅธ ์ข…๋ฃŒ
  3. ํฌ๋“œ ์‚ญ์ œ ์‹œ ํฌ๋“œ ์ข…๋ฃŒ ์ง€์—ฐ
  4. PodDisruptionBudget์„ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•

(๋Œ€๋žต. ๊ฐ€๊นŒ์šด ์‹œ์ผ ๋‚ด์— ์‹œ๋ฆฌ์ฆˆ์˜ ๋‚˜๋จธ์ง€ ๊ธฐ์‚ฌ์— ๋Œ€ํ•œ ๋ฒˆ์—ญ์ด ๋‚˜์˜ฌ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.)

์ด ๋ฌธ์„œ์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ๋…ธ๋“œ์˜ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ์—†์• ๊ธฐ ์œ„ํ•ด Kubernetes๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๋„๊ตฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ์ •์˜

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

์—ฌ์ •์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๊ตฌ์ฒด์ ์ธ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๊ณ , ๊ทธ ๋’ค์— ๋‘ ๊ฐœ์˜ ํฌ๋“œ๊ฐ€ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Service:

๋‹ค์šดํƒ€์ž„ ์—†์ด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์—…๊ทธ๋ ˆ์ด๋“œ

๋‘ ๊ฐœ์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” Nginx ๋ฐ Service๊ฐ€ ํฌํ•จ๋œ ๋‘ ๊ฐœ์˜ ํฌ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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

  • ์ด์ „ ๋…ธ๋“œ๋ฅผ ๋„๋ฉด ํ•ด๋‹น ๋…ธ๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํฌ๋“œ๋„ ๊บผ์ง‘๋‹ˆ๋‹ค. ์ •์ƒ์ ์ธ ์ข…๋ฃŒ๋ฅผ ์œ„ํ•ด Pod๋ฅผ ์ง€์›Œ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”? ์‚ฌ์šฉ ์ค‘์ธ ๊ฐ€์ƒํ™” ์‹œ์Šคํ…œ์€ ์ •๋ฆฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋™์‹œ์— ๋„๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? Pod๊ฐ€ ์ƒˆ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๋Š” ๋™์•ˆ ์ƒ๋‹นํ•œ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

๋…ธ๋“œ์˜ ๋ชจ๋“  ํฌ๋“œ ์žฌ๋ฐฐํฌ

๋“œ๋ ˆ์ด๋‹ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋…ธ๋“œ์˜ ๋ชจ๋“  Pod๋ฅผ ์žฌ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ ˆ์ด๋‹ ์‹คํ–‰ ์ค‘์— ๋…ธ๋“œ๋Š” ์˜ˆ์•ฝ ๋ถˆ๊ฐ€๋Šฅ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(ํ”Œ๋ž˜๊ทธ NoSchedule). ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ ํฌ๋“œ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐฐ์ˆ˜๊ฐ€ ๋…ธ๋“œ์—์„œ ํฌ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ํ˜„์žฌ ๋…ธ๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•˜์—ฌ ์‹ ํ˜ธ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. TERM ํฌ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ.

์ด๊ธฐ๋Š”ํ•˜์ง€๋งŒ kubectl drain ํฌ๋“œ ์ œ๊ฑฐ ์ž‘์—…์„ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์ˆ˜ ์ž‘์—…์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€ ์š”์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‹ค์šดํƒ€์ž„ ๋ฐฉ์ง€

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

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

---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
 labels:
   app: nginx
spec:
 replicas: 2
 selector:
   matchLabels:
     app: nginx
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - name: nginx
       image: nginx:1.15
       ports:
       - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
 name: nginx-service
spec:
 selector:
   app: nginx
 ports:
 - protocol: TCP
   targetPort: 80
   port: 80

์ด ๊ตฌ์„ฑ์€ ์ตœ์†Œํ•œ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. Deployment, ํด๋Ÿฌ์Šคํ„ฐ์˜ nginx ํฌ๋“œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ตฌ์„ฑ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. Service, ํด๋Ÿฌ์Šคํ„ฐ์˜ nginx ํฌ๋“œ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ๊ธฐ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ด ๊ตฌ์„ฑ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ™•์žฅํ•˜์—ฌ ๊ฒฐ๊ตญ์—๋Š” ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด Kubernetes๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

AWS ์ด์ƒ์—์„œ ๋‹ค์šดํƒ€์ž„์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„๋˜๊ณ  ํ…Œ์ŠคํŠธ๋œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์—…๋ฐ์ดํŠธ ๋ฒ„์ „์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ๋ฐฉ๋ฌธํ•˜์„ธ์š”. ๊ทธ๋ŸฐํŠธ์›Œํฌ.io.

๋ธ”๋กœ๊ทธ์—์„œ ๋‹ค๋ฅธ ๊ธฐ์‚ฌ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

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