์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿš€ Kubernetes ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

๐Ÿš€ Kubernetes ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์˜ ํ•ต์‹ฌ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋‚ด๋ถ€๋ฅผ ํŒŒํ—ค์ณ๋ณด์ž!

๐Ÿ‘‹ ์•ˆ๋…•! ์š”์ฆ˜ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์—์„œ ๋น ์งˆ ์ˆ˜ ์—†๋Š” ๊ฒŒ ๋ฐ”๋กœ Kubernetes(์ฟ ๋ฒ„๋„คํ‹ฐ์Šค)์ง€? ์ค„์—ฌ์„œ K8s๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋Š”๋ฐ, ์ด ์นœ๊ตฌ๊ฐ€ ์™œ ์ด๋ ‡๊ฒŒ ํ•ซํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ๋‚ด๋ถ€ ๊ตฌ์กฐ๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ๊ถ๊ธˆํ•˜์ง€ ์•Š์•„? ๐Ÿ˜Š

์˜ค๋Š˜์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์นœ๊ตฌํ•œํ…Œ ์„ค๋ช…ํ•˜๋“ฏ์ด ์‰ฝ๊ณ  ์žฌ๋ฏธ์žˆ๊ฒŒ ํ’€์–ด๋ณผ ๊ฑฐ์•ผ. ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ ํ•˜๋‚˜ํ•˜๋‚˜ ๋œฏ์–ด๋ณด๋ฉด ์ •๋ง ๋…ผ๋ฆฌ์ ์ด๊ณ  ๋ฉ‹์ง„ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ฑฐ๋“ ! ๐ŸŽฏ

Control Plane API Server kube-apiserver etcd Key-Value Store Scheduler kube-scheduler Controller Manager Worker Nodes Pod kubelet Pod kubelet Pod kubelet Pod kubelet Container Runtime Docker / containerd / CRI-O

๐ŸŽฏ Kubernetes๊ฐ€ ๋ญ๊ธธ๋ž˜?

๋ณธ๊ฒฉ์ ์œผ๋กœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์ „์—, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์ •ํ™•ํžˆ ๋ญํ•˜๋Š” ๋…€์„์ธ์ง€ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž! ๐Ÿค”

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”Œ๋žซํผ์ด์•ผ. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ์ˆ˜๋งŽ์€ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ง€ํœ˜์ž ๊ฐ™์€ ์กด์žฌ์ง€. ๋งˆ์น˜ ์˜ค์ผ€์ŠคํŠธ๋ผ์˜ ์ง€ํœ˜์ž๊ฐ€ ๊ฐ ์•…๊ธฐ ์—ฐ์ฃผ์ž๋“ค์„ ์กฐ์œจํ•˜๋“ฏ์ด, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ๋ฐฐํฌํ•˜๊ณ , ์Šค์ผ€์ผ๋งํ•˜๊ณ , ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ด.

์›๋ž˜ ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ–ˆ๊ณ , 2014๋…„์— ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœ๋์–ด. ์ง€๊ธˆ์€ CNCF(Cloud Native Computing Foundation)์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์ง€. ๐Ÿ’ช

๐Ÿ’ก ์™œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์จ์•ผ ํ• ๊นŒ? โ€ข ์ž๋™ํ™”๋œ ๋ฐฐํฌ์™€ ๋กค๋ฐฑ: ์ƒˆ ๋ฒ„์ „ ๋ฐฐํฌ๋„, ๋ฌธ์ œ ์ƒ๊ธฐ๋ฉด ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ๋„ ์ž๋™!
โ€ข ์ž๋™ ์Šค์ผ€์ผ๋ง: ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๋Š˜๋ฆฌ๊ณ , ์ค„์–ด๋“ค๋ฉด ์ค„์—ฌ์ค˜
โ€ข ์ž๊ฐ€ ์น˜์œ (Self-healing): ์ปจํ…Œ์ด๋„ˆ ์ฃฝ์œผ๋ฉด ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘
โ€ข ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์™€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ: ์ปจํ…Œ์ด๋„ˆ๋“ค ๊ฐ„์˜ ํ†ต์‹ ์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ
โ€ข ์Šคํ† ๋ฆฌ์ง€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜: ๋กœ์ปฌ, ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€ ์ž๋™ ๋งˆ์šดํŠธ

๐Ÿ—๏ธ Kubernetes ์•„ํ‚คํ…์ฒ˜์˜ ํฐ ๊ทธ๋ฆผ

์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋“ค์—ฌ๋‹ค๋ณผ ์‹œ๊ฐ„์ด์•ผ! ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋Š” ํฌ๊ฒŒ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰˜์–ด:

1. Control Plane (์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ) - ๋‘๋‡Œ ์—ญํ•  ๐Ÿง 
2. Worker Nodes (์›Œ์ปค ๋…ธ๋“œ) - ์‹ค์ œ ์ผํ•˜๋Š” ์ผ๊พผ๋“ค ๐Ÿ’ช

Control Plane์€ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๊ด€๋ฆฌ์ž ์—ญํ• ์ด๊ณ , Worker Nodes๋Š” ์‹ค์ œ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ž‘์—…์ž๋“ค์ด์•ผ. ํšŒ์‚ฌ๋กœ ์น˜๋ฉด ๊ฒฝ์˜์ง„๊ณผ ์‹ค๋ฌด์ง„์˜ ๊ด€๊ณ„๋ผ๊ณ  ๋ณด๋ฉด ๋ผ! ๐Ÿ˜Š

๐ŸŽช ํด๋Ÿฌ์Šคํ„ฐ(Cluster)๋ž€?

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋…ธ๋“œ(์„œ๋ฒ„)๋“ค์˜ ์ง‘ํ•ฉ์„ ๋งํ•ด. ์ตœ์†Œ 1๊ฐœ์˜ Control Plane ๋…ธ๋“œ์™€ 1๊ฐœ ์ด์ƒ์˜ Worker ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์ง€. ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ(HA)์„ ์œ„ํ•ด Control Plane๋„ ์—ฌ๋Ÿฌ ๊ฐœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒŒ ์ผ๋ฐ˜์ ์ด์•ผ!

๐Ÿง  Control Plane ์ปดํฌ๋„ŒํŠธ ์ƒ์„ธ ๋ถ„์„

Control Plane์€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‘๋‡Œ์•ผ. ์—ฌ๊ธฐ์„œ ๋ชจ๋“  ์ค‘์š”ํ•œ ๊ฒฐ์ •์ด ์ด๋ฃจ์–ด์ง€์ง€. Control Plane์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด. ํ•˜๋‚˜์”ฉ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ž! ๐Ÿ”

1๏ธโƒฃ kube-apiserver (API ์„œ๋ฒ„)

์—ญํ• : ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ํ”„๋ก ํŠธ์—”๋“œ์ด์ž ์ค‘์•™ ํ—ˆ๋ธŒ

API ์„œ๋ฒ„๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ํ†ต์‹ ์ด ์ง€๋‚˜๊ฐ€๋Š” ๊ด€๋ฌธ์ด์•ผ. ์‚ฌ์šฉ์ž๊ฐ€ kubectl ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋“ , ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์„œ๋กœ ํ†ต์‹ ํ•˜๋“ , ๋ชจ๋“  ์š”์ฒญ์€ API ์„œ๋ฒ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ด. ๐Ÿšช

์ฃผ์š” ๊ธฐ๋Šฅ:
โ€ข REST API๋ฅผ ํ†ตํ•œ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ๋…ธ์ถœ
โ€ข ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization) ์ฒ˜๋ฆฌ
โ€ข ์š”์ฒญ ๊ฒ€์ฆ(Validation)
โ€ข etcd์™€์˜ ์œ ์ผํ•œ ํ†ต์‹  ์ฐฝ๊ตฌ
โ€ข ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ํ†ต์‹ ์˜ ์ค‘๊ฐœ์ž

API ์„œ๋ฒ„๋Š” ์ˆ˜ํ‰ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ด์„œ, ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์œผ๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ API ์„œ๋ฒ„๋ฅผ ๋„์›Œ์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑํ•  ์ˆ˜ ์žˆ์–ด. ์‹ค์ œ๋กœ ๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” 3๊ฐœ ์ด์ƒ์˜ API ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒŒ ์ผ๋ฐ˜์ ์ด์ง€! ๐Ÿ“ˆ

2๏ธโƒฃ etcd (๋ถ„์‚ฐ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ)

์—ญํ• : ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

etcd๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์ผ๊ด€์„ฑ ์žˆ๊ณ  ๊ณ ๊ฐ€์šฉ์„ฑ์„ ๊ฐ€์ง„ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ์•ผ. ํด๋Ÿฌ์Šคํ„ฐ์˜ "์ง„์‹ค์˜ ์›์ฒœ(Source of Truth)"์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์ง€! ๐Ÿ“š

