Kubernetes๋?
๐ฅ ๋ค์ด๊ฐ๋ฉฐ
์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ํ๋ค ๋ณด๋ฉด ๋จ์ํ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋ถ์กฑํ๋ค. ์๋น์ค๊ฐ ์ฃฝ์์ ๋ ๋ค์ ๋์์ผ ํ๊ณ , ํธ๋ํฝ์ด ๋์ด๋๋ฉด ์ธ์คํด์ค๋ฅผ ๋๋ ค์ผ ํ๋ฉฐ, ๋ฐฐํฌ ์ค์๋ ์ฌ์ฉ์๊ฐ ์๋น์ค๋ฅผ ๊ณ์ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค.
Kubernetes๋ ์ด๋ฐ ์ปจํ ์ด๋ ์ด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๋ค. ์ด๋ฒ ๊ธ์์๋ Kubernetes๊ฐ ์ ํ์ํ์ง, ์ด๋ค ๊ตฌ์กฐ๋ก ๋์ํ๋์ง, ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์๋ ๋ฌด์์ธ์ง ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค. ๊ทธ๋ฆฌ๊ณ MSA ํ๊ฒฝ์์ Kubernetes์ Service Discovery, Circuit Breaker, Sidecar, Service Mesh๊ฐ ์ด๋ป๊ฒ ์ด์ด์ง๋์ง๋ ํจ๊ป ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
์ด์ ์ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์ด ํ์ํ์ ๋๋ Kubernetes ๋์ Docker Swarm์ ์ฌ์ฉํ์๋ค. ๋น์์๋ Kubernetes๊ฐ ๋๋ฌด ๋ฌด๊ฒ๊ฒ ๋๊ปด์ก๊ณ , ์์ ๊ท๋ชจ์ ์๋น์ค์์๋ Swarm์ด ํจ์ฌ ๋จ์ํ๊ฒ ์์ํ ์ ์์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฒ์๋ Docker Swarm๊ณผ ๋น๊ตํ๋ฉด์ Kubernetes๊ฐ ์ด๋ค ๋ฌธ์ ๋ฅผ ๋ ๋์ ๋ฒ์์์ ํด๊ฒฐํ๋ ค๋์ง๋ ํจ๊ป ์ดํด๋ณด๋ ค ํ๋ค.
Kubernetes๋?
Kubernetes๋ ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ, ํ์ฅ, ๊ด๋ฆฌํ๊ธฐ ์ํ ์คํ์์ค ํ๋ซํผ์ด๋ค.
Docker ๊ฐ์ ์ปจํ ์ด๋ ๋ฐํ์์ด ์ปจํ ์ด๋ ํ๋๋ฅผ ์คํํ๋ ๋ฐ ์ด์ ์ด ์๋ค๋ฉด, Kubernetes๋ ์ฌ๋ฌ ์๋ฒ ์์์ ์๋ง์ ์ปจํ ์ด๋๋ฅผ ์์ ์ ์ผ๋ก ์ด์ํ๋ ๋ฐ ์ด์ ์ด ์๋ค.
Kubernetes๋ ๋ณดํต k8s๋ผ๊ณ ์ค์ฌ ๋ถ๋ฅธ๋ค. Kubernetes์์ K์ s ์ฌ์ด์ 8๊ฐ์ ๊ธ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
Kubernetes๊ฐ ํ์ํ ์ด์
์ปจํ ์ด๋๋ฅผ ์ง์ ์ด์ํ๋ค๊ณ ์๊ฐํด๋ณด์.
- ์ปจํ ์ด๋๊ฐ ์ฃฝ์ผ๋ฉด ๋๊ฐ ๋ค์ ์คํํ ๊น?
- ์๋ฒ ํ ๋์ ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๋ฉด ์ด๋ป๊ฒ ๋ถ์ฐํ ๊น?
- ์๋ก์ด ๋ฒ์ ์ ๋ฐฐํฌํ ๋ ๊ธฐ์กด ์์ฒญ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น?
- ํน์ ์๋ฒ๊ฐ ์ฅ์ ๋๋ฉด ๊ทธ ์์ ์ปจํ ์ด๋๋ ์ด๋ป๊ฒ ๋ณต๊ตฌํ ๊น?
- ์ปจํ ์ด๋๊ฐ ๋ง์์ก์ ๋ ์ค์ ๊ณผ ๋คํธ์ํฌ๋ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊น?
Kubernetes๋ ์ด๋ฐ ์ด์ ์์ ์ ์๋ํํ๋ค. ์ฌ์ฉ์๋ ์ํ๋ ์ํ๋ฅผ ์ ์ธํ๊ณ , Kubernetes๋ ์ค์ ์ํ๊ฐ ๊ทธ ์ ์ธ๊ณผ ๊ฐ์์ง๋๋ก ๊ณ์ ์กฐ์ ํ๋ค.
ํต์ฌ ๊ฐ๋ : Desired State
Kubernetes์ ์ค์ํ ํน์ง์ Desired State ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค๋ ์ ์ด๋ค.
์๋ฅผ ๋ค์ด โnginx ์ปจํ ์ด๋๋ฅผ 3๊ฐ ์คํํ๊ณ ์ถ๋คโ๊ณ ์ ์ธํ๋ฉด Kubernetes๋ ํ์ฌ ์ํ๋ฅผ ํ์ธํ๋ค. ์ค์ ๋ก 2๊ฐ๋ง ๋ ์๋ค๋ฉด 1๊ฐ๋ฅผ ๋ ๋์ฐ๊ณ , 4๊ฐ๊ฐ ๋ ์๋ค๋ฉด 1๊ฐ๋ฅผ ์ค์ธ๋ค.
์ฆ, Kubernetes๋ ๋ช ๋ น์ ํ ๋ฒ ์คํํ๊ณ ๋๋๋ ๋ฐฉ์์ด ์๋๋ผ, ์ํ๋ ์ํ์ ํ์ฌ ์ํ๋ฅผ ๊ณ์ ๋น๊ตํ๋ฉฐ ๋ง์ถฐ๊ฐ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
Kubernetes ๊ตฌ์กฐ
Kubernetes ํด๋ฌ์คํฐ๋ ํฌ๊ฒ Control Plane๊ณผ Worker Node๋ก ๋๋๋ค.
flowchart TB
User[User / kubectl] --> APIServer[API Server]
APIServer --> Scheduler[Scheduler]
APIServer --> Controller[Controller Manager]
APIServer --> Etcd[etcd]
Scheduler --> Node1[Worker Node]
Scheduler --> Node2[Worker Node]
Node1 --> Pod1[Pod]
Node1 --> Pod2[Pod]
Node2 --> Pod3[Pod]
Control Plane
Control Plane์ ํด๋ฌ์คํฐ ์ ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ์์ญ์ด๋ค.
| Component | Description |
|---|---|
| API Server | Kubernetes ํด๋ฌ์คํฐ์ ํต์ ํ๋ ์ง์ ์ |
| etcd | ํด๋ฌ์คํฐ ์ํ๋ฅผ ์ ์ฅํ๋ key-value ์ ์ฅ์ |
| Scheduler | Pod๋ฅผ ์ด๋ค Node์ ๋ฐฐ์นํ ์ง ๊ฒฐ์ |
| Controller Manager | ์ํ๋ ์ํ์ ํ์ฌ ์ํ๋ฅผ ๋น๊ตํ๊ณ ์กฐ์ |
Worker Node
Worker Node๋ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋๊ฐ ์คํ๋๋ ์๋ฒ๋ค.
| Component | Description |
|---|---|
| kubelet | Node์์ Pod ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์์ด์ ํธ |
| kube-proxy | Kubernetes ๋คํธ์ํฌ ๊ท์น์ ๊ด๋ฆฌ |
| Container Runtime | ์ปจํ ์ด๋๋ฅผ ์ค์ ๋ก ์คํํ๋ ๋ฐํ์ |
์ฃผ์ ๋ฆฌ์์ค
Kubernetes์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ฆฌ์์ค๋ก ํํํ๋ค.
| Resource | Description |
|---|---|
| Pod | Kubernetes์์ ์คํ๋๋ ๊ฐ์ฅ ์์ ๋ฐฐํฌ ๋จ์ |
| ReplicaSet | ์ง์ ํ ๊ฐ์๋งํผ Pod๊ฐ ์ ์ง๋๋๋ก ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค |
| Deployment | Pod ๋ฐฐํฌ, ์ ๋ฐ์ดํธ, ๋กค๋ฐฑ์ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค |
| Service | Pod์ ์ ๊ทผํ๊ธฐ ์ํ ๊ณ ์ ๋ ๋คํธ์ํฌ ์ง์ ์ |
| Ingress | ํด๋ฌ์คํฐ ์ธ๋ถ HTTP/HTTPS ์์ฒญ์ ๋ด๋ถ Service๋ก ๋ผ์ฐํ |
| ConfigMap | ์ ํ๋ฆฌ์ผ์ด์ ์ค์ ๊ฐ์ ์ ์ฅํ๋ ๋ฆฌ์์ค |
| Secret | ๋น๋ฐ๋ฒํธ, ํ ํฐ ๊ฐ์ ๋ฏผ๊ฐํ ๊ฐ์ ์ ์ฅํ๋ ๋ฆฌ์์ค |
| Volume | Pod๊ฐ ์ฌ์ฉํ ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฆฌ์์ค |
| Namespace | ํด๋ฌ์คํฐ ์์ ๋ฆฌ์์ค๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌํ๋ ๋จ์ |
Pod
Pod๋ Kubernetes์์ ๋ฐฐํฌํ ์ ์๋ ๊ฐ์ฅ ์์ ์คํ ๋จ์๋ค. ํ๋ ์ด์์ ์ปจํ ์ด๋๋ฅผ ํฌํจํ ์ ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ํ๋์ Pod์๋ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋๋ฅผ ๋๋ค.
Pod ์์ ์ปจํ
์ด๋๋ค์ ๊ฐ์ ๋คํธ์ํฌ namespace์ volume์ ๊ณต์ ํ๋ค. ๊ทธ๋์ ๊ฐ์ Pod ์์์๋ localhost๋ก ์๋ก ํต์ ํ ์ ์๊ณ , ๊ฐ์ ํ์ผ ์์คํ
์ผ๋ถ๋ฅผ ๊ณต์ ํ ์๋ ์๋ค.
1
2
3
4
5
6
7
8
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
Sidecar Container
Pod๋ ํ๋ ์ด์์ ์ปจํ ์ด๋๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ด๋ ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋ ์์์ ๋ณด์กฐ ์ญํ ์ ํ๋ ์ปจํ ์ด๋๋ฅผ Sidecar Container๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์๋ฅผ ๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , sidecar ์ปจํ ์ด๋๊ฐ ๋ก๊ทธ ์์ง, ํ๋ก์, ์ธ์ฆ, ์ค์ ๋๊ธฐํ ๊ฐ์ ์ผ์ ๋งก์ ์ ์๋ค. ๋ ์ปจํ ์ด๋๋ ๊ฐ์ Pod ์์ ์๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ์ volume์ ๊ณต์ ํ๋ฉด์ ์๋ก ๊ฐ๊น๊ฒ ํ๋ ฅํ ์ ์๋ค.
1
2
3
4
5
6
7
8
9
10
apiVersion: v1
kind: Pod
metadata:
name: app-with-sidecar
spec:
containers:
- name: app
image: my-app:latest
- name: log-sidecar
image: fluent-bit:latest
Sidecar ํจํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์ง์ ๋ฃ๊ธฐ ์ ๋งคํ ๊ณตํต ๊ธฐ๋ฅ์ ์ปจํ ์ด๋ ๋จ์๋ก ๋ถ๋ฆฌํ ๋ ์ ์ฉํ๋ค. Service Mesh์์ ํ๋ก์ ์ปจํ ์ด๋๋ฅผ ๋ถ์ด๋ ๋ฐฉ์๋ ๋ํ์ ์ธ sidecar ํ์ฉ ์์๋ค.
Deployment
Deployment๋ Pod๋ฅผ ์ ์ธํ ๊ฐ์๋งํผ ์ ์งํ๊ณ , ๋ฐฐํฌ์ ๋กค๋ฐฑ์ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค๋ค.
Pod๋ฅผ ์ง์ ์์ฑํ ์๋ ์์ง๋ง ์ค์ ์ด์์์๋ ๋ณดํต Deployment๋ฅผ ํตํด Pod๋ฅผ ๊ด๋ฆฌํ๋ค.
ReplicaSet
ReplicaSet์ ํน์ Pod๊ฐ ์ํ๋ ๊ฐ์๋งํผ ์คํ๋๋๋ก ๋ณด์ฅํ๋ค. ์๋ฅผ ๋ค์ด replica๋ฅผ 3์ผ๋ก ์ค์ ํ๋๋ฐ Pod ํ๋๊ฐ ์ฃฝ์ผ๋ฉด ReplicaSet์ด ์ Pod๋ฅผ ๋ง๋ค์ด ๋ค์ 3๊ฐ๋ฅผ ๋ง์ถ๋ค.
์ผ๋ฐ์ ์ผ๋ก ReplicaSet์ ์ง์ ๋ค๋ฃจ๊ธฐ๋ณด๋ค๋ Deployment๊ฐ ๋ด๋ถ์ ์ผ๋ก ReplicaSet์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ค.
Service
Pod๋ ์ธ์ ๋ ์๋ก ์์ฑ๋๊ฑฐ๋ ์ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ IP๊ฐ ๊ณ ์ ์ ์ด์ง ์๋ค. Service๋ ์ด๋ฐ Pod๋ค์ ์์ ์ ์ธ ์ ๊ทผ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๋ค.
์๋ฅผ ๋ค์ด Deployment๊ฐ ๊ด๋ฆฌํ๋ Pod๊ฐ ๊ต์ฒด๋๋๋ผ๋ Service ์ด๋ฆ์ ์ ์ง๋๋ค. ํด๋ผ์ด์ธํธ๋ ๋งค๋ฒ ๋ฐ๋๋ Pod IP๋ฅผ ์ ํ์ ์์ด Service๋ฅผ ํตํด ์ ๊ทผํ๋ฉด ๋๋ค.
Service์๋ ๋ํ์ ์ผ๋ก ClusterIP, NodePort, LoadBalancer ํ์
์ด ์๋ค.
| Type | Description |
|---|---|
| ClusterIP | ํด๋ฌ์คํฐ ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ๊ธฐ๋ณธ Service ํ์ |
| NodePort | ๊ฐ Node์ ํน์ port๋ฅผ ํตํด ์ธ๋ถ์์ ์ ๊ทผ |
| LoadBalancer | ํด๋ผ์ฐ๋ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ํตํด ์ธ๋ถ ํธ๋ํฝ์ Service๋ก ์ ๋ฌ |
Ingress
Ingress๋ ํด๋ฌ์คํฐ ์ธ๋ถ์ HTTP/HTTPS ์์ฒญ์ ๋ด๋ถ Service๋ก ์ฐ๊ฒฐํ๋ ๋ฆฌ์์ค๋ค.
Service๊ฐ Pod ์๋จ์ ๊ณ ์ ์ง์ ์ ์ด๋ผ๋ฉด, Ingress๋ ์ฌ๋ฌ Service ์์์ ๋๋ฉ์ธ์ด๋ ๊ฒฝ๋ก ๊ธฐ๋ฐ ๋ผ์ฐํ ์ ๋ด๋นํ๋ค.
์๋ฅผ ๋ค์ด ์๋์ฒ๋ผ ์์ฒญ์ ๋๋ ์ ์๋ค.
| Request | Service |
|---|---|
api.example.com/users | user-service |
api.example.com/orders | order-service |
Ingress ์์ฒด๋ ๊ท์น์ด๊ณ , ์ค์ ํธ๋ํฝ ์ฒ๋ฆฌ๋ Nginx Ingress Controller ๊ฐ์ Ingress Controller๊ฐ ๋ด๋นํ๋ค.
Network
Kubernetes ๋คํธ์ํฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ ์์น์ ๊ฐ์ง๋ค.
- Pod๋ ๊ณ ์ ํ IP๋ฅผ ๊ฐ์ง๋ค.
- Pod๋ผ๋ฆฌ๋ NAT ์์ด ์๋ก ํต์ ํ ์ ์์ด์ผ ํ๋ค.
- Node๊ฐ ๋ฌ๋ผ๋ Pod๋ผ๋ฆฌ ํต์ ํ ์ ์์ด์ผ ํ๋ค.
- Service๋ ์ฌ๋ฌ Pod ์์ ๊ณ ์ ๋ ์ ๊ทผ ์ง์ ์ ์ ๊ณตํ๋ค.
Pod๋ ์์ฑ๋๊ณ ์ญ์ ๋ ๋๋ง๋ค IP๊ฐ ๋ฐ๋ ์ ์๋ค. ๊ทธ๋์ ์ด์์์๋ Pod IP์ ์ง์ ์์กดํ๊ธฐ๋ณด๋ค Service, Ingress ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ํตํด ์ ๊ทผํ๋ค.
Volume
Pod ์์ ์ปจํ ์ด๋ ํ์ผ ์์คํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ์์ ์ด๋ค. ์ปจํ ์ด๋๊ฐ ์ฌ์์๋๊ฑฐ๋ Pod๊ฐ ์๋ก ๋ง๋ค์ด์ง๋ฉด ๋ด๋ถ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง ์ ์๋ค.
Volume์ Pod์ ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํ๊ฑฐ๋ ์ปจํ ์ด๋ ๊ฐ ํ์ผ์ ๊ณต์ ํ ๋ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด ๋ฉ์ธ ์ปจํ ์ด๋๊ฐ ๋ก๊ทธ ํ์ผ์ Volume์ ์ฐ๊ณ , sidecar ์ปจํ ์ด๋๊ฐ ๊ฐ์ Volume์ ์ฝ์ด์ ๋ก๊ทธ๋ฅผ ์์งํ ์ ์๋ค.
Namespace
Namespace๋ ํ๋์ ํด๋ฌ์คํฐ ์์์ ๋ฆฌ์์ค๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋๋๋ ๋จ์๋ค.
์๋ฅผ ๋ค์ด dev, staging, prod์ฒ๋ผ ํ๊ฒฝ๋ณ๋ก Namespace๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค. ๊ฐ์ ์ด๋ฆ์ ๋ฆฌ์์ค๋ผ๋ Namespace๊ฐ ๋ค๋ฅด๋ฉด ์๋ก ๋ค๋ฅธ ๋ฆฌ์์ค๋ก ์ทจ๊ธ๋๋ค.
ConfigMap๊ณผ Secret
ConfigMap์ ์ ํ๋ฆฌ์ผ์ด์ ์ค์ ๊ฐ์ ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ๋ค. Secret์ ๋น๋ฐ๋ฒํธ, ํ ํฐ, ์ธ์ฆ์์ฒ๋ผ ๋ฏผ๊ฐํ ๊ฐ์ ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฏธ์ง๋ ๊ทธ๋๋ก ๋๊ณ ํ๊ฒฝ๋ณ ์ค์ ๋ง ๋ฐ๊พธ๊ณ ์ถ์ ๋ ConfigMap๊ณผ Secret์ ์ฌ์ฉํ๋ค. ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ๋น๋ํ์ง ์์๋ ์ค์ ์ ์ฃผ์ ํ ์ ์๋ค๋ ์ ์ด ์ค์ํ๋ค.
Kubernetes ๋์ ํ๋ฆ
์ฌ์ฉ์๊ฐ kubectl๋ก ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ฉด ๋๋ต ๋ค์ ํ๋ฆ์ผ๋ก ๋์ํ๋ค.
- ์ฌ์ฉ์๊ฐ YAML ํ์ผ์ ์์ฑํ๋ค.
kubectl apply๋ช ๋ น์ผ๋ก API Server์ ์์ฒญํ๋ค.- API Server๋ ์์ฒญ์ ๊ฒ์ฆํ๊ณ etcd์ ์ํ๋ฅผ ์ ์ฅํ๋ค.
- Scheduler๋ Pod๋ฅผ ์คํํ Node๋ฅผ ์ ํํ๋ค.
- ์ ํ๋ Node์ kubelet์ด ์ปจํ ์ด๋ ๋ฐํ์์ Pod ์์ฑ์ ์์ฒญํ๋ค.
- Controller๋ ์ํ๋ ์ํ์ ํ์ฌ ์ํ๋ฅผ ๊ณ์ ๋น๊ตํ๋ค.
Pod ์ค๊ณ ์์น
Kubernetes์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ค๊ณ ์์น์ ์ ํ๋ฆฌ์ผ์ด์ ๋จ์๋ฅผ Pod๋ก ์ ๋๋๋ ๊ฒ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ 1 Pod = 1 WAS๋ก ์๊ฐํ๋ ๊ฒ์ด ์ข๋ค. ์๋ฅผ ๋ค์ด Spring Boot ์ ํ๋ฆฌ์ผ์ด์
ํ๋๋ฅผ ํ๋์ Pod๋ก ๋ฐฐํฌํ๊ณ , ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ๊ฐ ๋์ฐ๊ณ ์ถ๋ค๋ฉด Deployment์ replica ์๋ฅผ ๋๋ฆฐ๋ค.
1
2
3
4
Deployment
โโโ Pod - Spring Boot App
โโโ Pod - Spring Boot App
โโโ Pod - Spring Boot App
์ฌ๋ฌ WAS๋ฅผ ํ Pod์ ๋ฃ์ง ์๋ ์ด์
ํ๋์ Pod์ ์ฌ๋ฌ WAS๋ฅผ ๋ฃ์ผ๋ฉด ์ฒ์์๋ ๋จ์ํด ๋ณด์ผ ์ ์๋ค. ํ์ง๋ง ์ด์ ๊ด์ ์์๋ ๋ฌธ์ ๊ฐ ๋ง์์ง๋ค.
์ฒซ ๋ฒ์งธ๋ก ๊ฐ์ด ์ฃฝ๋๋ค. Pod๋ ํ๋์ ๋ฐฐํฌ ๋จ์์ด๊ธฐ ๋๋ฌธ์ Pod์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์์ ์๋ ์ปจํ ์ด๋๋ค์ด ํจ๊ป ์ํฅ์ ๋ฐ๋๋ค.
๋ ๋ฒ์งธ๋ก ์๋น์ค๋ณ ์ค์ผ์ผ๋ง์ด ์ด๋ ค์์ง๋ค. user-service๋ 3๊ฐ, order-service๋ 1๊ฐ๋ง ํ์ํ๋๋ผ๋ ๊ฐ์ Pod ์์ ์์ผ๋ฉด ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ๊ธฐ ์ด๋ ต๋ค.
์ธ ๋ฒ์งธ๋ก MSA ๊ตฌ์กฐ๊ฐ ํ๋ ค์ง๋ค. ์๋น์ค๋ฅผ ๋ถ๋ฆฌํ ์ด์ ๋ ๋ฐฐํฌ, ํ์ฅ, ์ฅ์ ๊ฒฉ๋ฆฌ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ๊ธฐ ์ํจ์ธ๋ฐ ์ฌ๋ฌ WAS๋ฅผ ํ Pod์ ๋ฃ์ผ๋ฉด ๋ค์ ๋ชจ๋๋ฆฌ์์ ๊ฐ๊น์์ง๋ค.
๋ฐ๋ผ์ ๊ฐ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ณต์ ํด์ผ ํ๋ ๋ณด์กฐ ์ปจํ ์ด๋๊ฐ ์๋๋ผ๋ฉด, ์๋ก ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๋์ Pod๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
Kubernetes์ Service Discovery
MSA์์๋ ์๋น์ค๊ฐ ์๋ก๋ฅผ ์ฐพ์ ํธ์ถํ ์ ์์ด์ผ ํ๋ค. ๊ณผ๊ฑฐ์๋ Netflix Eureka๋ Consul ๊ฐ์ Service Registry๋ฅผ ๋ณ๋๋ก ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค.
Service Registry์ ์ญํ ์ ๋จ์ํ๊ฒ ๋งํ๋ฉด ์๋น์ค์ ์์น๋ฅผ ์ ์ฅํ๊ณ ์ฐพ์์ฃผ๋ ๊ฒ์ด๋ค.
1
service name -> IP / port
ํ์ง๋ง Kubernetes์์๋ Service์ DNS๊ฐ ์ด ์ญํ ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ค.
1
2
3
4
5
6
7
auth-service
โ
Cluster DNS
โ
Service
โ
Pod๋ค
Pod IP๋ ๊ณ์ ๋ฐ๋ ์ ์์ง๋ง Service ์ด๋ฆ์ ์ ์ง๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ํด๋ฌ์คํฐ ์์์๋ auth-service, user-service ๊ฐ์ ์ด๋ฆ์ผ๋ก ์๋น์ค๋ฅผ ์ฐพ์ ์ ์๋ค.
Spring Cloud OpenFeign์ ์ฌ์ฉํ๋ค๋ฉด Eureka ์์ด๋ Kubernetes Service ์ด๋ฆ์ ๋์์ผ๋ก ํธ์ถํ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๋ค. ์ฆ, Kubernetes ํ๊ฒฝ์์๋ Service ์์ฒด๊ฐ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ์ ํต์ฌ ์ญํ ์ ํ๋ค.
Circuit Breaker
MSA์์๋ ํ ์๋น์ค์ ์ฅ์ ๊ฐ ๋ค๋ฅธ ์๋น์ค๋ก ์ ํ๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด user-service๊ฐ auth-service๋ฅผ ํธ์ถํ๋๋ฐ auth-service๊ฐ ์ฅ์ ์ํ๋ผ๊ณ ํด๋ณด์.
1
user-service -> auth-service
์ด๋ user-service๊ฐ ๊ณ์ auth-service๋ฅผ ํธ์ถํ๋ฉด ์๋ต ์ง์ฐ์ด ์์ด๊ณ , ์ค๋ ๋๊ฐ ๊ณ ๊ฐ๋๊ณ , ๊ฒฐ๊ตญ user-service๊น์ง ์ฅ์ ๊ฐ ๋ ์ ์๋ค. ์ด๋ฐ ์ฐ์ ์ฅ์ ๋ฅผ ๋ง๊ธฐ ์ํ ํจํด์ด Circuit Breaker๋ค.
Circuit Breaker๋ ์ฅ์ ๊ฐ ๋ ์๋น์ค๋ฅผ ๊ณ์ ํธ์ถํ์ง ์๊ณ ์ผ์ ์๊ฐ ์ฐจ๋จํ๋ค. ์ํ๋ ๋ณดํต ์ธ ๊ฐ์ง๋ก ๋๋๋ค.
| State | Description |
|---|---|
| Closed | ์ ์ ํธ์ถ ์ํ |
| Open | ์ฅ์ ๊ฐ ๊ฐ์ง๋์ด ํธ์ถ์ ์ฐจ๋จํ๋ ์ํ |
| Half-Open | ์ผ๋ถ ์์ฒญ๋ง ๋ณด๋ด ๋ณต๊ตฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ์ํ |
Spring Boot์์๋ ๋ณดํต Resilience4j๋ฅผ ์ฌ์ฉํด Circuit Breaker, Retry, Timeout ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. Kubernetes๊ฐ Pod ๋ณต๊ตฌ์ ๋คํธ์ํฌ ์ถ์ํ๋ฅผ ๋ด๋นํ๋๋ผ๋, ์ ํ๋ฆฌ์ผ์ด์ ํธ์ถ ์คํจ๋ฅผ ์ด๋ป๊ฒ ๋ค๋ฃฐ์ง๋ ๋ณ๋์ ๋ฌธ์ ๋ค.
Sidecar Proxy์ Bridge
Sidecar๋ ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ถ๋ ๋ณด์กฐ ์ปจํ ์ด๋๋ค. ๋ค๋ง sidecar๋ผ๊ณ ํด์ ๋ชจ๋ ๊ฐ์ ์ญํ ์ ํ๋ ๊ฒ์ ์๋๋ค.
๋ํ์ ์ผ๋ก Proxy ์ญํ ๊ณผ Bridge ์ญํ ๋ก ๋๋ ๋ณผ ์ ์๋ค.
| ๊ตฌ๋ถ | Sidecar Proxy | Sidecar Bridge |
|---|---|---|
| ๋ชฉ์ | ๋คํธ์ํฌ ํธ๋ํฝ ์ ์ด | ์๋ก ๋ค๋ฅธ ์์คํ ์ฐ๊ฒฐ ๋๋ ๋ณํ |
| ๊ด์ | intercept | adapter |
| ์์ | Envoy | HTTP-Kafka bridge, HTTP-gRPC bridge |
| ์ฃผ์ ๊ธฐ๋ฅ | retry, timeout, circuit breaker, mTLS | ํ๋กํ ์ฝ ๋ณํ, ๋ฉ์์ง ๋ณํ |
Sidecar Proxy๋ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ค์ด์ค๊ณ ๋๊ฐ๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ๊ฐ๋ก์ฑ ์ ์ดํ๋ค. Envoy๊ฐ ๋ํ์ ์ด๋ฉฐ Service Mesh์์ ๋ง์ด ์ฌ์ฉ๋๋ค.
Sidecar Bridge๋ ์๋ก ๋ค๋ฅธ ์์คํ ์ฌ์ด์ ์ฐ๊ฒฐ์ ๋๋๋ค. ์๋ฅผ ๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ HTTP๋ก ์์ฒญํ์ง๋ง sidecar๊ฐ Kafka ๋ฉ์์ง๋ก ๋ณํํด ์ ๋ฌํ๋ ์์ด๋ค.
Service Mesh
Service Mesh๋ ์๋น์ค ๊ฐ ํต์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ์๋๋ผ ์ธํ๋ผ ๋ ๋ฒจ์์ ์ ์ดํ๋ ๊ตฌ์กฐ๋ค.
๊ธฐ์กด์๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ง์ ๋คํธ์ํฌ ๋ก์ง์ ๊ฐ์ ธ์ผ ํ๋ค.
1
app -> Feign -> app
Service Mesh์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ sidecar proxy๊ฐ ๋ถ๊ณ , ์๋น์ค ๊ฐ ํต์ ์ proxy๋ฅผ ํตํด ํ๋ฅธ๋ค.
1
app -> sidecar -> sidecar -> app
ํต์ฌ ์์ด๋์ด๋ ๋คํธ์ํฌ ๊ณตํต ๊ธฐ๋ฅ์ ์ฝ๋ ๋ฐ์ผ๋ก ์ด๋์ํค๋ ๊ฒ์ด๋ค.
Service Mesh๊ฐ ์ ๊ณตํ๋ ๋ํ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
- Retry
- Timeout
- Circuit Breaker
- Tracing
- mTLS
- Traffic Routing
Service Mesh๋ ๋ณดํต Data Plane๊ณผ Control Plane์ผ๋ก ๋๋๋ค.
| Plane | Description |
|---|---|
| Data Plane | ์ค์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ์์ญ. Envoy ๊ฐ์ sidecar proxy๊ฐ ๋ด๋น |
| Control Plane | proxy ์ค์ ๊ณผ ์ ์ฑ ์ ๊ด๋ฆฌํ๋ ์์ญ. Istio ๊ฐ์ ๋๊ตฌ๊ฐ ๋ด๋น |
MSA ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์๋น์ค ๊ฐ ๋คํธ์ํฌ ์ ์ฑ , ๊ด์ธก์ฑ, ๋ณด์ ์๊ตฌ์ฌํญ์ด ๋์ด๋๋ค. ๋ชจ๋ ์๋น์ค์ retry, timeout, tracing, mTLS๋ฅผ ์ง์ ๊ตฌํํ๋ฉด ์ค๋ณต๋ ์ปค์ง๊ณ ์ ์ฑ ์ผ๊ด์ฑ๋ ๊นจ์ง๊ธฐ ์ฝ๋ค. Service Mesh๋ ์ด๋ฐ ๊ณตํต ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ์ธํ๋ผ๋ก ์ฎ๊ฒจ ๊ด๋ฆฌํ๋ค.
Sidecarless Service Mesh
๊ธฐ์กด Service Mesh๋ Pod๋ง๋ค sidecar proxy๋ฅผ ๋ถ์ด๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ด์๋ค.
1
2
3
Pod
โโโ app
โโโ sidecar
ํ์ง๋ง sidecar ๋ฐฉ์์๋ ๋น์ฉ๋ ์๋ค. Pod๋ง๋ค proxy ์ปจํ ์ด๋๊ฐ ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ์ ๋ฆฌ์์ค ์ฌ์ฉ๋์ด ๋๊ณ , ํธ๋ํฝ ๊ฒฝ๋ก๊ฐ ๋ณต์กํด์ง๋ฉฐ, ๋๋ฒ๊น ๋์ด๋๋ ์ฌ๋ผ๊ฐ๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ค์ด๊ธฐ ์ํด Sidecarless Service Mesh ์ ๊ทผ๋ ๋ฑ์ฅํ๋ค.
1
App -> Node / eBPF -> App
๋ํ์ ์ผ๋ก Cilium์ด๋ Istio Ambient Mesh ๊ฐ์ ํ๋ฆ์ด ์๋ค. sidecar๋ฅผ ๊ฐ Pod์ ๋ถ์ด๋ ๋์ Node ๋ ๋ฒจ์ด๋ eBPF ๊ธฐ๋ฐ ๋คํธ์ํฌ ๊ณ์ธต์์ ์๋น์ค ๊ฐ ํต์ ์ ์ ์ดํ๋ ค๋ ์ ๊ทผ์ด๋ค.
์ฒ์ Kubernetes๋ฅผ ํ์ตํ๋ ๋จ๊ณ์์๋ ๋ฐ๋ก Service Mesh๋ Sidecarless Mesh๊น์ง ์ ์ฉํ ํ์๋ ์๋ค. ๋ค๋ง Kubernetes, MSA, Service Mesh์ ํ๋ฆ์ ์ดํดํ ๋๋ ์ปจํ
์ด๋ ์ด์์์ ์์ํด ์๋น์ค ๊ฐ ํต์ ์ ์ด๋ก ๊ด์ฌ์ฌ๊ฐ ํ์ฅ๋๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์ ์ฒด ํ๋ฆ ์ ๋ฆฌ
์ง๊ธ๊น์ง์ ํ๋ฆ์ ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
| Step | Keyword | Description |
|---|---|---|
| 1 | Docker | ์ปจํ ์ด๋๋ฅผ ์คํํ๋ค |
| 2 | Kubernetes | Pod, Deployment, Service๋ก ์ปจํ ์ด๋๋ฅผ ์ด์ํ๋ค |
| 3 | MSA Network | Service Discovery์ Circuit Breaker๊ฐ ํ์ํด์ง๋ค |
| 4 | Sidecar | ๊ณตํต ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋๋ก ๋ถ๋ฆฌํ๋ค |
| 5 | Service Mesh | ์๋น์ค ๊ฐ ํต์ ์ ์ธํ๋ผ ๋ ๋ฒจ์์ ์ ์ดํ๋ค |
| 6 | Sidecarless Mesh | eBPF ๋ฑ์ ํ์ฉํด sidecar ์์ด ๋ฉ์๋ฅผ ๊ตฌํํ๋ค |
ํ์ค์ ์ผ๋ก Spring Boot ๊ธฐ๋ฐ MSA๋ฅผ Kubernetes ์์์ ์ด์ํ๋ค๋ฉด ์ฒ์๋ถํฐ Service Mesh๋ฅผ ๋์
ํ๊ธฐ๋ณด๋ค๋ Feign + Kubernetes Service + Resilience4j ์กฐํฉ์ผ๋ก ์์ํด๋ ์ถฉ๋ถํ๋ค. ์๋น์ค ์๊ฐ ๋๊ณ observability, ๋ณด์, ํธ๋ํฝ ์ ์ฑ
์ด ๋ณต์กํด์ง ๋ Istio ๊ฐ์ Service Mesh๋ฅผ ๊ฒํ ํ๋ ๊ฒ์ด ์์ฐ์ค๋ฝ๋ค.
Docker, Docker Swarm, Kubernetes์ ์ฐจ์ด
Docker, Docker Swarm, Kubernetes๋ ์๋ก ๊ฒน์น๋ ๋ถ๋ถ์ด ์์ง๋ง ๋ฐ๋ผ๋ณด๋ ๋ฒ์๊ฐ ๋ค๋ฅด๋ค.
| ๊ตฌ๋ถ | Docker | Docker Swarm | Kubernetes |
|---|---|---|---|
| ๋ชฉ์ | ์ปจํ ์ด๋ ์์ฑ๊ณผ ์คํ | Docker ๊ธฐ๋ฐ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ | ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ |
| ๊ด๋ฆฌ ๋ฒ์ | ๋จ์ผ ์๋ฒ ๋๋ ๋จ์ผ ์ปจํ ์ด๋ ์ค์ฌ | ์ฌ๋ฌ ์๋ฒ์ ์ปจํ ์ด๋ ๊ด๋ฆฌ | ์ฌ๋ฌ ์๋ฒ์ ์ปจํ ์ด๋, ๋คํธ์ํฌ, ์คํ ๋ฆฌ์ง, ๋ฐฐํฌ ์ ์ฑ ๊ด๋ฆฌ |
| ์ค์ ๋์ด๋ | ๋ฎ์ | ๋น๊ต์ ๋ฎ์ | ๋น๊ต์ ๋์ |
| ์ด์ ๋ณต์ก๋ | ๋ฎ์ | ์ค๊ฐ | ๋์ |
| ์ฃผ์ ๊ธฐ๋ฅ | ์ด๋ฏธ์ง ๋น๋, ์ปจํ ์ด๋ ์คํ | ์๋น์ค ๋ฐฐํฌ, ์ค์ผ์ผ๋ง, ๋กค๋ง ์ ๋ฐ์ดํธ | ๋ฐฐํฌ, ํ์ฅ, ๋ณต๊ตฌ, ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ, ์ค์ ๊ด๋ฆฌ, ์คํ ๋ฆฌ์ง, ํ์ฅ API |
Docker Swarm์ ์ ํํ๋ ์ด์
Docker Swarm์ Docker์ ๋ด์ฅ๋ ์ค์ผ์คํธ๋ ์ด์ ๊ธฐ๋ฅ์ด๋ผ ์์ํ๊ธฐ ์ฝ๋ค. ๊ธฐ์กด์ Docker์ Docker Compose๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค๋ฉด Kubernetes๋ณด๋ค ์ง์ ์ฅ๋ฒฝ์ด ๋ฎ๋ค.
์์ ๊ท๋ชจ์ ์๋น์ค์์๋ Swarm๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ฌ๋ฌ ์๋ฒ์ ์ปจํ ์ด๋๋ฅผ ๋ฐฐํฌํ๊ณ , replica ์๋ฅผ ์กฐ์ ํ๊ณ , ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๋ ์ ๋๋ผ๋ฉด ์ค์ ์ด ๋จ์ํ Swarm์ด ๋ ์ค์ฉ์ ์ผ ์ ์๋ค.
1
docker service create --name web --replicas 3 -p 80:80 nginx
์ ๋ช ๋ น์ฒ๋ผ Docker CLI๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํด์ ์๋น์ค๋ฅผ ์์ฑํ๊ณ replica๋ฅผ ์ง์ ํ ์ ์๋ค. ์ด ๋จ์ํจ์ด Swarm์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋ค.
์ค์ ๋ก ์ฌ์ฉํ๋ Swarm ๋ฐฐํฌ ๋ฐฉ์
์ค์ ๋ก Swarm์ ์ฌ์ฉํ ๋๋ ๋ณต์กํ ๋ฐฐํฌ ๋๊ตฌ๋ฅผ ๋ถ์ด๊ธฐ๋ณด๋ค Shell Script๋ก ๋ฐฐํฌ ํ๋ฆ์ ์๋ํํด์ ์ฌ์ฉํ์๋ค. ์คํฌ๋ฆฝํธ์์ ํ๋ ์ผ์ ๋๋ต ๋ค์๊ณผ ๊ฐ์๋ค.
.env.stack.dev,.env.stack.prod๊ฐ์ ํ๊ฒฝ๋ณ env ํ์ผ์ ์ฝ๋๋ค.- Docker Swarm์ด ํ์ฑํ๋์ด ์์ง ์์ผ๋ฉด
docker swarm init์ผ๋ก ์ด๊ธฐํํ๋ค. - MDM, Dashboard ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฏธ์ง์ migrator ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ค.
- ํ์ํ ๊ฒฝ์ฐ registry์ ์ด๋ฏธ์ง๋ฅผ pushํ๋ค.
docker stack deploy๋ก stack์ ๋ฐฐํฌํ๋ค.docker stack services,docker stack ps,docker service logs๋ก ์ํ์ ๋ก๊ทธ๋ฅผ ํ์ธํ๋ค.
ํต์ฌ ๋ฐฐํฌ ๋ช ๋ น์ ์๋์ฒ๋ผ ๋จ์ํ๋ค.
1
docker stack deploy --with-registry-auth -c "$STACK_FILE" "$STACK_NAME"
์๋น์ค ๋ก๊ทธ๋ stack ์ด๋ฆ๊ณผ service ์ด๋ฆ๋ง ์กฐํฉํด์ ๋ฐ๋ก ํ์ธํ ์ ์์๋ค.
1
docker service logs -f "${STACK_NAME}_${service}"
์ด ๋ฐฉ์์ ์ฅ์ ์ ๋ช
ํํ๋ค. ๋ณ๋์ ๋ณต์กํ ๋ฐฐํฌ ์์คํ
์์ด๋ build, push, deploy, logs ๊ฐ์ ์ด์ ๋ช
๋ น์ ํ๋์ ์คํฌ๋ฆฝํธ๋ก ๋ฌถ์ ์ ์์๋ค. Docker Compose๋ฅผ ์ฌ์ฉํด๋ณธ ๊ฒฝํ์ด ์๋ค๋ฉด docker-stack.yml๋ ๋น๊ต์ ์์ฐ์ค๋ฝ๊ฒ ์ดํดํ ์ ์์๋ค.
๋ฐ๋๋ก ํ๊ณ๋ ์์๋ค. ์๋น์ค๊ฐ ๋ง์์ง๊ณ ํ๊ฒฝ์ด ๋ณต์กํด์ง์๋ก Shell Script๊ฐ ์ ์ ๋ง์ ์ฑ ์์ ๊ฐ์ง๊ฒ ๋๋ค. ๋ฐฐํฌ ์ ๋ต, ์ค์ ๊ด๋ฆฌ, secret ๊ด๋ฆฌ, ๊ถํ ์ ์ด, ์ํ ๊ด์ฐฐ ๊ฐ์ ์๊ตฌ์ฌํญ์ด ๋์ด๋๋ฉด ์ง์ ์คํฌ๋ฆฝํธ๋ก ๋ณด์ํด์ผ ํ๋ ๋ถ๋ถ์ด ๋ง์์ง๋ค.
์ด ์ง์ ์์ Kubernetes๊ฐ ์ ๊ณตํ๋ ๋ฆฌ์์ค ๋ชจ๋ธ๊ณผ ์ํ๊ณ๊ฐ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค. Kubernetes๋ ์ฒ์์๋ ๋ฌด๊ฒ์ง๋ง, ์ด์์์ ํ์ํ ๊ฐ๋ ๋ค์ ํ๋ซํผ ์์ผ๋ก ๋์ด๋ค์ฌ ํ์คํํ๋ค.
๊ทธ๋ผ์๋ Kubernetes๋ฅผ ๋ณด๋ ์ด์
Kubernetes๋ Swarm๋ณด๋ค ๋ฌด๊ฒ๊ณ ํ์ตํ ๊ฐ๋ ๋ ๋ง๋ค. Pod, Deployment, Service, Ingress, ConfigMap, Secret, Volume, Namespace ๋ฑ ์ฒ์์๋ ์์์ผ ํ ๋ฆฌ์์ค๊ฐ ๋ง์ ๋ณด์ธ๋ค.
ํ์ง๋ง ์๋น์ค ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ์ด์ ์๊ตฌ์ฌํญ์ด ๋ง์์ง์๋ก Kubernetes์ ์ฅ์ ์ด ๋๋ฌ๋๋ค.
- ๋ฐฐํฌ ์ ๋ต๊ณผ ๋กค๋ฐฑ์ ๋ ์ธ๋ฐํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.
- Ingress, Service Mesh, HPA ๊ฐ์ ์ํ๊ณ ๋๊ตฌ์ ์ฐ๊ฒฐํ๊ธฐ ์ฝ๋ค.
- ํด๋ผ์ฐ๋ ํ๊ฒฝ์ Managed Kubernetes ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์ค์ , ๋คํธ์ํฌ, ์คํ ๋ฆฌ์ง, ๊ถํ ๊ด๋ฆฌ๋ฅผ ํ์คํํ๊ธฐ ์ข๋ค.
- ์ปค๋ฎค๋ํฐ์ ๋ ํผ๋ฐ์ค๊ฐ ํ๋ถํ๋ค.
์ฆ, Swarm์ ๊ฐ๋ณ๊ณ ๋จ์ํ ์ด์์ ๊ฐ์ ์ด ์๊ณ , Kubernetes๋ ๋ณต์กํ ์ด์ ์๊ตฌ์ฌํญ์ ์ฒด๊ณ์ ์ผ๋ก ๋ค๋ฃจ๋ ๋ฐ ๊ฐ์ ์ด ์๋ค.
Docker Swarm๊ณผ Kubernetes ์ ํ ๊ธฐ์ค
๋ ์ค ํ๋๊ฐ ํญ์ ๋ ์ข๋ค๊ณ ๋ณด๊ธฐ๋ ์ด๋ ต๋ค. ์๋น์ค ๊ท๋ชจ, ํ์ ์๋ จ๋, ์ด์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์ ํ์ด ๋ฌ๋ผ์ง๋ค.
| ์ํฉ | ๋ ์ ํฉํ ์ ํ |
|---|---|
| Docker ๊ธฐ๋ฐ์ผ๋ก ๋น ๋ฅด๊ฒ ์ค์ผ์คํธ๋ ์ด์ ์ ์์ํ๊ณ ์ถ๋ค | Docker Swarm |
| ์์ ๊ท๋ชจ์ ์๋น์ค์ด๊ณ ์ด์ ๋ณต์ก๋๊ฐ ๋ฎ๋ค | Docker Swarm |
| ํ์ต ๋น์ฉ๋ณด๋ค ๋จ์ํ ๋ฐฐํฌ ๊ฒฝํ์ด ์ค์ํ๋ค | Docker Swarm |
| ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ํ์ค์ ๋ง์ถฐ ์ด์ํ๊ณ ์ถ๋ค | Kubernetes |
| ํธ๋ํฝ ์ฆ๊ฐ์ ๋ฐ๋ฅธ ์๋ ํ์ฅ, ๋ณต์กํ ๋ฐฐํฌ ์ ๋ต์ด ํ์ํ๋ค | Kubernetes |
| ์ฅ๊ธฐ์ ์ผ๋ก ์ด์ ์๋ํ์ ์ํ๊ณ ํ์ฅ์ด ์ค์ํ๋ค | Kubernetes |
๋๋ ์ฒ์์๋ Kubernetes๊ฐ ๋ฌด๊ฒ๋ค๊ณ ๋๊ปด์ ธ Docker Swarm์ ์ ํํ์๋ค. ํ์ง๋ง Kubernetes๋ฅผ ํ์ตํ๋ฉด์ ์ด ๋ฌด๊ฑฐ์์ด ๋จ์ํ ๋ณต์กํจ๋ง์ ์๋๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ์ด์์์ ๋ง์ฃผ์น๋ ๋ค์ํ ๋ฌธ์ ๋ฅผ ์ถ์ํํ๊ณ ํ์คํํ๊ธฐ ์ํด ๋ง์ ๊ฐ๋ ์ด ์๊ธด ๊ฒ์ ๊ฐ๊น๋ค.
์ ๋ฆฌ
Kubernetes๋ ์ปจํ ์ด๋๋ฅผ ์์ ์ ์ผ๋ก ์ด์ํ๊ธฐ ์ํ ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ์ด๋ค.
ํต์ฌ์ ์ฌ์ฉ์๊ฐ ์ํ๋ ์ํ๋ฅผ ์ ์ธํ๋ฉด Kubernetes๊ฐ ํ์ฌ ์ํ๋ฅผ ๊ณ์ ์กฐ์ ํ๋ค๋ ์ ์ด๋ค. ์ด๋ฅผ ์ํด Control Plane, Worker Node, Pod, Deployment, Service ๊ฐ์ ๊ตฌ์ฑ ์์๋ค์ด ํจ๊ป ๋์ํ๋ค.
MSA ๊ด์ ์์๋ Service์ DNS๊ฐ Service Discovery ์ญํ ์ ํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์๋ Resilience4j ๊ฐ์ ๋๊ตฌ๋ก Circuit Breaker๋ฅผ ๊ตฌํํ ์ ์๋ค. ์๋น์ค ๊ฐ ํต์ ์๊ตฌ์ฌํญ์ด ๋ ๋ณต์กํด์ง๋ฉด Sidecar Proxy์ Service Mesh๋ฅผ ํตํด retry, timeout, tracing, mTLS ๊ฐ์ ๊ณตํต ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ์ธํ๋ผ ๋ ๋ฒจ๋ก ์ฎ๊ธธ ์ ์๋ค.
Docker Swarm์ Kubernetes๋ณด๋ค ๊ฐ๋ณ๊ณ ๋จ์ํ๊ฒ ์์ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ฐ๋ฉด Kubernetes๋ ๋ ๋์ ์ด์ ์๊ตฌ์ฌํญ์ ๋ค๋ฃจ๊ธฐ ์ํ ํ์ค ํ๋ซํผ์ ๊ฐ๊น๋ค. ์์ ์๋น์ค์์๋ Swarm์ด ์ถฉ๋ถํ ์ ์์ง๋ง, ๋ณต์กํ ๋ฐฐํฌ์ ํ์ฅ, ํด๋ผ์ฐ๋ ์ํ๊ณ ์ฐ๋๊น์ง ๊ณ ๋ คํ๋ค๋ฉด Kubernetes๋ฅผ ์ดํดํ ํ์๊ฐ ์๋ค.
ํ์ค์ ์ผ๋ก๋ Spring Boot + Feign + Kubernetes Service + Resilience4j ์กฐํฉ์ผ๋ก ์์ํ๊ณ , ์๋น์ค ์์ ์ด์ ๋ณต์ก๋๊ฐ ์ปค์ก์ ๋ Istio๋ Cilium ๊ฐ์ Service Mesh ๊ณ์ด์ ๊ฒํ ํ๋ ํ๋ฆ์ด ์ ์ ํด ๋ณด์ธ๋ค.
