์ฟ ๋ฒ๋คํฐ์ค, ์ ์ด๋ ๊ฒ ํซํ ๊ฑฐ์ผ?
์์ฆ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ผ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค(Kubernetes, ์ค์ฌ์ k8s) ํ ๋ฒ์ฏค์ ๋ค์ด๋ดค์ ๊ฑฐ์์. ๊ทผ๋ฐ ๋ง์ “๊ทธ๋์ ์ด๊ฒ ๋ญ๊ฐ ์ข์๋ฐ?” ํ๋ฉด ๋ช ํํ๊ฒ ๋๋ตํ๊ธฐ ์ด๋ ค์ด ์ฌ๋๋ ๊ฝค ๋ง๋๋ผ๊ณ ์. ์ ๋ ์ฒ์์ ๊ทธ๋ฌ์ด์.
๊ทธ๋์ ์ด๋ฒ์ ์ฟ ๋ฒ๋คํฐ์ค์ ์ฅ๋จ์ ์ ์ค๋ฌด ๊ด์ ์์ ์ ๋๋ก ์ ๋ฆฌํด๋ดค์ด์. ๋์ ์ ๊ณ ๋ฏผํ๊ณ ์๋ ๋ถ๋ค์ด๋ผ๋ฉด ๋๊น์ง ์ฝ์ด๋ณด์๋ฉด ๋์์ด ๋ ๊ฑฐ์์.
์ฟ ๋ฒ๋คํฐ์ค ์ฅ์ โ ์ฐ๋ฉด ์ง์ง ํธํ ๊ฒ๋ค
1. ์๋ ์ค์ผ์ผ๋ง (Auto Scaling)
ํธ๋ํฝ์ด ๊ฐ์๊ธฐ ๋ชฐ๋ฆฌ๋ฉด? ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์์์ Pod(์ปจํ ์ด๋)๋ฅผ ๋๋ ค์ค์. ํธ๋ํฝ ๋น ์ง๋ฉด ๋ค์ ์ค์ด๊ณ ์. HPA(Horizontal Pod Autoscaler)๋ฅผ ์ค์ ํด๋๋ฉด CPU๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ธฐ์ค์ผ๋ก ์๋์ผ๋ก ์ค์ผ์ผ ์ธ/์์์ ํด์ค์.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
์ด๊ฑฐ ํ๋ฒ ์ค์ ํด๋๋ฉด ์๋ฒฝ์ ์๋ฒ ํฐ์ง๊น๋ด ๋ ธ์ฌ์ด์ฌํ ์ผ์ด ํ ์ค์ด์.
2. ์ ํํ๋ง (Self-Healing)
์ปจํ ์ด๋๊ฐ ์ฃฝ์ผ๋ฉด? ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์์์ ๋ค์ ์ด๋ ค์. ๋ ธ๋๊ฐ ํต์งธ๋ก ๋ ์๊ฐ๋ ๋ค๋ฅธ ๋ ธ๋์์ ์๋์ผ๋ก Pod๋ฅผ ๋์์ค์. ์์ ์ ์๋ฒ ํ๋ ์ฃฝ์ผ๋ฉด ์๋ฒฝ์ ์ ํ๋ฐ๊ณ ๋ฌ๋ ค๊ฐ๋ ์์ ์๊ฐํ๋ฉด ๋๋ฌผ์ด ๋์.
liveness probe, readiness probe ์ค์ ํด๋๋ฉด “์ด ์ปจํ ์ด๋ ์ด์์๊ธด ํ๋ฐ ์ ๋๋ก ๋์ ์ ํ๋” ์ํฉ๊น์ง ์ก์๋ด์.
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
3. ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ & ๋ก๋๋ฐธ๋ฐ์ฑ
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ ์ ์ผ ๊ณจ์น ์ํ ๊ฒ “์ ์๋น์ค IP๊ฐ ๋ญ์ง?”์ธ๋ฐ, ์ฟ ๋ฒ๋คํฐ์ค๋ ์๋น์ค ์ด๋ฆ๋ง์ผ๋ก ํต์ ์ด ๊ฐ๋ฅํด์. DNS ๊ธฐ๋ฐ์ผ๋ก ์์์ ์ฐพ์์ค์. ๋ก๋๋ฐธ๋ฐ์ฑ๋ ๊ธฐ๋ณธ ๋ด์ฅ์ด๊ณ ์.
# Pod ์์์ ๋ค๋ฅธ ์๋น์ค ํธ์ถํ ๋
curl http://user-service.default.svc.cluster.local:8080/api/users
IP ํ๋์ฝ๋ฉํ๋ ์์ ์ ์ด์ ์๋ ์ด์์.
4. ๋กค๋ง ์ ๋ฐ์ดํธ & ๋กค๋ฐฑ
๋ฐฐํฌํ ๋ ๋ฌด์ค๋จ์ผ๋ก ํ๋์ฉ ๊ต์ฒดํด์ฃผ๋ ๋กค๋ง ์ ๋ฐ์ดํธ๊ฐ ๊ธฐ๋ณธ์ด์์. ๋ฐฐํฌํ๋๋ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด? ํ ์ค์ด๋ฉด ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ๋ผ์.
# ๋กค๋ฐฑ์ ์ด๊ฑฐ ํ ์ค์ด๋ฉด ๋
kubectl rollout undo deployment/my-app
๋ฐฐํฌ ๋๋ง๋ค ์์๋ ํ๋ฆฌ๋ ๊ฒ ๊ฑฐ์ง๋ง์ฒ๋ผ ํธํด์ ธ์.
5. ๋ฉํฐํด๋ผ์ฐ๋ & ํ์ด๋ธ๋ฆฌ๋
AWS์์ GCP๋ก ์ฎ๊ธฐ๊ณ ์ถ๋ค? ์ฟ ๋ฒ๋คํฐ์ค ์ฐ๋ฉด ๋น๊ต์ ์์ํด์. ์ธํ๋ผ๋ฅผ ์ถ์ํํด์ฃผ๋๊น ํน์ ํด๋ผ์ฐ๋์ ์ข ์๋๋ ๊ฑธ ์ด๋ ์ ๋ ํผํ ์ ์์ด์. ์จํ๋ ๋ฏธ์ค + ํด๋ผ์ฐ๋ ์กฐํฉ๋ ๊ฐ๋ฅํ๊ณ ์.
6. ์ ์ธ์ ์ค์ ๊ด๋ฆฌ
YAML ํ์ผ๋ก “๋๋ ์ด๋ฐ ์ํ๋ฅผ ์ํด”๋ผ๊ณ ์ ์ธํ๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ๊ทธ ์ํ๋ฅผ ๋ง์ถฐ์ค์. ์ธํ๋ผ๋ฅผ ์ฝ๋๋ก ๊ด๋ฆฌ(IaC)ํ ์ ์์ผ๋๊น Git์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ๋ ๋๊ณ , ์ฝ๋ ๋ฆฌ๋ทฐ๋ ๊ฐ๋ฅํด์.
์ฟ ๋ฒ๋คํฐ์ค ๋จ์ โ ์์งํ ํ๋ ๊ฒ๋ค
1. ํ์ต ๊ณก์ ์ด ๋ฏธ์น ๋ฏ์ด ๊ฐํ๋ฆ
์์งํ ์ด๊ฒ ์ ์ผ ํฐ ๋จ์ ์ด์์. Pod, Service, Deployment, Ingress, ConfigMap, Secret, PV, PVC, StatefulSet… ๊ฐ๋ ์ด ๋๋ ์์ด ๋์์. Docker๋ ๋ชจ๋ฅด๋ฉด ๊ฑฐ๊ธฐ์๋ถํฐ ์์ํด์ผ ํ๊ณ ์.
ํ์ ์ ์ฒด๊ฐ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ดํดํ๋ ๋ฐ๊น์ง ์ต์ ๋ช ๋ฌ์ ์ก์์ผ ํด์. ๊ทธ ๋์ ์์ฐ์ฑ์ด ํ ๋จ์ด์ง๋ ๊ฑด ๊ฐ์ํด์ผ ํด์.
2. ๋ฆฌ์์ค ์ค๋ฒํค๋๊ฐ ์๊ฐ๋ณด๋ค ํผ
์ฟ ๋ฒ๋คํฐ์ค ์์ฒด๊ฐ ๋จน๋ ๋ฆฌ์์ค๊ฐ ๊ฝค ๋ผ์. etcd, API Server, Controller Manager, Scheduler, kube-proxy… ์ปจํธ๋กค ํ๋ ์ธ๋ง ํด๋ CPU/๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์๋จน์ด์. ์์ ์๋น์ค ํ๋ ๋์ฐ๋ ค๊ณ ํด๋ฌ์คํฐ ๊ตฌ์ถํ๋ฉด ๋ฐฐ๋ณด๋ค ๋ฐฐ๊ผฝ์ด ๋ ํฐ ์ํฉ์ด ๋ฒ์ด์ ธ์.
3. ๋คํธ์ํน์ด ๋ณต์กํจ
์ฟ ๋ฒ๋คํฐ์ค ๋คํธ์ํน์ ์ง์ง ํ ์ธ๊ณ์์. CNI ํ๋ฌ๊ทธ์ธ ์ ํ๋ถํฐ ์์ํด์, Service mesh(Istio ๊ฐ์ ๊ฑฐ), Ingress Controller, NetworkPolicy๊น์ง… ๋คํธ์ํฌ ์ด์ ๋๋ฒ๊น ํ ๋ ๋จธ๋ฆฌ๊ฐ ํ์์ง ์ ์์ด์.
“Pod๋ผ๋ฆฌ ํต์ ์ด ์ ๋ผ์” ์ด ํ ์ค ์๋ฌ ์ก์ผ๋ ค๊ณ ๋ฐ๋์ ๋ ๋ฆฐ ์ ๋ ์์ด์.
4. ์๊ท๋ชจ ํ๋ก์ ํธ์๋ ๊ณผ๋ํจ
์ฌ์ฉ์ 100๋ช ์ง๋ฆฌ ์๋น์ค์ ์ฟ ๋ฒ๋คํฐ์ค? ์์งํ ๋ญ ์ก๋ ๋ฐ ์ ์ก๋ ์นผ ์ฐ๋ ๊ฑฐ์์. Docker Compose๋ก ์ถฉ๋ถํ ๊ท๋ชจ์ธ๋ฐ “์์ฆ ํธ๋ ๋๋๊น” ํ๊ณ ๋์ ํ๋ฉด ์ด์ ๋น์ฉ๋ง ๋์ด๋์.
5. YAML ์ง์ฅ
์ฟ ๋ฒ๋คํฐ์ค ์ค์ ์ ์ ๋ถ YAML์ด์์. ์๋น์ค ํ๋ ๋ฐฐํฌํ๋ ค๋ฉด Deployment, Service, Ingress, ConfigMap ๋ฑ๋ฑ YAML์ 4~5๊ฐ์ฉ ์์ฑํด์ผ ํด์. ๋ค์ฌ์ฐ๊ธฐ ํ๋ ์๋ชปํ๋ฉด ์๋ฌ ๋๊ณ ์. Helm์ด๋ Kustomize๋ก ๊ด๋ฆฌํ ์ ์๊ธด ํ๋ฐ, ๊ทธ๊ฒ๋ ๋ ๋ฐฐ์์ผ ํด์.
6. ๋ชจ๋ํฐ๋ง/๋ก๊น ๋ณ๋ ๊ตฌ์ถ ํ์
์ฟ ๋ฒ๋คํฐ์ค ์์ฒด๋ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ ์ค์. Prometheus + Grafana ์กฐํฉ์ด๋ ELK ์คํ์ ์ง์ ๊ตฌ์ถํด์ผ ํด์. ์ด๊ฒ๋ง ํด๋ ์ผ์ด ํ๋ ๋ ๋์ด๋๋ ๊ฑฐ์์.
๊ทธ๋์ ๋์ ํด์ผ ํด? ๋ง์์ผ ํด?
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด, “๊ท๋ชจ์ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค”์์. ๋ปํ ๋ต์ด๊ธด ํ๋ฐ, ์ง์ง ๊ทธ๋์.
๋์ ํ๋ฉด ์ข์ ๊ฒฝ์ฐ:
- ๋ง์ดํฌ๋ก์๋น์ค๊ฐ 10๊ฐ ์ด์์ด๊ฑฐ๋ ๊ณ์ ๋์ด๋ ์์
- ํธ๋ํฝ ๋ณ๋์ด ํฌ๊ณ ์๋ ์ค์ผ์ผ๋ง์ด ํ์ํ ๊ฒฝ์ฐ
- ๋ฌด์ค๋จ ๋ฐฐํฌ, ๋กค๋ฐฑ์ด ๋น๋ฒํ ๊ฒฝ์ฐ
- ํ์ DevOps/์ธํ๋ผ ์์ง๋์ด๊ฐ ์๋ ๊ฒฝ์ฐ
๊ตณ์ด ์ ์จ๋ ๋๋ ๊ฒฝ์ฐ:
- ๋ชจ๋๋ฆฌ์ ์๋น์ค 1~2๊ฐ๋ง ์ด์ ์ค
- ํ ๊ท๋ชจ๊ฐ ์๊ณ ์ธํ๋ผ ์ ๋ด์๊ฐ ์์
- ํธ๋ํฝ์ด ์์ธก ๊ฐ๋ฅํ๊ณ ์์ ์
- Docker Compose๋ ECS๋ก ์ถฉ๋ถํ ์ปค๋ฒ ๊ฐ๋ฅ
์ฟ ๋ฒ๋คํฐ์ค๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ง๋ง, ๋ชจ๋ ์ํฉ์ ์ ๋ต์ ์๋์์. ๋ณธ์ธ ํ๊ณผ ์๋น์ค ๊ท๋ชจ์ ๋ง๊ฒ ํ๋จํ๋ ๊ฒ ์ ์ผ ์ค์ํด์. ์ผ๋จ Docker๋ถํฐ ํ์คํ ์ตํ๊ณ , ํ์์ฑ์ ๋๋ ๋ ๋์ ํด๋ ๋ฆ์ง ์์์!