์ €์žฅํ•˜๋Š” ์ •๋ณด:
โ€ข ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • ์ •๋ณด
โ€ข ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์˜ ์ƒํƒœ (Pod, Service, Deployment ๋“ฑ)
โ€ข ๋„คํŠธ์›Œํฌ ์„ค์ •
โ€ข ์‹œํฌ๋ฆฟ(Secret)๊ณผ ์ปจํ”ผ๊ทธ๋งต(ConfigMap)

etcd๋Š” Raft ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ด. ๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ etcd ์ธ์Šคํ„ด์Šค๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ตฌ์„ฑํ•˜๋ฉด, ์ผ๋ถ€๊ฐ€ ์ฃฝ์–ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด์กด๋ผ. ๋ณดํ†ต 3๊ฐœ ๋˜๋Š” 5๊ฐœ์˜ ํ™€์ˆ˜ ๊ฐœ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒŒ ๊ถŒ์žฅ์‚ฌํ•ญ์ด์•ผ! ๐Ÿ”

โš ๏ธ ์ค‘์š”: etcd๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋ผ์„œ ์ •๊ธฐ์ ์ธ ๋ฐฑ์—…์ด ํ•„์ˆ˜์•ผ. etcd ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ€๋ฉด ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด๋ฅผ ์žƒ๋Š” ๊ฑฐ๋‚˜ ๋งˆ์ฐฌ๊ฐ€์ง€๊ฑฐ๋“ !

3๏ธโƒฃ kube-scheduler (์Šค์ผ€์ค„๋Ÿฌ)

์—ญํ• : ์ƒˆ๋กœ์šด Pod๋ฅผ ์–ด๋А ๋…ธ๋“œ์— ๋ฐฐ์น˜ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฐ์น˜ ์ „๋ฌธ๊ฐ€

์Šค์ผ€์ค„๋Ÿฌ๋Š” ์•„์ง ๋…ธ๋“œ์— ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ƒˆ๋กœ์šด Pod๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ๊ทธ Pod๋ฅผ ์‹คํ–‰ํ•  ์ตœ์ ์˜ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ์—ญํ• ์„ ํ•ด. ๋งˆ์น˜ ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„์—์„œ ๋ธ”๋ก์„ ์–ด๋””์— ๋†“์„์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ด! ๐ŸŽฎ

์Šค์ผ€์ค„๋ง ๊ณ ๋ ค ์‚ฌํ•ญ:
โ€ข ๋…ธ๋“œ์˜ ๋ฆฌ์†Œ์Šค ๊ฐ€์šฉ์„ฑ (CPU, ๋ฉ”๋ชจ๋ฆฌ)
โ€ข Pod์˜ ๋ฆฌ์†Œ์Šค ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ œํ•œ
โ€ข ํ•˜๋“œ์›จ์–ด/์†Œํ”„ํŠธ์›จ์–ด ์ œ์•ฝ ์กฐ๊ฑด
โ€ข ์–ดํ”ผ๋‹ˆํ‹ฐ(Affinity)์™€ ์•ˆํ‹ฐ-์–ดํ”ผ๋‹ˆํ‹ฐ(Anti-affinity) ๊ทœ์น™
โ€ข ๋ฐ์ดํ„ฐ ์ง€์—ญ์„ฑ(Data locality)
โ€ข ํ…Œ์ธํŠธ(Taint)์™€ ํ†จ๋Ÿฌ๋ ˆ์ด์…˜(Toleration)

์Šค์ผ€์ค„๋Ÿฌ๋Š” 2๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค๋กœ ์ž‘๋™ํ•ด:
1. ํ•„ํ„ฐ๋ง(Filtering): Pod๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๋…ธ๋“œ๋“ค์„ ์ œ์™ธ
2. ์Šค์ฝ”์–ด๋ง(Scoring): ๋‚จ์€ ๋…ธ๋“œ๋“ค์— ์ ์ˆ˜๋ฅผ ๋งค๊ฒจ์„œ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋…ธ๋“œ ์„ ํƒ

์ปค์Šคํ…€ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์–ด. ํŠน๋ณ„ํ•œ ์Šค์ผ€์ค„๋ง ๋กœ์ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜์ง€! ๐ŸŽฏ

4๏ธโƒฃ kube-controller-manager (์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ €)

์—ญํ• : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ์‹คํ–‰ํ•˜๋Š” ๊ด€๋ฆฌ์ž

์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ €๋Š” ์‚ฌ์‹ค ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๋ฌถ์–ด์„œ ์‹คํ–‰ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์•ผ. ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ํŠน์ • ์ธก๋ฉด์„ ๊ด€๋ฆฌํ•˜๋Š” ์ œ์–ด ๋ฃจํ”„(Control Loop)๋ฅผ ์‹คํ–‰ํ•ด. ๐Ÿ”„

์ฃผ์š” ์ปจํŠธ๋กค๋Ÿฌ๋“ค:

โ€ข Node Controller: ๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ๋…ธ๋“œ๊ฐ€ ๋‹ค์šด๋˜๋ฉด ๋Œ€์‘
โ€ข Replication Controller: ์ง€์ •๋œ ์ˆ˜์˜ Pod ๋ณต์ œ๋ณธ์ด ํ•ญ์ƒ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅ
โ€ข Endpoints Controller: Service์™€ Pod๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” Endpoints ๊ฐ์ฒด ๊ด€๋ฆฌ
โ€ข Service Account & Token Controllers: ์ƒˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ณ„์ •๊ณผ API ์•ก์„ธ์Šค ํ† ํฐ ์ƒ์„ฑ
โ€ข Deployment Controller: Deployment ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ
โ€ข Job Controller: ์ผํšŒ์„ฑ ์ž‘์—…์„ ๋‚˜ํƒ€๋‚ด๋Š” Job ๊ฐ์ฒด ๊ด€๋ฆฌ

์ปจํŠธ๋กค๋Ÿฌ๋“ค์€ "ํ˜„์žฌ ์ƒํƒœ"๋ฅผ "์›ํ•˜๋Š” ์ƒํƒœ"๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋Š์ž„์—†์ด ์ž‘๋™ํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด, Deployment์—์„œ replica๋ฅผ 3์œผ๋กœ ์„ค์ •ํ–ˆ๋Š”๋ฐ Pod๊ฐ€ 2๊ฐœ๋งŒ ์‹คํ–‰ ์ค‘์ด๋ฉด, ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ 1๊ฐœ๋ฅผ ๋” ์ƒ์„ฑํ•˜๋Š” ์‹์ด์ง€! ๐ŸŽ›๏ธ

5๏ธโƒฃ cloud-controller-manager (ํด๋ผ์šฐ๋“œ ์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ €)

์—ญํ• : ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž๋ณ„ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ

ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ(AWS, GCP, Azure ๋“ฑ)์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์•ผ. ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž์˜ API์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉด์„œ ํด๋ผ์šฐ๋“œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜์ง€. โ˜๏ธ

์ฃผ์š” ์ปจํŠธ๋กค๋Ÿฌ๋“ค:
โ€ข Node Controller: ํด๋ผ์šฐ๋“œ์—์„œ ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
โ€ข Route Controller: ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ์—์„œ ๋ผ์šฐํŠธ ์„ค์ •
โ€ข Service Controller: ํด๋ผ์šฐ๋“œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ƒ์„ฑ/์—…๋ฐ์ดํŠธ/์‚ญ์ œ

์˜จํ”„๋ ˆ๋ฏธ์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•„์š” ์—†์–ด!

๐Ÿ’ช Worker Node ์ปดํฌ๋„ŒํŠธ ์ƒ์„ธ ๋ถ„์„

์ด์ œ ์‹ค์ œ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋Š” Worker Node์˜ ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณด์ž! Worker Node๋Š” ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์›Œํฌ๋กœ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ณณ์ด์•ผ. ๊ฐ Worker Node์—๋Š” ๋‹ค์Œ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์‹คํ–‰๋˜๊ณ  ์žˆ์–ด. ๐Ÿƒ

1๏ธโƒฃ kubelet (ํ๋ธ”๋ฆฟ)

์—ญํ• : ๊ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ์—์ด์ „ํŠธ, Pod ์‹คํ–‰์„ ์ฑ…์ž„์ง

kubelet์€ ๊ฐ Worker Node์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ปดํฌ๋„ŒํŠธ์•ผ. Control Plane๊ณผ ํ†ต์‹ ํ•˜๋ฉด์„œ ํ•ด๋‹น ๋…ธ๋“œ์—์„œ Pod๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ด. ๋…ธ๋“œ์˜ "ํ˜„์žฅ ๊ด€๋ฆฌ์ž"๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ! ๐Ÿ‘ท

