๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”Ž Kubernetes

[Kubernetes ๋‚ด๋ถ€ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ] 1. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ

by Seongpyo Hong 2021. 4. 12.

๊ทธ๋™์•ˆ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ—ท๊ฐˆ๋ ธ๋˜ ๋ถ€๋ถ„์ด๋‚˜ ์‚ฌ์šฉ์€ ํ–ˆ์ง€๋งŒ ์›๋ฆฌ๋ฅผ ์•Œ์ง€ ๋ชปํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์€ Kubernetes In Action์„ ์ฝ๊ณ  ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.


์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋‚ด๋ถ€ ์•„ํ‚คํ…์ณ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ(๋งˆ์Šคํ„ฐ ๋…ธ๋“œ)์™€ ์›Œ์ปค ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋จผ์ € ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Kubernetes Architecture (์ถœ์ฒ˜ : https://kubernetes.io/ko/docs/concepts/overview/components/)


์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ

์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

  • API Server
  • Scheduler
  • Controller Manager
  • etcd

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

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ์ œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณธ๋ž˜์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ๋‹จ์ผ ์‹คํŒจ ์ง€์ (SPOF)์ด ๋˜์ง€ ์•Š๋„๋ก ๊ฐ€์šฉ์„ฑ์„ ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿผ ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š”์ง€ ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


etcd

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋Š” ์ƒํƒœ์™€ ๋ฉ”๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์˜์†์ ์œผ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋ถ„์‚ฐ key-value ์ €์žฅ์†Œ์ธ etcd๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. etcd๋Š” ๋ถ„์‚ฐ๋œ ์•„ํ‚คํ…์ฒ˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด ๊ณ ๊ฐ€์šฉ์„ฑ ๋ฐ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” etcd v2๋‚˜ v3๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜์ง€๋งŒ v3๊ฐ€ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— v3๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ v3 ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์‚ดํŽด๋ณด๋ฉด etcd๋Š” ๊ณ„์ธต์  key ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ, /registry ์•„๋ž˜์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์•ž์„œ ๋ง์”€๋“œ๋ฆฐ ๊ฒƒ๊ณผ ๊ฐ™์ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋‚ด๋ถ€์˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋Š” API ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด์„œ๋งŒ etcd์™€ ํ†ต์‹ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋ฉด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

    ์ด์™€ ๋ฐ˜๋Œ€๋Œ€๋Š” ๊ฐœ๋…์ธ ๋น„๊ด€์  ๋™์‹œ์„ฑ ์ œ์–ด๋Š” ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ • ๋ฐ ์ฝ์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์ ํ•˜์—ฌ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚™๊ด€์  ๋™์‹œ์„ฑ ์ œ์–ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์ ํ•˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ƒ ์ด์ ์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ด๊ณ  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

RAFT ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ถ„์‚ฐ๋œ etcd ํด๋Ÿฌ์Šคํ„ฐ๋Š” RAFT ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. RAFT ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์— Split Brain ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด ๊ณผ๋ฐ˜์ˆ˜๊ฐ€ ๋„˜๋Š” ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ์ชฝ๋งŒ ์œ ํšจํ•œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. RAFT ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ ์ด ๊ธ€์„ ์‚ดํŽด๋ณด์‹œ๋ฉด ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ etcd ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ ํ™€์ˆ˜๋กœ ๋ฐฐํฌํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Š” ์ง์ˆ˜์ธ ๊ฒฝ์šฐ ๊ณผ๋ฐ˜์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


API Server

API Server๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์š”์†Œ์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ค‘์š” ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค. API Server๋Š” ํด๋Ÿฌ์Šคํ„ฐ์™€ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ REST API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ API ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ๋ฐ ์กฐํšŒ์˜ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  1. ์š”์ฒญ์„ ๋ณด๋‚ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ๋œ ํด๋ผ์ด์–ธํŠธ์ธ์ง€ ํ™•์ธ
  2. ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋ณด๋‚ธ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
  3. (๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ๋ฐ ์ˆ˜์ •, ์‚ญ์ œ) ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ์กด์— ์ •์˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ์ˆ˜์ •
  4. ๋ฆฌ์†Œ์Šค์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•œ ํ›„ etcd์— ์ €์žฅ
  5. ๋ฆฌ์†Œ์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ์‹œํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ†ต๋ณด

Scheduler

ํด๋ผ์ด์–ธํŠธ๊ฐ€ Pod์„ ์ƒ์„ฑํ•˜๋ฉด ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณ ๋ คํ•ด ์–ด๋–ค ๋…ธ๋“œ์— ๋ฐฐ์น˜๋ ์ง€๋Š” Scheduler๊ฐ€ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ข€ ๋” ์ž์„ธํžˆ ๋งํ•˜๋ฉด ์–ด๋–ค ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง ๋ ์ง€ ๊ฒฐ์ •ํ•˜์—ฌ Pod์˜ Spec์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ด๋ฅผ API ์„œ๋ฒ„์—๊ฒŒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ API ์„œ๋ฒ„๋Š” ์›Œ์ปค ๋…ธ๋“œ์˜ Kubelet์—๊ฒŒ ์ด ์ •๋ณด๋ฅผ ๋ณด๋ƒ„์œผ๋กœ์จ Pod์ด ํ•ด๋‹น ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Scheduler๋Š” ๋จผ์ € ๋””์Šคํฌ, ๋ฉ”๋ชจ๋ฆฌ, ํฌํŠธ, affinity, taint์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์„ ํ†ตํ•ด ์Šค์ผ€์ค„๋ง ๋  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„ ์ถœ๋œ ๋…ธ๋“œ ๋ชฉ๋ก ์ค‘ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š” ๋…ธ๋“œ์— Pod์„ ์Šค์ผ€์ค„๋งํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์œ„์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ€์ง„ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๋ฐฐํฌํ•ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


Controller Manager

Scheduler๋ฅผ ํ†ตํ•ด Pod์ด ์Šค์ผ€์ค„๋ง ๋˜์—ˆ๋‹ค๋ฉด ๋‹ค์Œ์œผ๋กœ ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์›ํ•˜๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ฟ ๋ฒ ๋„คํ‹ฐ์Šค์—์„œ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ Controller๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ €๋Š” ๋‹ค์–‘ํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

Controller

Controller๋Š” API ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์‹œํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ์–ธํ•œ Spec์œผ๋กœ ์กฐ์ •ํ•˜๋ฉฐ ์ƒˆ๋กฌ๊ฒŒ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋ฅผ Status์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋‹ค์–‘ํ•œ Controller๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. (ex. Deployment, ReplicaSet, StatefulSet ๋“ฑ)


Worker Node

์›Œ์ปค ๋…ธ๋“œ๋Š” ์‹ค์ œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ๋…ธ๋“œ๋กœ kubelet๊ณผ kube-proxy๋ผ๋Š” ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


Kubelet

Scheduler์— ์˜ํ•ด Pod์ด ์Šค์ผ€์ค„๋ง๋˜๋ฉด API ์„œ๋ฒ„๋Š” Kubelet์—๊ฒŒ Pod์„ ์ƒ์„ฑํ•˜๋ผ๋Š” ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ์š”์ฒญ์„ ๋ฐ›์€ Kubelet์€ ์ง€์ •๋œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„๊ณผ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ API ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ Liveness Probe๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๋Š” ์—ญํ• ๋„ kubulet์—์„œ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.


Kube-Proxy

Kube-Proxy๋Š” ์„œ๋น„์Šค์˜ IP ๋ฐ ํฌํŠธ๋กœ ๋“ค์–ด์˜จ ์ ‘์†์„ ์„œ๋น„์Šค์˜ ์—”๋“œํฌ์ธํŠธ์— ํ•ด๋‹นํ•˜๋Š” Pod์— ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. Proxy๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™์€ ์ด์œ ๋Š” ์ดˆ๊ธฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„์ „์—์„œ kube-proxy๋Š” userspace์—์„œ ๋™์ž‘ํ•˜๋˜ ํ”„๋ก์‹œ์˜€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์žฌ๋Š” ์„ฑ๋Šฅ์ด ๋” ์šฐ์ˆ˜ํ•œ iptables ํ”„๋ก์‹œ ๋ชจ๋“œ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ ์ปคํ”ผ๊ณ ๋ž˜๋‹˜์˜ ๊ธ€์„ ํ†ตํ•ด ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋„คํŠธ์›Œํฌ์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ ๋‹ค์Œ ๊ธ€์—์„œ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.)


