๐ข ์ฟ ๋ฒ๋คํฐ์ค(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๏ธโฃ ๊ฒฐ๋ก : ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ ๋๋ก ์ดํดํด์ผ ํ๋ ์ด์
์ฟ ๋ฒ๋คํฐ์ค๋ ๋จ์ํ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๊ฐ ์๋๋ค.
๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ๋๋ก ์ดํดํ๋ฉด, ๋์ฑ ์์ ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์๋น์ค๋ฅผ ์ด์ํ ์ ์๋ค.
๐ “์ด์ ์ฟ ๋ฒ๋คํฐ์ค์ ๊ตฌ์กฐ๊ฐ ๋ณด์ธ๋ค!”
๐ท ์ ์ค์ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ด ์๋น! ๐ท
'Dev-ops' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐จ Sentry ์๋ฒฝ ๊ฐ์ด (0) | 2025.04.01 |
---|---|
๐ดโโ ๏ธ Bitbucket ์๋ฒฝ ๊ฐ์ด๋ (0) | 2025.03.31 |
๐ Heroku ์๋ฒฝ ๊ฐ์ด๋ (0) | 2025.03.30 |
๐ GCP (Google Cloud Platform) (0) | 2025.03.29 |
๐ GitLab ์๋ฒฝ ๊ฐ์ด๋ (0) | 2025.03.28 |