Welcome! ๐Ÿ™‹โ€โ™‚๏ธ View more

Engineering ๐Ÿ’ป/MLOps

MLOps Engineer์™€ ํ•จ๊ป˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes) ๊ตฌ์กฐ ์‚ดํŽด๋ณด๊ธฐ

DeepFlame 2025. 1. 12. 15:01

Kubernetes ๊ตฌ์กฐ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.
์ œ๊ฐ€ ์•„๋Š” ์„ ์—์„œ ์ตœ๋Œ€ํ•œ ์‰ฝ๊ฒŒ ๊ธ€์„ ์จ๋ณผ๊ฒŒ์š”~

 

Kubernetes ๊ตฌ์กฐ

๋จผ์ € Kubernetes ๊ณต์‹ ํŽ˜์ด์ง€์— ์†Œ๊ฐœ๋œ ๊ตฌ์„ฑ๋„๋ถ€ํ„ฐ ์‚ดํŽด๋ด…์‹œ๋‹ค.
๋ญ๊ฐ€... ๋งŽ์•„๋ณด์ด์ฃ ? ๊ทธ๋Ÿฐ๋ฐ Kubernetes์˜ ๋ชฉ์ ์„ ์ด๋ฃจ๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์š”์†Œ๋“ค์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ตฌ์„ฑ๋„

 

Control Plan

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

 

API Server

๋™์ž‘์„ ์œ„ํ•ด์„œ๋Š” Kubernetes์— ํ˜ธ์ถœ์ด ํ•„์š”ํ•˜๊ฒ ์ฃ ? ์ด๋Ÿฌํ•œ ๋™์ž‘์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.
์™ธ๋ถ€ ํ˜ธ์ถœ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Kubernetes๋Š” ๋ชจ๋“  ํ˜ธ์ถœ๋“ค์€ api๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด Pod๋ฅผ ์ƒ์„ฑํ•˜๋ผ๋Š” ์™ธ๋ถ€ ํ˜ธ์ถœ์„ ๋ฐ›์•„์„œ ๋…ธ๋“œ๋กœ ์ „๋‹ฌํ•˜๊ณ , ์ƒ์„ฑ์˜ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋ฐ›๋Š” ๊ฒƒ ๋ชจ๋‘๊ฐ€ api๋กœ ํ†ต์‹ ๋ฉ๋‹ˆ๋‹ค.

 

ETCD

ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” Key-Value ์Šคํ† ์–ด ์ž…๋‹ˆ๋‹ค.

์œ„ ์ƒํ™ฉ์—์„œ Pod๊ฐ€ ์–ด๋””์— ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ Pod์˜ ์ƒํƒœ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์ €์žฅํ•˜๋Š” ๊ณณ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 
์ด๋ฅผ ETCD์—์„œ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ETCD์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค๋ฉด.. Kubernetes ๋ฆฌ์†Œ์Šค๋“ค์ด ์–ด๋””์„œ ์–ด๋–ค ์ƒํƒœ์ธ์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (ํ•œ ๋งˆ๋””๋กœ ๋…ธ๋‹ต..)
๋”ฐ๋ผ์„œ ETCD ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐฑ์—…ํ•ด์ฃผ๋Š” ๊ฒƒ์ด Kubernetes์—์„œ๋Š” ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

 

Scheduler

Kubernetes์˜ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ์ž์› ๊ด€๋ฆฌ์ž…๋‹ˆ๋‹ค. 
Pod๋ฅผ ์ ์ ˆํ•œ ๊ณณ์— ์ ์ ˆํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Scheduler๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

Kubernetes๋Š” ETCD๋ฅผ ํ†ตํ•ด์„œ ํ˜„ํ™ฉ์„ ํŒŒ์•…ํ•˜๊ณ , ์ ์ ˆํ•œ ๋…ธ๋“œ์— ์ž์›์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋งŒ์•ฝ์— Pod๋ฅผ ๋„์šธ ์ ์ ˆํ•œ ๋…ธ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ์ด๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ํ(Queue) ์—ญํ• ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด์„œ ๋ช…๋ น๋“ค์ด ์†Œ์‹ค๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 

 

Controller manager

์ด ์นœ๊ตฌ์˜ ์—ญํ• ์ด ๊ฝค๋‚˜ ๋งŽ์Šต๋‹ˆ๋‹ค.
Kubernetes์˜ ์ƒํƒœ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ํ•˜๋Š” ๋ฐ์— ์—ญํ• ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์‚ฌ๋žŒ์ด ๋”์šฐ๋ฉด ๋•€์„ ํ˜๋ฆฌ๊ณ , ์ถ”์šฐ๋ฉด ๋ชธ์„ ๋–จ ๋“ฏ์ด ํ•ญ์ƒ์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

1. ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์ž๋™ํ™”๋œ ๋ณต๊ตฌ