Deployment ์ƒ์„ฑ ๊ณผ์ • ์‚ดํŽด๋ณด๊ธฐ

๋งˆ์ง€๋ง‰์œผ๋กœ ์ด๋Ÿฌํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” Deployment๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋‹ˆํŽ˜์ŠคํŠธ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋Š” Nginx Deployment ์˜ˆ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

 

kubectl get events๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋กœ๊ทธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Event Log

์ด๋ฅผ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋˜๋ฉด Deployment Controller๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ Deployment Manifest๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ํ•ด๋‹น ์ •๋ณด๋ฅผ ํ†ตํ•ด ReplicaSet์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ReplicaSet์˜ ์ƒ์„ฑ์ด ๊ฐ์ง€๋˜๋ฉด ReplicaSet Controller๋Š” ReplicaSet์˜ Pod Template์„ ๊ธฐ๋ฐ˜์œผ๋กœ Pod์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. Scheduler๋Š” ์ ํ•ฉํ•œ ๋…ธ๋“œ์— Pod์„ ์Šค์ผ€์ค„๋งํ•ฉ๋‹ˆ๋‹ค.
  4. Kubelet์€ Pod์˜ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„๊ณผ ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

 

์ฐธ๊ณ ์ž๋ฃŒ

๋Œ“๊ธ€