์ฃผ์š” ๊ธฐ๋Šฅ:
โ€ข API ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ PodSpec์„ ๋ฐ›์•„์„œ Pod ์‹คํ–‰
โ€ข ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋‹ˆํ„ฐ๋ง
โ€ข ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„๊ณผ ํ†ต์‹ ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ/์‚ญ์ œ
โ€ข ๋…ธ๋“œ์™€ Pod์˜ ์ƒํƒœ๋ฅผ API ์„œ๋ฒ„์— ๋ณด๊ณ 
โ€ข ๋ณผ๋ฅจ ๋งˆ์šดํŠธ ๊ด€๋ฆฌ
โ€ข ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง

kubelet์€ ์—ฌ๋Ÿฌ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ PodSpec์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด:
โ€ข API ์„œ๋ฒ„ (๊ฐ€์žฅ ์ผ๋ฐ˜์ )
โ€ข ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ
โ€ข HTTP ์—”๋“œํฌ์ธํŠธ

kubelet์€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์˜ ํ—ฌ์Šค ์ฒดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด. Liveness Probe์™€ Readiness Probe๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ด์•„์žˆ๋Š”์ง€, ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์„ ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€! ๐Ÿฅ

2๏ธโƒฃ kube-proxy (ํ๋ธŒ ํ”„๋ก์‹œ)

์—ญํ• : ๊ฐ ๋…ธ๋“œ์—์„œ ๋„คํŠธ์›Œํฌ ๊ทœ์น™์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํ”„๋ก์‹œ

kube-proxy๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Service์˜ ๋„คํŠธ์›Œํฌ ๊ทœ์น™์„ ๊ตฌํ˜„ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์•ผ. Service๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ ์ ˆํ•œ Pod๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜์ง€. ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์˜ "๊ตํ†ต ๊ฒฝ์ฐฐ"์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด! ๐Ÿšฆ

์ฃผ์š” ๊ธฐ๋Šฅ:
โ€ข Service์˜ ๊ฐ€์ƒ IP๋ฅผ ์‹ค์ œ Pod IP๋กœ ๋งคํ•‘
โ€ข ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ตฌํ˜„
โ€ข ๋„คํŠธ์›Œํฌ ๊ทœ์น™ ์œ ์ง€ ๊ด€๋ฆฌ

kube-proxy๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์–ด:

โ€ข userspace ๋ชจ๋“œ: ์ดˆ๊ธฐ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ, ์„ฑ๋Šฅ์ด ๋‚ฎ์Œ
โ€ข iptables ๋ชจ๋“œ: ๊ฐ€์žฅ ์ผ๋ฐ˜์ , Linux iptables ๊ทœ์น™ ์‚ฌ์šฉ
โ€ข IPVS ๋ชจ๋“œ: ๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉ, ๋” ๋‚˜์€ ์„ฑ๋Šฅ๊ณผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ตœ์‹  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” iptables ๋˜๋Š” IPVS ๋ชจ๋“œ๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•ด. IPVS๋Š” ํŠนํžˆ ๋งŽ์€ ์ˆ˜์˜ Service๊ฐ€ ์žˆ์„ ๋•Œ ์„ฑ๋Šฅ์ด ํ›จ์”ฌ ์ข‹์•„! โšก

3๏ธโƒฃ Container Runtime (์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„)

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

์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ €์ˆ˜์ค€ ์†Œํ”„ํŠธ์›จ์–ด์•ผ. kubelet์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ผ๊ณ  ๋ช…๋ นํ•˜๋ฉด, ์‹ค์ œ๋กœ ๊ทธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ด์ง€! ๐Ÿณ

์ง€์›๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„:

โ€ข containerd: ํ˜„์žฌ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋Ÿฐํƒ€์ž„, Docker์—์„œ ๋ถ„๋ฆฌ๋จ
โ€ข CRI-O: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ „์šฉ์œผ๋กœ ์„ค๊ณ„๋œ ๊ฒฝ๋Ÿ‰ ๋Ÿฐํƒ€์ž„
โ€ข Docker Engine: ๊ณผ๊ฑฐ์— ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, 1.24 ๋ฒ„์ „๋ถ€ํ„ฐ ๊ณต์‹ ์ง€์› ์ค‘๋‹จ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” CRI(Container Runtime Interface)๋ผ๋Š” ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ด์„œ, ๋‹ค์–‘ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด. ๋•๋ถ„์— ํŠน์ • ๋Ÿฐํƒ€์ž„์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€! ๐Ÿ”Œ

์ฐธ๊ณ : Docker๊ฐ€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๊ณต์‹ ์ง€์›์ด ์ค‘๋‹จ๋๋‹ค๊ณ  ํ•ด์„œ Docker ์ด๋ฏธ์ง€๋ฅผ ๋ชป ์“ฐ๋Š” ๊ฑด ์•„๋‹ˆ์•ผ! Docker ์ด๋ฏธ์ง€๋Š” OCI(Open Container Initiative) ํ‘œ์ค€์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— containerd๋‚˜ CRI-O์—์„œ๋„ ๋ฌธ์ œ์—†์ด ์‹คํ–‰๋ผ. ๐Ÿ˜Š

๐Ÿ”„ Kubernetes์˜ ๋™์ž‘ ์›๋ฆฌ

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

๐Ÿ“ ์‹œ๋‚˜๋ฆฌ์˜ค: Deployment ์ƒ์„ฑ ๊ณผ์ •

1๋‹จ๊ณ„: ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น ์‹คํ–‰ ๐Ÿ™‹
์‚ฌ์šฉ์ž๊ฐ€ kubectl create deployment nginx --image=nginx ๋ช…๋ น์„ ์‹คํ–‰ํ•ด.

2๋‹จ๊ณ„: API ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ์ˆ˜์‹  ๐Ÿ“จ
kubectl์ด API ์„œ๋ฒ„์— HTTP ์š”์ฒญ์„ ๋ณด๋‚ด. API ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์ธ์ฆํ•˜๊ณ , ๊ถŒํ•œ์„ ํ™•์ธํ•˜๊ณ , ์š”์ฒญ์„ ๊ฒ€์ฆํ•ด.

3๋‹จ๊ณ„: etcd์— ์ €์žฅ ๐Ÿ’พ
API ์„œ๋ฒ„๊ฐ€ Deployment ๊ฐ์ฒด๋ฅผ etcd์— ์ €์žฅํ•ด. ์ด ์‹œ์ ์—์„œ Deployment๋Š” ์ƒ์„ฑ๋์ง€๋งŒ, ์•„์ง Pod๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์•˜์–ด.

4๋‹จ๊ณ„: Deployment Controller๊ฐ€ ๊ฐ์ง€ ๐Ÿ‘€
Deployment Controller๊ฐ€ ์ƒˆ๋กœ์šด Deployment๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ReplicaSet์„ ์ƒ์„ฑํ•ด. ReplicaSet ์ •๋ณด๋„ etcd์— ์ €์žฅ๋ผ.

5๋‹จ๊ณ„: ReplicaSet Controller๊ฐ€ ๊ฐ์ง€ ๐Ÿ”
ReplicaSet Controller๊ฐ€ ์ƒˆ๋กœ์šด ReplicaSet์„ ๊ฐ์ง€ํ•˜๊ณ , ์ง€์ •๋œ ์ˆ˜๋งŒํผ Pod๋ฅผ ์ƒ์„ฑํ•ด. Pod ์ •๋ณด๊ฐ€ etcd์— ์ €์žฅ๋˜์ง€๋งŒ, ์•„์ง ์–ด๋А ๋…ธ๋“œ์— ๋ฐฐ์น˜ํ• ์ง€๋Š” ๊ฒฐ์ •๋˜์ง€ ์•Š์•˜์–ด.

6๋‹จ๊ณ„: Scheduler๊ฐ€ ๋…ธ๋“œ ์„ ํƒ ๐ŸŽฏ
Scheduler๊ฐ€ ์•„์ง ๋…ธ๋“œ์— ํ• ๋‹น๋˜์ง€ ์•Š์€ Pod๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์ตœ์ ์˜ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•ด์„œ Pod์— ๋…ธ๋“œ ์ •๋ณด๋ฅผ ํ• ๋‹นํ•ด. ์ด ์ •๋ณด๊ฐ€ etcd์— ์—…๋ฐ์ดํŠธ๋ผ.

7๋‹จ๊ณ„: kubelet์ด Pod ์‹คํ–‰ ๐Ÿš€
ํ•ด๋‹น ๋…ธ๋“œ์˜ kubelet์ด ์ž์‹ ์˜ ๋…ธ๋“œ์— ํ• ๋‹น๋œ ์ƒˆ Pod๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์—๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์š”์ฒญํ•ด.

8๋‹จ๊ณ„: ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๐Ÿณ
์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์ด ์ด๋ฏธ์ง€๋ฅผ pullํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ด. kubelet์€ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  API ์„œ๋ฒ„์— ๋ณด๊ณ ํ•ด.

