๐Ÿ“• CS ์Šคํ„ฐ๋””/๋„์ปค, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค, ๋ฆฌ๋ˆ…์Šค

[์ฟ ๋ฒ„๋„คํ‹ฐ์Šค #2] โš“์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•„ํ‚คํ…์ฒ˜ (Control Plane/Node) ์•Œ์•„๋ณด๊ธฐ

iknowDev 2023. 6. 8. 18:12

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ปดํฌ๋„ŒํŠธ๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ(Control Plane) ์ปดํฌ๋„ŒํŠธ์™€ ๋…ธ๋“œ(Node) ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆ„์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ(Control Plane)  ๋…ธ๋“œ(Node) ์ปดํฌ๋„ŒํŠธ
๊ตฌ์„ฑ์š”์†Œ
  • API Server
  • Scheduler
  • Controller Manager
  • etcd
๊ตฌ์„ฑ์š”์†Œ
  • proxy
  • kubelet

 

์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ(Control Plane) ์ปดํฌ๋„ŒํŠธ

  • ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ(Master Node)๋ฅผ ๋‘์–ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ(Control Plane) ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ธฐ๋Šฅ ์ œ์–ด๋ฅผ ์ „์ฒด์ ์œผ๋กœ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ๋Š” API Server๋กœ๋งŒ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. (Controller Manager๊ฐ€ etcd์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” API Server๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)
  • ํ•ด๋‹น ์š”์†Œ๋“ค์€ ๊ฐœ๋ณ„์  ํ”„๋กœ์„ธ์Šค๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๊ตฌ์„ฑ ์š”์†Œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์ˆ˜ ๋„์›Œ ๊ฐ€์šฉ์„ฑ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

kube-apiserver

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

 

etcd

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

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฐฐํฌํŒ์—์„œ๋Š” etcd๋Œ€์‹  SQLite๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

 

kube-scheduler

  • ํ• ๋‹น๋œ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ์ƒˆ๋กœ ์ƒ์„ฑ๋œ pod์„ ๊ฐ์ง€ํ•˜์—ฌ ์–ด๋–ค ๋…ธ๋“œ๋กœ ๋ฐฐ์น˜ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์ž‘์—…์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ ๋ฐ Pod์˜ ๊ฐ์ข… ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ œ์•ฝ์‚ฌํ•ญ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ํŒ๋‹จํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ์˜ ํ˜„์žฌ์ƒํƒœ์™€ Pod์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.

 

kube-controller-manager

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

 

 

 

๋…ธ๋“œ(Node) ์ปดํฌ๋„ŒํŠธ

  • ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ปดํฌ๋„ŒํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ๊ฐ ๋…ธ๋“œ์—์„œ ๋™์ž‘์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • Matser์™€ ํ†ต์‹  ์‹œ apiserver๋งŒ ๋ฐ”๋ผ๋ด…๋‹ˆ๋‹ค.

 

kubelet

  • ๋…ธ๋“œ์—์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์ž‘ํ•˜๋„๋ก ๊ด€๋ฆฌํ•ด ์ฃผ๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
  • YAML์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด kubectl ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ด YAML์ด kube-apiserver๋กœ ์ „์†ก๋œ ํ›„ kubelet์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. kubelet์€ ์ด YAML์„ ํ†ตํ•ด ์ „๋‹ฌ๋œ Pod์„ ์ƒ์„ฑ ํ˜น์€ ๋ณ€๊ฒฝํ•˜๊ณ , ์ดํ›„ ์ด YAML์— ๋ช…์‹œ๋œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

 

Proxy

  • ๋„คํŠธ์›Œํฌ ํ”„๋ก์‹œ์™€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” Pod IP๊ฐ€ ๋งค๋ฒˆ ๋ฐ”๋€Œ๋Š”๋ฐ์„œ ์˜ค๋Š” ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ†ตํ•ด ๊ณ ์ •์ ์œผ๋กœ Pod์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • iptables ๋˜๋Š” IPVS ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (์„ค์ •๋งŒ ๊ด€๋ฆฌ)

 

Container Runtime

  • Pod์— ํฌํ•จ๋œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์‹ค์งˆ์ ์œผ๋กœ ๋‹ด๋‹นํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

 

 

 

 

Desired State

  • ํ˜„์žฌ ์ƒํƒœ์™€ ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ๊ณ„์† ์ฒดํฌํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ž๋™์œผ๋กœ ์กฐ์น˜(ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์›ํ•˜๋Š” ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ)ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์ธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ตฌ๋™ ์›๋ฆฌ์˜ ํ•ต์‹ฌ
  • ๋‚ด๋ถ€์ ์œผ๋กœ Scheduler / Controller / Kubelet ๋ชจ๋‘ ์ด๋Ÿฌํ•œ cycle์„ ํ†ตํ•ด etcd์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ฐ์ง€

 

 

 

์กฐํšŒ ํ๋ฆ„

์กฐํšŒ ๋ฐœ์ƒ ํ๋ฆ„

  1. ์ •๋ณด ์กฐํšŒ: Controller๊ฐ€ ์ฒดํฌํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๋ฅผ ์กฐํšŒํ•  ๋•Œ API Server์— ๋ฌผ์–ด๋ณธ๋‹ค.
  2. ์ •๋ณด ์กฐํšŒ ๊ถŒํ•œ ์ฒดํฌ: API Server๋Š” ์š”์ฒญ Controller๊ฐ€ ํ•ด๋‹นํ•˜๋Š” Resource๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถŒํ•œ ์ฒดํฌ ํ›„, etcd์— ์ •๋ณด ์กฐํšŒ๋ฅผ ํ•˜๊ณ  Controller์— ์•Œ๋ ค์ฃผ๊ฒŒ ๋œ๋‹ค.

 

์ƒํƒœ ๋ณ€๊ฒฝ ํ๋ฆ„

  1. ์›ํ•˜๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ: API Server๋Š” Controller์—๊ฒŒ ์›ํ•˜๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ „๋‹ฌ์„ ํ•œ๋‹ค.
  2. ์›ํ•˜๋Š” ์ƒํƒœ๋กœ ๋ฆฌ๋กœ์Šค ๋ณ€๊ฒฝ: ์กฐ์น˜๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ
  3. ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ „๋‹ฌ: API Server์—๊ฒŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ „๋‹ฌ
  4. ์ •๋ณด ๊ฐฑ์‹  ๊ถŒํ•œ ์ฒดํฌ: ์กฐํšŒ๊ฐ€ ์•„๋‹Œ ๋ณ€๊ฒฝ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ์ฒดํฌ
  5. ์ •๋ณด ๊ฐฑ์‹ : etcd์— ์ •๋ณด ๊ฐฑ์‹ 

 

ํ•˜๋‚˜์˜ Pod ์ƒ์„ฑ ๊ณผ์ •

  1. ๊ด€๋ฆฌ์ž๊ฐ€ API Server์— Pod์š”์ฒญ
  2. ์š”์ฒญ ๋ฐ›์€ API Server๋Š” etcd์— Pod ์š”์ฒญ์„ ๊ธฐ๋ก
  3. ์ƒˆ Pod์„ ๊ณ„์† ์ฒดํฌํ•˜๋Š” Controller์— ์˜ํ•ด ํ™•์ธ
  4. Controller๊ฐ€ API Server์—๊ฒŒ Pod ํ• ๋‹น ์š”์ฒญ
  5. API Server๋Š” etcd์— Pod ํ• ๋‹น ์š”์ฒญ์œผ๋กœ ์ƒํƒœ ๋ณ€๊ฒฝ
  6. ๊ณ„์† ํ• ๋‹น ์š”์ฒญ ํ™•์ธ ํ•˜๋Š” Scheduler์— ์˜ํ•ด ํ™•์ธ
  7. Scheduler๊ฐ€ API Server์—๊ฒŒ Pod ํŠน์ • ๋…ธ๋“œ ํ• ๋‹น
  8. API Server๋Š” etcd์— Pod ํŠน์ • ๋…ธ๋“œ ํ• ๋‹น, ๋ฏธ์‹คํ–‰ ์ƒํƒœ๋กœ ์—…๋ฐ์ดํŠธ
  9. Kubelet์ด ๋…ธ๋“œ ์ค‘ ๋ฏธ์‹คํ–‰ Pod ํ™•์ธ
  10. Kubelet์ด Pod ์ƒ์„ฑ
  11. API Server๊ฐ€ etcd์— Pod ์ƒ์„ฑ ์—…๋ฐ์ดํŠธ, Pod ํŠน์ • ๋…ธ๋“œ ํ• ๋‹น, ์‹คํ–‰์ค‘ ์ƒํƒœ

 

 

 


์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•Œ์•„๋ณด๊ธฐ 3ํŽธ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