๐Ÿณ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes) ์žฅ๋‹จ์  ์™„๋ฒฝ ์ •๋ฆฌ โ€” ๋„์ž… ์ „ ๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ๋“ค

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค, ์™œ ์ด๋ ‡๊ฒŒ ํ•ซํ•œ ๊ฑฐ์•ผ?

์š”์ฆ˜ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(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๋ถ€ํ„ฐ ํ™•์‹คํžˆ ์ตํžˆ๊ณ , ํ•„์š”์„ฑ์„ ๋А๋‚„ ๋•Œ ๋„์ž…ํ•ด๋„ ๋Šฆ์ง€ ์•Š์•„์š”!

๋Œ“๊ธ€ ๋‚จ๊ธฐ๊ธฐ