9๋‹จ๊ณ„: kube-proxy๊ฐ€ ๋„คํŠธ์›Œํฌ ๊ทœ์น™ ์—…๋ฐ์ดํŠธ ๐ŸŒ
Service๊ฐ€ ์žˆ๋‹ค๋ฉด, kube-proxy๊ฐ€ ๋„คํŠธ์›Œํฌ ๊ทœ์น™์„ ์—…๋ฐ์ดํŠธํ•ด์„œ ํŠธ๋ž˜ํ”ฝ์ด ์ƒˆ Pod๋กœ ๋ผ์šฐํŒ…๋˜๋„๋ก ํ•ด.

์ด ๋ชจ๋“  ๊ณผ์ •์ด ๋ช‡ ์ดˆ ์•ˆ์— ์ž๋™์œผ๋กœ ์ผ์–ด๋‚˜! ์ •๋ง ๋†€๋ž์ง€? ๐Ÿ˜ฎ

๐ŸŽจ Kubernetes์˜ ํ•ต์‹ฌ ๊ฐœ๋…๋“ค

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

๐ŸŽ Pod (ํŒŒ๋“œ)

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

Pod์˜ ํŠน์ง•:
โ€ข ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง
โ€ข ๊ฐ™์€ Pod ๋‚ด ์ปจํ…Œ์ด๋„ˆ๋“ค์€ localhost๋กœ ํ†ต์‹  ๊ฐ€๋Šฅ
โ€ข ์ผ์‹œ์ (ephemeral)์ด๋ฉฐ, ์–ธ์ œ๋“  ์žฌ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Œ
โ€ข ๋ณดํ†ต ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋งŒ ํฌํ•จํ•˜์ง€๋งŒ, ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•  ์ˆ˜๋„ ์žˆ์Œ

Multi-container Pod ํŒจํ„ด:
โ€ข Sidecar: ๋ฉ”์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ณด์กฐํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ (๋กœ๊ทธ ์ˆ˜์ง‘, ํ”„๋ก์‹œ ๋“ฑ)
โ€ข Ambassador: ์™ธ๋ถ€ ์„œ๋น„์Šค์™€์˜ ํ†ต์‹ ์„ ๋Œ€ํ–‰
โ€ข Adapter: ๋ฉ”์ธ ์ปจํ…Œ์ด๋„ˆ์˜ ์ถœ๋ ฅ์„ ํ‘œ์ค€ํ™”

๐ŸŽฏ ReplicaSet (๋ ˆํ”Œ๋ฆฌ์นด์…‹)

ReplicaSet์€ ์ง€์ •๋œ ์ˆ˜์˜ Pod ๋ณต์ œ๋ณธ์ด ํ•ญ์ƒ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์•ผ. Pod๊ฐ€ ์ฃฝ์œผ๋ฉด ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด Pod๋ฅผ ์ƒ์„ฑํ•ด์„œ ์›ํ•˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ์œ ์ง€ํ•˜์ง€.

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ReplicaSet์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค๋Š”, Deployment๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ผ๋ฐ˜์ ์ด์•ผ. Deployment๊ฐ€ ReplicaSet์„ ๊ด€๋ฆฌํ•ด์ฃผ๊ฑฐ๋“ ! ๐ŸŽญ

๐Ÿš€ Deployment (๋””ํ”Œ๋กœ์ด๋จผํŠธ)

Deployment๋Š” ์„ ์–ธ์  ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ณ ์ˆ˜์ค€ ๋ฆฌ์†Œ์Šค์•ผ. ReplicaSet์„ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ๋กค๋ง ์—…๋ฐ์ดํŠธ, ๋กค๋ฐฑ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด.

Deployment์˜ ์žฅ์ :
โ€ข ์„ ์–ธ์  ์—…๋ฐ์ดํŠธ: ์›ํ•˜๋Š” ์ƒํƒœ๋งŒ ์„ ์–ธํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ฌ์„ฑ
โ€ข ๋กค๋ง ์—…๋ฐ์ดํŠธ: ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๊ฐ€๋Šฅ
โ€ข ๋กค๋ฐฑ: ์ด์ „ ๋ฒ„์ „์œผ๋กœ ์‰ฝ๊ฒŒ ๋˜๋Œ๋ฆฌ๊ธฐ
โ€ข ์Šค์ผ€์ผ๋ง: replica ์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ์กฐ์ •
โ€ข ๋ฐฐํฌ ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ

๋Œ€๋ถ€๋ถ„์˜ stateless ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Deployment๋กœ ๋ฐฐํฌํ•ด! ๐ŸŽฏ

๐ŸŒ Service (์„œ๋น„์Šค)

Service๋Š” Pod ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ์•ˆ์ •์ ์ธ ๋„คํŠธ์›Œํฌ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ด. Pod๋Š” ์–ธ์ œ๋“  ์žฌ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๊ณ  IP๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š”๋ฐ, Service๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š” IP์™€ DNS ์ด๋ฆ„์„ ์ œ๊ณตํ•˜์ง€.

Service ํƒ€์ž…:

โ€ข ClusterIP (๊ธฐ๋ณธ๊ฐ’): ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ IP
โ€ข NodePort: ๊ฐ ๋…ธ๋“œ์˜ ํŠน์ • ํฌํŠธ๋กœ ์™ธ๋ถ€ ์ ‘๊ทผ ํ—ˆ์šฉ
โ€ข LoadBalancer: ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ƒ์„ฑ
โ€ข ExternalName: ์™ธ๋ถ€ DNS ์ด๋ฆ„์œผ๋กœ ๋งคํ•‘

Service๋Š” Label Selector๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์–ด๋–ค Pod๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ํ• ์ง€ ๊ฒฐ์ •ํ•ด. ๋ผ๋ฒจ์ด ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  Pod๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ์‹œํ‚ค์ง€! ๐ŸŽช

๐Ÿ“ฆ Namespace (๋„ค์ž„์ŠคํŽ˜์ด์Šค)

Namespace๋Š” ๊ฐ€์ƒ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์•ผ. ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์  ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ํŒ€์ด๋‚˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณต์œ ํ•  ๋•Œ ์œ ์šฉํ•ด.

๊ธฐ๋ณธ Namespace:
โ€ข default: ๋ณ„๋„ ์ง€์ • ์—†์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค
โ€ข kube-system: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์Šคํ…œ ์ปดํฌ๋„ŒํŠธ์šฉ
โ€ข kube-public: ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค
โ€ข kube-node-lease: ๋…ธ๋“œ ํ•˜ํŠธ๋น„ํŠธ ์ •๋ณด ์ €์žฅ

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” dev, staging, production ๊ฐ™์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒŒ ์ผ๋ฐ˜์ ์ด์•ผ! ๐Ÿข

๐Ÿ’พ Volume (๋ณผ๋ฅจ)

Volume์€ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด์•ผ. ์ปจํ…Œ์ด๋„ˆ๋Š” ์ผ์‹œ์ ์ด๋ผ์„œ ์žฌ์‹œ์ž‘ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š”๋ฐ, Volume์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•  ์ˆ˜ ์žˆ์–ด.

์ฃผ์š” Volume ํƒ€์ž…:
โ€ข emptyDir: Pod์™€ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ™์ดํ•˜๋Š” ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ
โ€ข hostPath: ํ˜ธ์ŠคํŠธ ๋…ธ๋“œ์˜ ํŒŒ์ผ์‹œ์Šคํ…œ ๋งˆ์šดํŠธ
โ€ข persistentVolumeClaim: ์˜๊ตฌ ์Šคํ† ๋ฆฌ์ง€ ์š”์ฒญ
โ€ข configMap / secret: ์„ค์ • ๋ฐ์ดํ„ฐ ๋งˆ์šดํŠธ
โ€ข nfs, cephfs, glusterfs: ๋„คํŠธ์›Œํฌ ํŒŒ์ผ์‹œ์Šคํ…œ
โ€ข awsElasticBlockStore, gcePersistentDisk, azureDisk: ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€

ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์ฃผ๋กœ PersistentVolume๊ณผ PersistentVolumeClaim์„ ์‚ฌ์šฉํ•ด์„œ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๊ด€๋ฆฌํ•ด! ๐Ÿ’ฟ

๐Ÿ” ConfigMap & Secret

ConfigMap: ์„ค์ • ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ์ €์žฅ
Secret: ๋น„๋ฐ€๋ฒˆํ˜ธ, ํ† ํฐ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ base64 ์ธ์ฝ”๋”ฉํ•ด์„œ ์ €์žฅ

์ด ๋‘˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์™€ ์„ค์ •์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด. ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ๋‹ค๋ฅธ ์„ค์ •์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€! ๐Ÿ”‘

