๐ŸŒŒ [์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•„ํ‚คํ…์ฒ˜] 1. ๊ตฌ์„ฑ ๋ฐ ์„ค๊ณ„

hidaehyunleeยท2021๋…„ 2์›” 16์ผ
1

42SEOUL

๋ชฉ๋ก ๋ณด๊ธฐ
23/27
post-thumbnail

44BIT๋‹˜์˜ [์ดˆ๋ณด๋ฅผ ์œ„ํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•ˆ๋‚ด์„œ] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•„ํ‚คํ…์ฒ˜ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

1. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(kubernetes)?

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

์ฆ‰, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์‚ฌ์šฉ์ž์˜ ์„ ํƒ๊ถŒ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ง€์ผœ์ฃผ๋ฉด์„œ ํ™•์žฅ๊ณผ ์ด์‹์ด ์šฉ์ดํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ์ด๋‹ค.

2. ๊ด€๋ จ ์šฉ์–ด ์ •๋ฆฌ

  • ํ•˜๋“œ์›จ์–ด ์œ ๋‹›
    • ๋…ธ๋“œ(node) : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ตœ์†Œ ๋‹จ์œ„์˜ ์ปดํ“จํŒ… ํ•˜๋“œ์›จ์–ด
    • ํด๋Ÿฌ์Šคํ„ฐ(cluster) : ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ๊ณต์œ ์™€ ๊ท ํ˜• ๋ฐฐ๋ถ„์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ๋ฌถ์€ ๊ทธ๋ฃน
  • ์†Œํ”„ํŠธ์›จ์–ด ์œ ๋‹›
    • ์ปจํ…Œ์ด๋„ˆ(container) : ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค ๋ชจ์Œ. ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ๋„ ๋ชจ๋‘ ๋“ค์–ด์žˆ์–ด ๋จธ์‹  ๊ฐ„ ์ด์‹์ด ๊ฐ€๋Šฅ.
    • ํฌ๋“œ(pod) : ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ ๋ชจ์Œ. ๋ฆฌ์†Œ์Šค ๊ณต์œ ์˜ ์žฅ์ ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ‚ค์ง€๋กœ ๋ฌถ์—ฌ ์žˆ์Œ.

โœ… ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ํฌ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

ํฌ๋“œ์™€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ด€๊ณ„ ๋•Œ๋ฌธ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ง์ ‘ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ ๋Œ€์‹  ํฌ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ํฌ๋“œ ์†์˜ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์ผํ•œ ๋ฆฌ์†Œ์Šค ๋ฐ ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌ๋“œ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์œ ๋ช…ํ•œ ๊ธฐ๋Šฅ, ๋ฐ”๋กœ **๋ณต์ œ(Replication)**์˜ ํ† ๋Œ€๊ฐ€ ๋œ๋‹ค.

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

์ถœ์ฒ˜ : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํฌ๋“œ๋ž€?

3. Desired State

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

4. ๊ตฌ์„ฑ ๋ฐ ์„ค๊ณ„

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

4.1. ๋งˆ์Šคํ„ฐ(master)

1) Controller

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

์ปจํŠธ๋กค๋Ÿฌ ๊ฐœ๋… ๋•๋ถ„์— ์œ„์—์„œ ๋ฐฐ์šด Desired State ๋ฃจํ”„๊ฐ€ ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๊ต‰์žฅํžˆ ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ๋‹ค.

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

2) Scheduler

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

3) etcd

์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” DB์ธ **์—ฃ์ง€๋””(etcd)**๊ฐ€ ์žˆ๋‹ค. etcd๋Š” ๋ชจ๋“  ์ƒํƒœ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ์ €์žฅํ•ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฑ์—…์€ ํ•„์ˆ˜์ด๋ฉฐ, ์•„๋ž˜ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ๊ณ ๊ฐ€์šฉ์„ฑ : ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ(๋ณดํ†ต ์—ฃ์ง€๋””๋ฅผ 3๋Œ€์ •๋„ ๋„์šด๋‹ค๊ณ  ํ•œ๋‹ค) ์•ˆ์ •์„ฑ์„ ๋†’์ž„
  • ์ผ๊ด€์„ฑ : ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋ฉด์„œ ์ •ํ™•ํ•˜๊ฒŒ ์„ค๊ณ„
  • key-value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ
  • TTL(time to live), watch ๋“ฑ ๋ถ€๊ฐ€๊ธฐ๋Šฅ ์ œ๊ณต

4) API server

๋งˆ์Šคํ„ฐ์˜ ์กฐ์œจ์ž ์—ญํ• ์„ ํ•˜๋Š” API Server ์ด๋‹ค. ๋ฐ์ดํ„ฐ์™€ ์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ์š”์ฒญ์€ ๋ชจ๋‘ API ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด(๊ฑฐ์ณ์„œ) ์ด๋ค„์ง„๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์กฐํšŒ
  • ectd์™€ ์œ ์ผํ•˜๊ฒŒ ํ†ต์‹ ํ•˜๋Š” ๋ชจ๋“ˆ
  • ๊ถŒํ•œ ์ฒดํฌ (๊ถŒํ•œ์ด ์—†์œผ๋ฉด ์š”์ฒญ ๊ฑฐ๋ถ€)
  • REST API

4.2. ๋…ธ๋“œ(node)

๋…ธ๋“œ์—๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋– ์žˆ๋Š”๋ฐ, **ํ”„๋ก์‹œ(Proxy)**์™€ ํ๋ธ”๋ฆฟ(Kubelet) ์ด๋‹ค. ์ด ๋‘ ์ปดํฌ๋„ŒํŠธ๋„ ๋งˆ์Šคํ„ฐ์™€ ํ†ต์‹ ์„ ํ•  ๋•Œ API Server๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์š”์ฒญ์™€ ์‘๋‹ต๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

1) Proxy

๋„คํŠธ์›Œํฌ ํ”„๋ก์‹œ ์—ญํ• (๋ถ€ํ•˜ ๋ถ„์‚ฐ)์„ ํ•˜๊ธด ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์š”์ฒญ/์‘๋‹ต์„ ๋ฐ›๋Š” ํ”„๋ก์‹œ๊ฐ€ ๋– ์žˆ๋Š” ๊ฐœ๋…์€ ์•„๋‹ˆ๊ณ , ๋‚ด์™ธ๋ถ€ ํ†ต์‹  ์„ค์ •๋งŒ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

iptables ๋˜๋Š” IPVS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

2) Kubelet

๊ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋ฉฐ, pod๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ค‘์ง€ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์ฒดํฌํ•œ๋‹ค. ๋„์ปค ๋“ฑ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ CRI(Container Runtime Interface), ์ฆ‰ ์ปจํ…Œ์ด๋„ˆ๋ฅผ pod๋กœ ๊ฐ์‹ธ ํ™•์‹คํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ์ž„๋ฌด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

profile
์‚ฝ์งˆ์˜ ๊ธฐ๋ก๋“ค ๐Ÿ‘จโ€๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€