Dev-ops

๐Ÿšข ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes) ๊ตฌ์กฐ ์™„๋ฒฝ ๊ฐ€์ด๋“œ โš“

xeunnie 2025. 4. 2. 01:00
728x90
๋ฐ˜์‘ํ˜•

๐Ÿšข ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes) ๊ตฌ์กฐ ์™„๋ฒฝ ๊ฐ€์ด๋“œ โš“

 

“์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์“ด๋‹ค๋Š”๋ฐ, ๋Œ€์ฒด ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜์–ด ์žˆ๋Š” ๊ฑฐ์ง€?”

 

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

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ตฌ์กฐ๋ฅผ ์•„์ฃผ ์„ฌ์„ธํ•˜๊ฒŒ ํŒŒํ—ค์ณ ๋ณด๊ณ , ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ œ๋Œ€๋กœ ์ดํ•ดํ•ด๋ณด์ž! ๐Ÿš€

๐Ÿ“Œ ๋ชฉ์ฐจ

 

1๏ธโƒฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ž€? (๊ฐ„๋žตํ•œ ๊ฐœ๋… ์ •๋ฆฌ)

2๏ธโƒฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ „์ฒด ๊ตฌ์กฐ ๊ฐœ์š”

3๏ธโƒฃ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์˜ ๊ตฌ์„ฑ ์š”์†Œ

4๏ธโƒฃ ์›Œ์ปค ๋…ธ๋“œ์˜ ๊ตฌ์„ฑ ์š”์†Œ

5๏ธโƒฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ํ•ต์‹ฌ ๋ฆฌ์†Œ์Šค

6๏ธโƒฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋‚ด๋ถ€ ํ†ต์‹  ๊ตฌ์กฐ

7๏ธโƒฃ ์‹ค๋ฌด์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ตฌ์กฐ ํ™œ์šฉํ•˜๊ธฐ

8๏ธโƒฃ ๊ฒฐ๋ก : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

1๏ธโƒฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ž€? (๊ฐ„๋žตํ•œ ๊ฐœ๋… ์ •๋ฆฌ)

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes, K8s)๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐฐํฌ, ํ™•์žฅ, ์šด์˜ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ์ด๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๊ฐ€์šฉ์„ฑ์„ ๋†’์ด๊ณ ,

์Šค์ผ€์ผ๋ง๊ณผ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž๋™ํ™”ํ•˜์—ฌ ์šด์˜ ๋ถ€๋‹ด์„ ์ค„์ธ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ก **์ฆ‰, “์ปจํ…Œ์ด๋„ˆ๋“ค์„ ํ•˜๋‚˜์˜ ๊ตฐ์ง‘(Cluster)์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ”**์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

2๏ธโƒฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ „์ฒด ๊ตฌ์กฐ ๊ฐœ์š”

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ํฌ๊ฒŒ **“๋งˆ์Šคํ„ฐ ๋…ธ๋“œ(Master Node)”**์™€ **“์›Œ์ปค ๋…ธ๋“œ(Worker Node)”**๋กœ ๋‚˜๋‰œ๋‹ค.

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ: ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐ์ •ํ•˜๋Š” ์—ญํ• 

์›Œ์ปค ๋…ธ๋“œ: ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ๋…ธ๋“œ

 

โœ… ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๋„์‹ํ™”ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

+-------------------------------------+
|           Master Node              |
|-------------------------------------|
|  API Server  |  Scheduler  |  etcd  |
|              | Controller  |        |
+-------------------------------------+

+-------------------------------------------------+
|                 Worker Node 1                   |
|-------------------------------------------------|
|  Kubelet  |  Kube Proxy  |  Container Runtime  |
|           |              | (Docker, containerd)|
|----------------------------------------------- |
|  Pod 1    |  Pod 2       |  Pod 3             |
+-------------------------------------------------+

+-------------------------------------------------+
|                 Worker Node 2                   |
|-------------------------------------------------|
|  Kubelet  |  Kube Proxy  |  Container Runtime  |
|           |              | (Docker, containerd)|
|----------------------------------------------- |
|  Pod 4    |  Pod 5       |  Pod 6             |
+-------------------------------------------------+

3๏ธโƒฃ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์˜ ๊ตฌ์„ฑ ์š”์†Œ (์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ)

 

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‘๋‡Œ ์—ญํ• ์„ ํ•œ๋‹ค.

์ด ์•ˆ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์žˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ์—ญํ• 

API Server (kube-apiserver) ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ง„์ž…์ ! ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ
Scheduler (kube-scheduler) ์ƒˆ๋กœ์šด Pod๊ฐ€ ์–ด๋””์—์„œ ์‹คํ–‰๋ ์ง€ ๊ฒฐ์ •
Controller Manager (kube-controller-manager) ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ์›ํ•˜๋Š” ์ƒํƒœ๋กœ ์œ ์ง€
etcd ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ถ„์‚ฐ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ

๐ŸŽฏ (1) API Server (kube-apiserver)

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ค‘์•™ ํ—ˆ๋ธŒ ์—ญํ• 

kubectl apply ๊ฐ™์€ ๋ช…๋ น์ด API Server๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋จ

๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด API Server๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์Œ

 

๐ŸŽฏ (2) Scheduler (kube-scheduler)

์ƒˆ๋กœ์šด Pod๊ฐ€ ์–ด๋А Worker Node์—์„œ ์‹คํ–‰๋ ์ง€ ๊ฒฐ์ •

CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋…ธ๋“œ ์ƒํƒœ ๋“ฑ์„ ๊ณ ๋ คํ•ด์„œ ๊ฐ€์žฅ ์ ์ ˆํ•œ ๋…ธ๋“œ์— ๋ฐฐ์น˜

 