์ฃผ์˜: Secret์€ base64๋กœ ์ธ์ฝ”๋”ฉ๋งŒ ๋˜์–ด ์žˆ์„ ๋ฟ ์•”ํ˜ธํ™”๋Š” ๋˜์ง€ ์•Š์•„. ํ”„๋กœ๋•์…˜์—์„œ๋Š” etcd ์•”ํ˜ธํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜, ์™ธ๋ถ€ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ๋„๊ตฌ(Vault, Sealed Secrets ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์•„!

๐ŸŽ“ ๊ณ ๊ธ‰ ๊ฐœ๋…๋“ค

๊ธฐ๋ณธ ๊ฐœ๋…์„ ๋„˜์–ด์„œ, ์ข€ ๋” ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋“ค๋„ ์•Œ์•„๋ณด์ž! ์ด๋Ÿฐ ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•˜๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ํ›จ์”ฌ ๋” ๊ฐ•๋ ฅํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด. ๐Ÿ’ช

๐ŸŽญ StatefulSet (์Šคํ…Œ์ดํŠธํ’€์…‹)

StatefulSet์€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ปจํŠธ๋กค๋Ÿฌ์•ผ. Deployment์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ๊ฐ Pod์— ๊ณ ์œ ํ•œ ์‹๋ณ„์ž์™€ ์•ˆ์ •์ ์ธ ๋„คํŠธ์›Œํฌ ID๋ฅผ ์ œ๊ณตํ•ด.

StatefulSet์˜ ํŠน์ง•:
โ€ข ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋œ ๋ฐฐํฌ์™€ ์Šค์ผ€์ผ๋ง
โ€ข ์•ˆ์ •์ ์ด๊ณ  ๊ณ ์œ ํ•œ ๋„คํŠธ์›Œํฌ ์‹๋ณ„์ž
โ€ข ์•ˆ์ •์ ์ด๊ณ  ์˜๊ตฌ์ ์ธ ์Šคํ† ๋ฆฌ์ง€
โ€ข ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋œ ๋กค๋ง ์—…๋ฐ์ดํŠธ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(MySQL, PostgreSQL, MongoDB), ๋ฉ”์‹œ์ง€ ํ(Kafka, RabbitMQ) ๊ฐ™์€ stateful ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉํ•ด! ๐Ÿ—„๏ธ

โšก DaemonSet (๋ฐ๋ชฌ์…‹)

DaemonSet์€ ๋ชจ๋“  ๋…ธ๋“œ(๋˜๋Š” ํŠน์ • ๋…ธ๋“œ)์— Pod๋ฅผ ํ•˜๋‚˜์”ฉ ์‹คํ–‰ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์•ผ. ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์ž๋™์œผ๋กœ ๊ทธ ๋…ธ๋“œ์—๋„ Pod๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๋…ธ๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜๋ฉด Pod๋„ ์‚ญ์ œ๋ผ.

์‚ฌ์šฉ ์‚ฌ๋ก€:
โ€ข ๋กœ๊ทธ ์ˆ˜์ง‘ ์—์ด์ „ํŠธ (Fluentd, Logstash)
โ€ข ๋ชจ๋‹ˆํ„ฐ๋ง ์—์ด์ „ํŠธ (Prometheus Node Exporter, Datadog Agent)
โ€ข ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ
โ€ข ์Šคํ† ๋ฆฌ์ง€ ๋ฐ๋ชฌ

ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ธํ”„๋ผ ๊ด€๋ จ ์ž‘์—…์— ์™„๋ฒฝํ•ด! ๐Ÿ”ง

โฐ Job & CronJob

Job: ์ผํšŒ์„ฑ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ณ  ์™„๋ฃŒ๋˜๋ฉด ์ข…๋ฃŒ
CronJob: ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ž‘์—… (Linux cron๊ณผ ์œ ์‚ฌ)

์‚ฌ์šฉ ์‚ฌ๋ก€:
โ€ข ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ
โ€ข ๋ฐ์ดํ„ฐ ๋ฐฑ์—…
โ€ข ์ •๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ
โ€ข ๋ฆฌํฌํŠธ ์ƒ์„ฑ
โ€ข ETL ์ž‘์—…

์˜ˆ๋ฅผ ๋“ค์–ด, ๋งค์ผ ๋ฐค 12์‹œ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—…์„ ์‹คํ–‰ํ•˜๋Š” CronJob์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด! โฐ

๐ŸŒŠ Ingress (์ธ๊ทธ๋ ˆ์Šค)

Ingress๋Š” HTTP/HTTPS ๋ผ์šฐํŒ…์„ ๊ด€๋ฆฌํ•˜๋Š” API ๊ฐ์ฒด์•ผ. ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€ Service๋กœ์˜ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๊ณ , ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, SSL ์ข…๋ฃŒ, ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒ ํ˜ธ์ŠคํŒ… ๋“ฑ์„ ์ œ๊ณตํ•ด.

Ingress์˜ ๊ธฐ๋Šฅ:
โ€ข URL ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…
โ€ข ํ˜ธ์ŠคํŠธ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…
โ€ข SSL/TLS ์ข…๋ฃŒ
โ€ข ๋ฆฌ๋‹ค์ด๋ ‰์…˜
โ€ข ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

Ingress๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Ingress Controller๊ฐ€ ํ•„์š”ํ•ด. NGINX Ingress Controller, Traefik, HAProxy ๋“ฑ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ์–ด! ๐Ÿšช

์˜ˆ๋ฅผ ๋“ค์–ด, example.com/api๋Š” API ์„œ๋น„์Šค๋กœ, example.com/web์€ ์›น ์„œ๋น„์Šค๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€!

๐Ÿ“Š HorizontalPodAutoscaler (HPA)

HPA๋Š” ์ž๋™์œผ๋กœ Pod ์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด์•ผ. CPU ์‚ฌ์šฉ๋ฅ , ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ , ๋˜๋Š” ์ปค์Šคํ…€ ๋ฉ”ํŠธ๋ฆญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ Pod๋ฅผ ์ž๋™์œผ๋กœ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์—ฌ.

๋™์ž‘ ๋ฐฉ์‹:
โ€ข ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ (๊ธฐ๋ณธ 15์ดˆ)
โ€ข ํ˜„์žฌ ๋ฉ”ํŠธ๋ฆญ๊ณผ ๋ชฉํ‘œ ๋ฉ”ํŠธ๋ฆญ ๋น„๊ต
โ€ข ํ•„์š”ํ•œ replica ์ˆ˜ ๊ณ„์‚ฐ
โ€ข Deployment/ReplicaSet์˜ replica ์ˆ˜ ์กฐ์ •

์˜ˆ๋ฅผ ๋“ค์–ด, CPU ์‚ฌ์šฉ๋ฅ ์ด 70%๋ฅผ ๋„˜์œผ๋ฉด Pod๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , 30% ์ดํ•˜๋กœ ๋–จ์–ด์ง€๋ฉด Pod๋ฅผ ์ค„์ด๋Š” ์‹์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด. ํŠธ๋ž˜ํ”ฝ ๋ณ€ํ™”์— ์ž๋™์œผ๋กœ ๋Œ€์‘ํ•˜๋‹ˆ๊นŒ ์ •๋ง ํŽธ๋ฆฌํ•ด! ๐Ÿ“ˆ

๐Ÿท๏ธ Labels & Selectors

Labels๋Š” ๋ฆฌ์†Œ์Šค์— ๋ถ™์ด๋Š” ํ‚ค-๊ฐ’ ์Œ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์•ผ. Selectors๋Š” ์ด Label์„ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ณ .

Label ์˜ˆ์‹œ:
โ€ข environment: production
โ€ข tier: frontend
โ€ข app: nginx
โ€ข version: v1.2.3

Service, Deployment, NetworkPolicy ๋“ฑ ๋งŽ์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค๊ฐ€ Label Selector๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋Œ€์ƒ์„ ์ง€์ •ํ•ด. Label์„ ์ž˜ ์„ค๊ณ„ํ•˜๋ฉด ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์›Œ์ ธ! ๐Ÿท๏ธ

๐Ÿ”’ RBAC (Role-Based Access Control)

RBAC๋Š” ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด ์‹œ์Šคํ…œ์ด์•ผ. ๋ˆ„๊ฐ€ ์–ด๋–ค ๋ฆฌ์†Œ์Šค์— ์–ด๋–ค ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด.

์ฃผ์š” ๊ฐœ๋…:
โ€ข Role / ClusterRole: ๊ถŒํ•œ์˜ ์ง‘ํ•ฉ ์ •์˜
โ€ข RoleBinding / ClusterRoleBinding: ์‚ฌ์šฉ์ž/๊ทธ๋ฃน์— Role ํ• ๋‹น
โ€ข ServiceAccount: Pod๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ณ„์ •

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ RBAC๋ฅผ ์„ค์ •ํ•ด์„œ ์ตœ์†Œ ๊ถŒํ•œ ์›์น™์„ ์ ์šฉํ•ด์•ผ ํ•ด. ๋ณด์•ˆ์€ ์•„๋ฌด๋ฆฌ ๊ฐ•์กฐํ•ด๋„ ์ง€๋‚˜์น˜์ง€ ์•Š์•„! ๐Ÿ”

๐Ÿ› ๏ธ ์‹ค์ „ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด

์ด๋ก ์€ ์ถฉ๋ถ„ํžˆ ๋ฐฐ์› ์œผ๋‹ˆ, ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”์ง€ ์‹ค์ „ ํŒจํ„ด์„ ์‚ดํŽด๋ณด์ž! ๐ŸŽฏ

๐Ÿข ํ”„๋กœ๋•์…˜ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ

๊ณ ๊ฐ€์šฉ์„ฑ(HA) Control Plane: โ€ข ์ตœ์†Œ 3๊ฐœ์˜ Control Plane ๋…ธ๋“œ (ํ™€์ˆ˜ ๊ฐœ ๊ถŒ์žฅ)
โ€ข etcd ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ (3๊ฐœ ๋˜๋Š” 5๊ฐœ)
โ€ข ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•œ API ์„œ๋ฒ„ ๋ถ„์‚ฐ

Worker Node ๊ตฌ์„ฑ:
โ€ข ์›Œํฌ๋กœ๋“œ ํƒ€์ž…๋ณ„๋กœ ๋…ธ๋“œ ๊ทธ๋ฃน ๋ถ„๋ฆฌ
โ€ข Node Taints์™€ Tolerations ํ™œ์šฉ
โ€ข ๋ฆฌ์†Œ์Šค ์ฟผํ„ฐ์™€ ๋ฆฌ๋ฐ‹ ์„ค์ •

๋„คํŠธ์›Œํฌ:
โ€ข CNI ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ ํƒ (Calico, Flannel, Cilium ๋“ฑ)
โ€ข NetworkPolicy๋กœ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด
โ€ข Ingress Controller ๊ตฌ์„ฑ

์Šคํ† ๋ฆฌ์ง€:
โ€ข StorageClass ์ •์˜
โ€ข ๋™์  ํ”„๋กœ๋น„์ €๋‹ ์„ค์ •
โ€ข ๋ฐฑ์—… ์ „๋žต ์ˆ˜๋ฆฝ

๋ชจ๋‹ˆํ„ฐ๋ง & ๋กœ๊น…:
โ€ข Prometheus + Grafana๋กœ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
โ€ข EFK/ELK ์Šคํƒ์œผ๋กœ ๋กœ๊ทธ ์ˆ˜์ง‘
โ€ข Alerting ์„ค์ •

์ด๋Ÿฐ ๊ตฌ์„ฑ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ง์ ‘ ํ•˜๊ธฐ๋Š” ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์–ด. ๊ทธ๋Ÿด ๋•Œ๋Š” ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ „๋ฌธ๊ฐ€์˜ ๋„์›€์„ ๋ฐ›๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ! ์ „๋ฌธ๊ฐ€์˜ ์ปจ์„คํŒ…์„ ๋ฐ›์œผ๋ฉด ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ์ค„์ด๊ณ  ์•ˆ์ •์ ์ธ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ . ๐Ÿ˜Š

๐ŸŽจ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์–ด์šธ๋ ค! ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋…๋ฆฝ์ ์ธ Deployment๋กœ ๋ฐฐํฌํ•˜๊ณ , Service๋กœ ์—ฐ๊ฒฐํ•˜๋ฉด ๋ผ.

ํŒจํ„ด:
โ€ข ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ๋ณ„๋„์˜ Deployment
โ€ข Service Mesh (Istio, Linkerd) ๋„์ž… ๊ณ ๋ ค
โ€ข API Gateway ํŒจํ„ด ์ ์šฉ
โ€ข ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์€ Service DNS ์‚ฌ์šฉ
โ€ข ConfigMap/Secret์œผ๋กœ ์„ค์ • ๊ด€๋ฆฌ
โ€ข Namespace๋กœ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ

์˜ˆ์‹œ ๊ตฌ์กฐ:
โ€ข Frontend Service (React/Vue)
โ€ข API Gateway (Kong/Ambassador)
โ€ข Auth Service
โ€ข User Service
โ€ข Order Service
โ€ข Payment Service
โ€ข Notification Service
โ€ข Database (StatefulSet ๋˜๋Š” ์™ธ๋ถ€ ๊ด€๋ฆฌํ˜• DB)

๊ฐ ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ, ์Šค์ผ€์ผ๋ง, ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์–ด! ๐Ÿš€

๐Ÿ”„ CI/CD ํŒŒ์ดํ”„๋ผ์ธ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ CI/CD๋ฅผ ๊ฒฐํ•ฉํ•˜๋ฉด ์ง„์ •ํ•œ DevOps๋ฅผ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ์–ด!

์ผ๋ฐ˜์ ์ธ ํŒŒ์ดํ”„๋ผ์ธ:
1. ์ฝ”๋“œ ์ปค๋ฐ‹ (Git)
2. CI ์„œ๋ฒ„๊ฐ€ ๊ฐ์ง€ (Jenkins, GitLab CI, GitHub Actions)
3. ํ…Œ์ŠคํŠธ ์‹คํ–‰
4. Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ
5. ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํ‘ธ์‹œ
6. Kubernetes manifest ์—…๋ฐ์ดํŠธ
7. kubectl apply ๋˜๋Š” Helm upgrade
8. ๋กค๋ง ์—…๋ฐ์ดํŠธ ์ง„ํ–‰
9. ํ—ฌ์Šค ์ฒดํฌ ํ™•์ธ
10. ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์ž๋™ ๋กค๋ฐฑ

GitOps ํŒจํ„ด:
โ€ข ArgoCD, Flux ๊ฐ™์€ ๋„๊ตฌ ์‚ฌ์šฉ
โ€ข Git์„ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›(Single Source of Truth)์œผ๋กœ
โ€ข ์„ ์–ธ์  ๋ฐฐํฌ
โ€ข ์ž๋™ ๋™๊ธฐํ™”

GitOps๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐํฌ๊ฐ€ Git ์ปค๋ฐ‹๋งŒํผ ์‰ฌ์›Œ์ ธ! ๐ŸŽ‰

โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ๊ณผ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ผญ ์•Œ์•„์•ผ ํ•  ์ฃผ์˜์‚ฌํ•ญ๊ณผ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋ฅผ ์ •๋ฆฌํ•ด๋ดค์–ด! ์ด๊ฑธ ๋”ฐ๋ฅด๋ฉด ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ์–ด. ๐Ÿ›ก๏ธ

๐Ÿšจ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ

๋ฐ˜๋“œ์‹œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ(requests)๊ณผ ์ œํ•œ(limits)์„ ์„ค์ •ํ•˜์ž!

โ€ข requests: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ตœ์†Œ ๋ฆฌ์†Œ์Šค
โ€ข limits: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฆฌ์†Œ์Šค

์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•œ Pod๊ฐ€ ๋…ธ๋“œ์˜ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ๋…์ ํ•  ์ˆ˜ ์žˆ์–ด. ํŠนํžˆ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด OOM(Out of Memory)์œผ๋กœ ๋…ธ๋“œ ์ „์ฒด๊ฐ€ ๋‹ค์šด๋  ์ˆ˜ ์žˆ์–ด! ๐Ÿ˜ฑ

โœ… ํ—ฌ์Šค ์ฒดํฌ ์„ค์ •

Liveness Probe์™€ Readiness Probe๋ฅผ ๊ผญ ์„ค์ •ํ•˜์ž!

โ€ข Liveness Probe: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ด์•„์žˆ๋Š”์ง€ ํ™•์ธ, ์‹คํŒจํ•˜๋ฉด ์žฌ์‹œ์ž‘
โ€ข Readiness Probe: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์„ ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
โ€ข Startup Probe: ๋А๋ฆฌ๊ฒŒ ์‹œ์ž‘ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ดˆ๊ธฐ ์ฒดํฌ

์ด๊ฑธ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” Pod์—๋„ ํŠธ๋ž˜ํ”ฝ์ด ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์–ด!

๐ŸŽฏ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๋ณด์•ˆ:
โœ“ ์ตœ์†Œ ๊ถŒํ•œ ์›์น™ ์ ์šฉ (RBAC)
โœ“ Pod Security Policy/Standards ์‚ฌ์šฉ
โœ“ ์ปจํ…Œ์ด๋„ˆ๋ฅผ root๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ธฐ
โœ“ ์ด๋ฏธ์ง€ ์Šค์บ” (Trivy, Clair)
โœ“ Secret ์•”ํ˜ธํ™”
โœ“ NetworkPolicy๋กœ ํŠธ๋ž˜ํ”ฝ ์ œํ•œ

์•ˆ์ •์„ฑ:
โœ“ ์—ฌ๋Ÿฌ replica ์‹คํ–‰ (์ตœ์†Œ 2๊ฐœ ์ด์ƒ)
โœ“ PodDisruptionBudget ์„ค์ •
โœ“ Anti-affinity ๊ทœ์น™์œผ๋กœ Pod ๋ถ„์‚ฐ
โœ“ ๋ฆฌ์†Œ์Šค ์ฟผํ„ฐ ์„ค์ •
โœ“ ์ •๊ธฐ์ ์ธ ๋ฐฑ์—…

์„ฑ๋Šฅ:
โœ“ HPA๋กœ ์ž๋™ ์Šค์ผ€์ผ๋ง
โœ“ ์ ์ ˆํ•œ ๋ฆฌ์†Œ์Šค ํ• ๋‹น
โœ“ ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ตœ์ ํ™”
โœ“ ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ ์‚ฌ์šฉ
โœ“ ์บ์‹ฑ ์ „๋žต ํ™œ์šฉ

์šด์˜:
โœ“ ์˜๋ฏธ ์žˆ๋Š” Label ์‚ฌ์šฉ
โœ“ Annotation์œผ๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
โœ“ ๋ช…ํ™•ํ•œ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜
โœ“ ๋ฒ„์ „ ๊ด€๋ฆฌ (Git)
โœ“ ๋ฌธ์„œํ™”
โœ“ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์•Œ๋ฆผ ์„ค์ •

๐ŸŒŸ Kubernetes ์ƒํƒœ๊ณ„

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ž์ฒด๋„ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ์ฃผ๋ณ€ ์ƒํƒœ๊ณ„๊ฐ€ ๋”์šฑ ํ’๋ถ€ํ•ด! ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ์ธ๊ธฐ ์žˆ๋Š” ๋„๊ตฌ๋“ค์„ ์†Œ๊ฐœํ• ๊ฒŒ. ๐Ÿ› ๏ธ

๐Ÿ“ฆ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ

Helm: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €. ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฐจํŠธ(Chart)๋กœ ํŒจํ‚ค์ง•ํ•ด์„œ ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด. apt๋‚˜ yum ๊ฐ™์€ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ!

Kustomize: YAML ํŒŒ์ผ์„ ํ…œํ”Œ๋ฆฟ ์—†์ด ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ๋„๊ตฌ. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด์„œ kubectl๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด.

๐Ÿ” ๋ชจ๋‹ˆํ„ฐ๋ง & ๋กœ๊น…

Prometheus: ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘๊ณผ ์•Œ๋ฆผ์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ
Grafana: ๋ฉ”ํŠธ๋ฆญ ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ
ELK/EFK Stack: ๋กœ๊ทธ ์ˆ˜์ง‘, ์ €์žฅ, ๋ถ„์„ (Elasticsearch, Logstash/Fluentd, Kibana)
Jaeger/Zipkin: ๋ถ„์‚ฐ ์ถ”์ (Distributed Tracing)

๐ŸŒ Service Mesh

Istio: ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์„œ๋น„์Šค ๋ฉ”์‹œ. ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ, ๋ณด์•ˆ, ๊ด€์ฐฐ์„ฑ ์ œ๊ณต
Linkerd: ๊ฒฝ๋Ÿ‰ ์„œ๋น„์Šค ๋ฉ”์‹œ. Istio๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฆ„
Consul: HashiCorp์˜ ์„œ๋น„์Šค ๋ฉ”์‹œ ์†”๋ฃจ์…˜

์„œ๋น„์Šค ๋ฉ”์‹œ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•˜๊ณ , ํŠธ๋ž˜ํ”ฝ ์ œ์–ด, ๋ณด์•ˆ, ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ œ๊ณตํ•ด!

๐Ÿ” ๋ณด์•ˆ

Falco: ๋Ÿฐํƒ€์ž„ ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง
OPA (Open Policy Agent): ์ •์ฑ… ๊ธฐ๋ฐ˜ ์ œ์–ด
Vault: ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ
Cert-Manager: TLS ์ธ์ฆ์„œ ์ž๋™ ๊ด€๋ฆฌ
Trivy: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ทจ์•ฝ์  ์Šค์บ”

๐Ÿš€ CI/CD

ArgoCD: GitOps ๊ธฐ๋ฐ˜ ์ง€์†์  ๋ฐฐํฌ
Flux: GitOps ๋„๊ตฌ
Tekton: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„ค์ดํ‹ฐ๋ธŒ CI/CD
Jenkins X: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์šฉ Jenkins
Spinnaker: ๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ ํ”Œ๋žซํผ

๐ŸŽ›๏ธ ๊ด€๋ฆฌ ๋„๊ตฌ

Lens: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค IDE. ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ๊ฐ€ ์ •๋ง ํŽธํ•ด์ ธ!
K9s: ํ„ฐ๋ฏธ๋„ ๊ธฐ๋ฐ˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค UI
Octant: VMware์˜ ์›น ๊ธฐ๋ฐ˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋Œ€์‹œ๋ณด๋“œ
Rancher: ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ ํ”Œ๋žซํผ
Kubeapps: ์›น ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๋„๊ตฌ

๐ŸŽ“ ํ•™์Šต ๋กœ๋“œ๋งต

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ํ•™์Šต ๋กœ๋“œ๋งต์„ ๋งŒ๋“ค์–ด๋ดค์–ด! ๋‹จ๊ณ„๋ณ„๋กœ ๋”ฐ๋ผ๊ฐ€๋ฉด ์ฒด๊ณ„์ ์œผ๋กœ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ. ๐Ÿ“š

๐ŸŒฑ ์ดˆ๊ธ‰ ๋‹จ๊ณ„ (1-2๊ฐœ์›”)

1. ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ดˆ
โ€ข Docker ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋ช…๋ น์–ด
โ€ข ์ด๋ฏธ์ง€ ๋นŒ๋“œ์™€ Dockerfile
โ€ข ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํ‚น๊ณผ ๋ณผ๋ฅจ

2. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ธฐ์ดˆ
โ€ข ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด
โ€ข Minikube๋‚˜ Kind๋กœ ๋กœ์ปฌ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ
โ€ข kubectl ๊ธฐ๋ณธ ๋ช…๋ น์–ด
โ€ข Pod, Deployment, Service ์ƒ์„ฑ

3. ์‹ค์Šต
โ€ข ๊ฐ„๋‹จํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ
โ€ข ์Šค์ผ€์ผ๋ง ์‹ค์Šต
โ€ข ๋กค๋ง ์—…๋ฐ์ดํŠธ์™€ ๋กค๋ฐฑ

๐ŸŒฟ ์ค‘๊ธ‰ ๋‹จ๊ณ„ (2-3๊ฐœ์›”)

1. ๊ณ ๊ธ‰ ๋ฆฌ์†Œ์Šค
โ€ข StatefulSet, DaemonSet, Job
โ€ข ConfigMap๊ณผ Secret
โ€ข PersistentVolume๊ณผ PersistentVolumeClaim
โ€ข Ingress์™€ Ingress Controller

2. ๋„คํŠธ์›Œํ‚น
โ€ข Service ํƒ€์ž…๋ณ„ ํŠน์ง•
โ€ข NetworkPolicy
โ€ข DNS์™€ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ

3. ์Šคํ† ๋ฆฌ์ง€
โ€ข StorageClass
โ€ข ๋™์  ํ”„๋กœ๋น„์ €๋‹
โ€ข ๋‹ค์–‘ํ•œ ๋ณผ๋ฅจ ํƒ€์ž…

4. ๋ณด์•ˆ
โ€ข RBAC
โ€ข Pod Security
โ€ข ๋„คํŠธ์›Œํฌ ์ •์ฑ…

5. ์‹ค์Šต
โ€ข ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ
โ€ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฐํฌ (StatefulSet)
โ€ข Ingress๋กœ ๋ผ์šฐํŒ… ์„ค์ •

๐ŸŒณ ๊ณ ๊ธ‰ ๋‹จ๊ณ„ (3-6๊ฐœ์›”)

1. ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ
โ€ข ๊ณ ๊ฐ€์šฉ์„ฑ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ
โ€ข ์—…๊ทธ๋ ˆ์ด๋“œ ์ „๋žต
โ€ข ๋ฐฑ์—…๊ณผ ๋ณต๊ตฌ
โ€ข ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ์™€ ์ตœ์ ํ™”

2. ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ
โ€ข Custom Resource Definition (CRD)
โ€ข Operator ํŒจํ„ด
โ€ข Admission Controllers
โ€ข HPA์™€ VPA

3. ์ƒํƒœ๊ณ„ ๋„๊ตฌ
โ€ข Helm
โ€ข Service Mesh (Istio/Linkerd)
โ€ข GitOps (ArgoCD/Flux)
โ€ข ๋ชจ๋‹ˆํ„ฐ๋ง ์Šคํƒ ๊ตฌ์ถ•

4. ํ”„๋กœ๋•์…˜ ์šด์˜
โ€ข ๋กœ๊น…๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง
โ€ข ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
โ€ข ์„ฑ๋Šฅ ํŠœ๋‹
โ€ข ์žฌํ•ด ๋ณต๊ตฌ ๊ณ„ํš

5. ์‹ค์Šต
โ€ข ํ”„๋กœ๋•์…˜๊ธ‰ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์ถ•
โ€ข CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ
โ€ข ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ
โ€ข ์‹ค์ œ ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ

๐Ÿ’ก ํ•™์Šต ํŒ: โ€ข ์ด๋ก ๋งŒ ๊ณต๋ถ€ํ•˜์ง€ ๋ง๊ณ  ๋ฐ˜๋“œ์‹œ ์ง์ ‘ ์‹ค์Šตํ•˜์ž!
โ€ข ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ž์ฃผ ์ฐธ๊ณ ํ•˜์ž (kubernetes.io)
โ€ข ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ฐธ์—ฌํ•˜์ž (Slack, Reddit, Stack Overflow)
โ€ข CKA(Certified Kubernetes Administrator) ์ž๊ฒฉ์ฆ ์ค€๋น„๋„ ์ข‹์€ ํ•™์Šต ๋ฐฉ๋ฒ•!
โ€ข ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•ด๋ณด์ž

ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ์žฌ๋Šฅ๋„ท์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ „๋ฌธ๊ฐ€์—๊ฒŒ ๋ฉ˜ํ† ๋ง์„ ๋ฐ›๋Š” ๊ฒƒ๋„ ์ถ”์ฒœํ•ด! ์‹ค๋ฌด ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ ์ „๋ฌธ๊ฐ€์˜ ๊ฐ€์ด๋“œ๋ฅผ ๋ฐ›์œผ๋ฉด ํ•™์Šต ์†๋„๊ฐ€ ํ›จ์”ฌ ๋นจ๋ผ์งˆ ๊ฑฐ์•ผ. ๐Ÿ˜Š

๐Ÿ”ฎ Kubernetes์˜ ๋ฏธ๋ž˜

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๊ณ„์† ์ง„ํ™”ํ•˜๊ณ  ์žˆ์–ด! ์•ž์œผ๋กœ ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐœ์ „ํ• ์ง€ ์‚ดํŽด๋ณด์ž. ๐Ÿš€

๐ŸŽฏ ์ฃผ์š” ํŠธ๋ Œ๋“œ

1. Edge Computing ์ง€์› ๊ฐ•ํ™”
K3s, MicroK8s ๊ฐ™์€ ๊ฒฝ๋Ÿ‰ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฐฐํฌํŒ์ด ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ์žˆ์–ด. IoT ๋””๋ฐ”์ด์Šค๋‚˜ ์—ฃ์ง€ ํ™˜๊ฒฝ์—์„œ๋„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์ง€!

2. Serverless์™€์˜ ํ†ตํ•ฉ
Knative ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์œ„์—์„œ ์„œ๋ฒ„๋ฆฌ์Šค ์›Œํฌ๋กœ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด. FaaS(Function as a Service)์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ์žฅ์ ์„ ๋ชจ๋‘ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์ง€!

3. ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ
์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ•˜๋‚˜์ฒ˜๋Ÿผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์–ด. Cluster API, KubeFed ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด.

4. AI/ML ์›Œํฌ๋กœ๋“œ ์ง€์›
Kubeflow ๊ฐ™์€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋จธ์‹ ๋Ÿฌ๋‹ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด. GPU ์Šค์ผ€์ค„๋ง๋„ ์ ์  ๋” ์ •๊ตํ•ด์ง€๊ณ  ์žˆ์ง€!

5. ๋ณด์•ˆ ๊ฐ•ํ™”
Zero Trust ๋„คํŠธ์›Œํ‚น, ๋Ÿฐํƒ€์ž„ ๋ณด์•ˆ, ์ •์ฑ… ๊ธฐ๋ฐ˜ ์ œ์–ด ๋“ฑ ๋ณด์•ˆ ๊ธฐ๋Šฅ์ด ๊ณ„์† ๊ฐ•ํ™”๋˜๊ณ  ์žˆ์–ด.

6. ์‚ฌ์šฉ์„ฑ ๊ฐœ์„ 
๋ณต์žกํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๋„๊ตฌ์™€ ์ถ”์ƒํ™” ๋ ˆ์ด์–ด๊ฐ€ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์–ด. ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜(DX)์ด ์ ์  ์ข‹์•„์ง€๊ณ  ์žˆ์ง€!

๐ŸŽฌ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

์™€! ์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ์—ˆ๋‹ค๋ฉด ์ •๋ง ๋Œ€๋‹จํ•ด! ๐Ÿ‘ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์•„ํ‚คํ…์ฒ˜๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ๊ฐœ๋…, ์‹ค์ „ ํŒจํ„ด๊นŒ์ง€ ์ •๋ง ๋งŽ์€ ๋‚ด์šฉ์„ ๋‹ค๋ค˜์–ด.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ฒ˜์Œ์—๋Š” ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ, ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ๊ณผ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋ฉด ์ •๋ง ๋…ผ๋ฆฌ์ ์ด๊ณ  ๋ฉ‹์ง„ ์‹œ์Šคํ…œ์ด๋ผ๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์–ด. Control Plane์ด ๋‘๋‡Œ ์—ญํ• ์„ ํ•˜๊ณ , Worker Node๋“ค์ด ์‹ค์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋Š” ์ •๋ง ํšจ์œจ์ ์ด์ง€! ๐Ÿง ๐Ÿ’ช

ํ•ต์‹ฌ ํฌ์ธํŠธ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ฆฌํ•˜๋ฉด:

1. Control Plane: API Server, etcd, Scheduler, Controller Manager๋กœ ๊ตฌ์„ฑ๋˜์–ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌ
2. Worker Nodes: kubelet, kube-proxy, Container Runtime์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์‹ค์ œ ์›Œํฌ๋กœ๋“œ ์‹คํ–‰
3. ํ•ต์‹ฌ ๋ฆฌ์†Œ์Šค: Pod, Deployment, Service, ConfigMap, Secret ๋“ฑ์„ ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉ
4. ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ: StatefulSet, Ingress, HPA ๋“ฑ์œผ๋กœ ๋” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
5. ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค: ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ, ํ—ฌ์Šค ์ฒดํฌ, ๋ณด์•ˆ ์„ค์ •์€ ํ•„์ˆ˜!

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ๊ณ„์† ์ง„ํ™”ํ•˜๊ณ  ์žˆ๊ณ , ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์ƒํƒœ๊ณ„์˜ ์ค‘์‹ฌ์ด ๋˜์—ˆ์–ด. ์ด์ œ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์˜ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€(de facto standard)์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์ง€. ๐ŸŒŸ

์ฒ˜์Œ์—๋Š” ์–ด๋ ต๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•˜๋‚˜์”ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์›Œ๋‚˜๊ฐ€๋ฉด ๋ถ„๋ช…ํžˆ ๋งˆ์Šคํ„ฐํ•  ์ˆ˜ ์žˆ์–ด! ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๊ณ , ์ง์ ‘ ์‹ค์Šตํ•˜๊ณ , ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ฐธ์—ฌํ•˜๋ฉด์„œ ์‹ค๋ ฅ์„ ํ‚ค์›Œ๋‚˜๊ฐ€์ž. ๐Ÿ’ช

๊ทธ๋ฆฌ๊ณ  ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๊ธฐ ๋ง‰๋ง‰ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์— ๋ฐ”๋กœ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์ „๋ฌธ๊ฐ€์˜ ๋„์›€์„ ๋ฐ›๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์•ผ. ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ์ค„์ด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๊ฑฐ๋“ !

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ํ•จ๊ป˜ ๋ฉ‹์ง„ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์—ฌ์ •์„ ์‹œ์ž‘ํ•ด๋ณด์ž! ํ™”์ดํŒ…! ๐Ÿš€โœจ

๐ŸŽฏ ๋‹ค์Œ ๋‹จ๊ณ„๋Š”?

์ด์ œ ์ง์ ‘ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•ด๋ณด์ž!
Minikube๋‚˜ Kind๋กœ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜,
ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž์˜ ๊ด€๋ฆฌํ˜• ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์•„!

Happy Kubernetes Journey! ๐ŸŽ‰

๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0
๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.