Controller์—์„œ๋Š” ETCD๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉด์„œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ƒํƒœ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ์กฐ์ •ํ•˜๊ณ , ์ด ๊ณผ์ •์„ Reconciliation์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ReplicaSet Controller๋Š” ์ง€์ •๋œ ์ˆ˜์˜ ํŒŒ๋“œ๊ฐ€ ํ•ญ์ƒ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•˜๊ฒŒ ๋˜๋Š”๋ฐ,
Desired Pod ๊ฐœ์ˆ˜๊ฐ€ 3์ธ๋ฐ, ํ™˜๊ฒฝ์  ์š”์ธ์œผ๋กœ Pod๊ฐ€ ๋ช‡ ๊ฐœ ์ฃฝ๊ฒŒ๋˜๋”๋ผ๋„ Controller๋Š” ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  Pod๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

2. ์Šค์ผ€์ผ๋ง

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ถ€ํ•˜์— ๋”ฐ๋ผ์„œ Pod์˜ ์ˆ˜๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Š” Deployment Controller๋ฅผ ํ†ตํ•ด์„œ ์Šค์ผ€์ผ ์—…/๋‹ค์šด์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋กค๋ง ์—…๋ฐ์ดํŠธ

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

 

Worker Node

์ด๋ฆ„์—์„œ ๋А๋‚„ ์ˆ˜ ์žˆ๋“ฏ์ด ์„ฑ์‹คํ•œ ์ผ๊พผ๋“ค์ž…๋‹ˆ๋‹ค.
์ž์‹ ์ด ๊ฐ€์ง„ ์ž์›(CPU,MEM,GPU)์„ ํ†ตํ•ด์„œ Pod๋ฅผ ๋„์šฐ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

Kubelet

ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ์—์ด์ „ํŠธ์ž…๋‹ˆ๋‹ค.
ControlPlane์—์„œ ์›ํ•˜๋Š” ์ž์› ์ŠคํŽ™์„ ์—ฌ๊ธฐ๋กœ ์ „๋‹ฌํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ผ Pod๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Kubelet์€ Pod ์‹คํ–‰ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ชจ๋‹ˆํ„ฐ๋ง๋„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋…ธ๋“œ์˜ ์ƒํƒœ ๋ฐ ๋ฆฌ์†Œ์Šค ํ˜„ํ™ฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ๊ด€๋ฆฌํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์ƒํƒœ๋ฅผ API ์„œ๋ฒ„์— ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Pod์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•ด์ค๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ณผ๋ฅจ๋งˆ์šดํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ์š”.
๋ณผ๋ฅจ์€ ๋ณดํ†ต ํด๋Ÿฌ์Šคํ„ฐ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Kubelet์€ ์ด๋Ÿฌํ•œ ๋ณผ๋ฅจ์ด Pod์— ์—ฐ๊ฒฐ๋  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ด€๋ จ๋œ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

Kube-Proxy

๋„คํŠธ์›Œํฌ ํ”„๋ก์‹œ๋กœ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒŒ ๋ฌด์Šจ๋ง์ด๋ƒ๋ฉด... ์›๋ž˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์กด์žฌํ•˜๋Š” Pod์— ์ ‘๊ทผํ•ด์•ผํ•˜๋Š”๋ฐ์š”.
์‚ฌ์šฉ์ž๋Š” ์‹ค์ œ Pod IP๊ฐ€ ์•„๋‹Œ Kubernetes์— ์—ฐ๊ฒฐ๋œ ์™ธ๋ถ€ IP๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
Kubernetes์—์„œ๋Š” Service ๋ฆฌ์†Œ์Šค๋ฅผ ํ†ตํ•ด์„œ ์ด๋Ÿฌํ•œ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” Pod์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ๋Œ€๋ฆฌ์ธ์ด๋ผ๋Š” ๋ง์„ ์“ฐ๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ์‹ค์ œ๋กœ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›ํ•˜๋Š” ์„œ๋ฒ„์— ์ง์ ‘ ์ ‘๊ทผ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋Œ€๋ฆฌ์ธ์˜ ์—ญํ• ๋กœ ์›ํ•˜๋Š” ์„œ๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆด ์ˆ˜๋„ ์žˆ๋Š”๋ฐ.. (๋„คํŠธ์›Œํฌ๊ฐ€ ๊ฐ€์žฅ ์–ด๋ ค์šด ๊ฑฐ ๊ฐ™์•„์š” ใ… ใ… ) ๋‚˜์ค‘์— Service๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

 

์ •๋ฆฌ

๊ฒฐ๊ตญ Kubernetes๋Š” Node๋ฅผ ์ž˜ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ๊ณ , ๊ทธ ์•ˆ์— ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์„ Reconcileํ•˜๊ฒŒ ์ž˜ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์–ด์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ๋“ค์ด ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๊ฑฐ์ฃ .

๋ฌผ๋ก  ์œ„์— ์–ธ๊ธ‰ํ•œ ๊ธฐ๋Šฅ๋“ค์— ๋” ํ•ด์„œ Kubernetes๋Š” ๋” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์•„์ง๋„ ๋ฐœ์ „์ด ๋Š์ด์—†์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๊ณ ์š”. 

์œ„ ๊ธ€์„ ์ฝ์œผ์‹œ๋ฉด์„œ Kubernetes์— ๋Œ€ํ•ด์„œ ์ข€ ๋” ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ™†‍โ™‚๏ธ