๐ŸŽฏ (3) Controller Manager (kube-controller-manager)

ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์›ํ•˜๋Š” ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ์—ญํ• 

๋…ธ๋“œ ์ปจํŠธ๋กค๋Ÿฌ, ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ, ์—”๋“œํฌ์ธํŠธ ์ปจํŠธ๋กค๋Ÿฌ ๋“ฑ์ด ํฌํ•จ๋จ

์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค Pod๊ฐ€ ์ฃฝ์œผ๋ฉด ์ƒˆ๋กœ์šด Pod๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ

 

๐ŸŽฏ (4) etcd

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ “๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค”

๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅ (๋…ธ๋“œ ์ •๋ณด, ๋„คํŠธ์›Œํฌ ์ •๋ณด, ์ปจํ”ผ๊ทธ ๋ฐ์ดํ„ฐ ๋“ฑ)

๊ณ ๊ฐ€์šฉ์„ฑ์„ ์œ„ํ•ด ๋ถ„์‚ฐ ์ €์žฅ ๊ฐ€๋Šฅ (RAFT ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ)

4๏ธโƒฃ ์›Œ์ปค ๋…ธ๋“œ์˜ ๊ตฌ์„ฑ ์š”์†Œ

 

์›Œ์ปค ๋…ธ๋“œ๋Š” ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ๋…ธ๋“œ์ด๋‹ค.

์ปดํฌ๋„ŒํŠธ์—ญํ• 

Kubelet ๊ฐ ๋…ธ๋“œ์—์„œ Pod์˜ ์‹คํ–‰์„ ๊ด€๋ฆฌ
Kube Proxy ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌ
Container Runtime ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ (Docker, containerd ๋“ฑ)

๐ŸŽฏ (1) Kubelet

์›Œ์ปค ๋…ธ๋“œ์˜ ํ•ต์‹ฌ! Pod๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• 

๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์˜ API Server๋กœ๋ถ€ํ„ฐ ๋ช…๋ น์„ ๋ฐ›์•„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰

 

๐ŸŽฏ (2) Kube Proxy

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌ

Pod ๊ฐ„ ํ†ต์‹ ์„ ์›ํ™œํ•˜๊ฒŒ ์—ฐ๊ฒฐ

 

๐ŸŽฏ (3) Container Runtime

์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• 

๋Œ€ํ‘œ์ ์ธ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„: Docker, containerd, CRI-O

5๏ธโƒฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ํ•ต์‹ฌ ๋ฆฌ์†Œ์Šค

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋“ค์„ ์ •๋ฆฌํ•ด๋ณด์ž.

๋ฆฌ์†Œ์Šค์„ค๋ช…

Pod ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์†Œ ๋‹จ์œ„
Deployment ์—ฌ๋Ÿฌ ๊ฐœ์˜ Pod๋ฅผ ๊ด€๋ฆฌ
Service ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด Pod๋ฅผ ์—ฐ๊ฒฐ
ConfigMap / Secret ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ฐ ๋ณด์•ˆ ์ •๋ณด ๊ด€๋ฆฌ
PersistentVolume (PV) ์™ธ๋ถ€ ์ €์žฅ์†Œ ์—ฐ๊ฒฐ

๐Ÿ’ก ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ด ๋ฆฌ์†Œ์Šค๋“ค์„ ์กฐํ•ฉํ•ด์„œ ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค! ๐Ÿš€

6๏ธโƒฃ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋‚ด๋ถ€ ํ†ต์‹  ๊ตฌ์กฐ

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋‚ด๋ถ€ ํ†ต์‹ ์€ API Server๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

API Server ←→ etcd : ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ๊ด€๋ฆฌ

API Server ←→ Kubelet : Pod ์‹คํ–‰ ๋ฐ ์ƒํƒœ ํ™•์ธ

Pod ←→ Pod (Service ํ™œ์šฉ) : ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ๋กœ ํ†ต์‹ 

 

๐Ÿ’ก Service ์—†์ด Pod๋ฅผ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด, ์žฌ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค IP๊ฐ€ ๋ฐ”๋€Œ์–ด์„œ ํ†ต์‹ ์ด ์•ˆ ๋  ์ˆ˜ ์žˆ๋‹ค!

๐Ÿ’ก ๊ทธ๋ž˜์„œ ๋ณดํ†ต Service๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•ˆ์ •์ ์ธ ํ†ต์‹ ์„ ๋ณด์žฅํ•œ๋‹ค.

7๏ธโƒฃ ์‹ค๋ฌด์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ตฌ์กฐ ํ™œ์šฉํ•˜๊ธฐ

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‹ค๋ฌด์—์„œ ํ™œ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์„ ๋ช‡ ๊ฐ€์ง€ ์ •๋ฆฌํ•ด๋ณด์ž.

 

โœ… ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ

Pod, Service, Deployment๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉ

 

โœ… ๋„คํŠธ์›Œํฌ ์„ค๊ณ„

Kube Proxy์™€ Service์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ํŒŒ์•…

 

โœ… ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

Prometheus + Grafana๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง

 

โœ… ์˜คํ† ์Šค์ผ€์ผ๋ง ์ ์šฉ

HPA (Horizontal Pod Autoscaler)๋กœ ์ž๋™ ํ™•์žฅ

8๏ธโƒฃ ๊ฒฐ๋ก : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋‹จ์ˆœํ•œ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๋ฉด, ๋”์šฑ ์•ˆ์ •์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿš€ “์ด์ œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ตฌ์กฐ๊ฐ€ ๋ณด์ธ๋‹ค!”

๐ŸŒท ์ „์„ค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ด…์‹œ๋‹น! ๐ŸŒท

728x90
๋ฐ˜์‘ํ˜•