πŸ”„ μΏ λ²„λ„€ν‹°μŠ€ Pod의 생λͺ…주기와 μƒνƒœ 관리

🧩 Podλž€ λ¬΄μ—‡μΈκ°€μš”?

PodλŠ” μΏ λ²„λ„€ν‹°μŠ€μ—μ„œ μ»¨ν…Œμ΄λ„ˆκ°€ μ‹€μ œλ‘œ μ‹€ν–‰λ˜λŠ” κ°€μž₯ μž‘μ€ λ‹¨μœ„μž…λ‹ˆλ‹€. 보톡 ν•˜λ‚˜μ˜ Podμ—λŠ” ν•˜λ‚˜μ˜ μ»¨ν…Œμ΄λ„ˆκ°€ λ“€μ–΄κ°€ μžˆμ§€λ§Œ, κ²½μš°μ— 따라 μ—¬λŸ¬ μ»¨ν…Œμ΄λ„ˆκ°€ ν•¨κ»˜ 듀어가기도 ν•©λ‹ˆλ‹€.

μΏ λ²„λ„€ν‹°μŠ€μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포되면, κ·Έ μ€‘μ‹¬μ—λŠ” 항상 Podκ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ PodλŠ” λ‹¨μˆœνžˆ μ‹€ν–‰λ˜κ³  λλ‚˜λŠ” 것이 μ•„λ‹ˆλΌ, λ‹€μ–‘ν•œ μƒνƒœ(state)λ₯Ό 거치며 λ™μž‘ν•©λ‹ˆλ‹€.


🚦 Pod 생λͺ…μ£ΌκΈ° μƒνƒœ 흐름도

μ•„λž˜λŠ” Podκ°€ μƒμ„±λ˜κ³  μ’…λ£Œλ˜κΈ°κΉŒμ§€ κ±°μΉ˜λŠ” μ£Όμš” μƒνƒœμž…λ‹ˆλ‹€:

image

이 μƒνƒœλ“€μ€ kubectl get pods λͺ…λ Ήμ–΄λ₯Ό 톡해 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ” 각 μƒνƒœ μ„€λͺ…

1. Pending

2. Running

3. Succeeded

4. Failed

5. CrashLoopBackOff

πŸ”₯ CrashLoopBackOffκ°€ λ°œμƒν•˜λŠ” λŒ€ν‘œμ μΈ 원인 μ˜ˆμ‹œ

원인 μ„€λͺ… 및 μ˜ˆμ‹œ
μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 였λ₯˜ μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€ μ‹€ν–‰ 파일이 μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œμΌœ μ’…λ£Œ
예: Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ NullPointerException λ°œμƒ ν›„ μ¦‰μ‹œ μ’…λ£Œ
잘λͺ»λœ Command/Entrypoint YAML의 command λ˜λŠ” args μ„€μ • 였λ₯˜
예: command: ["exit", "1"]
ν™˜κ²½λ³€μˆ˜ λˆ„λ½ ENV_VAR=DATABASE_URL 섀정이 λΉ μ Έμ„œ μ‹€ν–‰ μ‹œ DB μ—°κ²° μ‹€νŒ¨
의쑴 μ„œλΉ„μŠ€ λ―Έμž‘λ™ μ»¨ν…Œμ΄λ„ˆ μ‹œμž‘ μ‹œ λ‹€λ₯Έ API μ„œλ²„λ‚˜ DB에 μ˜μ‘΄ν•  경우, ν•΄λ‹Ή μ„œλΉ„μŠ€κ°€ μ€€λΉ„λ˜μ§€ μ•Šμ•„μ„œ μ‹€νŒ¨ 반볡
Health Check μ‹€νŒ¨ livenessProbeμ—μ„œ μ‹€νŒ¨λ₯Ό λ°˜λ³΅ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆκ°€ κ°•μ œ μž¬μ‹œμž‘λ¨
이미지 문제 imagePullPolicy: Always둜 μ„€μ •ν•˜κ³  λ ˆμ§€μŠ€νŠΈλ¦¬μ— μ—†λŠ” νƒœκ·Έ μ‚¬μš© μ‹œ μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ μ‹€νŒ¨ 반볡

🧠 μƒνƒœ 관리 μ‹œ 체크포인트

λͺ…λ Ήμ–΄ μ„€λͺ…
kubectl get pods Pod μƒνƒœ λͺ©λ‘ κ°„λž΅ 확인
kubectl describe pod [이름] μƒνƒœ λ³€ν™” 이λ ₯, 이벀트 둜그 확인
kubectl logs [이름] μ»¨ν…Œμ΄λ„ˆ 둜그 확인 (였λ₯˜ 원인 νŒŒμ•…)
kubectl exec -it [이름] -- sh Pod λ‚΄λΆ€μ—μ„œ 직접 디버깅

πŸ›  μ‹€μŠ΅ μ˜ˆμ‹œ: CrashLoopBackOff μƒνƒœ λ§Œλ“€κΈ°

λ‹€μŒκ³Ό 같은 λͺ…λ Ήμ–΄λ‘œ μΌλΆ€λŸ¬ 잘λͺ»λœ Podλ₯Ό λ§Œλ“€μ–΄ μƒνƒœλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

apiVersion: v1
kind: Pod
metadata:
  name: crash-test
spec:
  containers:
  - name: bad-container
    image: busybox
    command: ['sh', '-c', 'exit 1']
kubectl apply -f crash-test.yaml
kubectl get pods
kubectl describe pod crash-test

이 PodλŠ” exit 1 λͺ…λ ΉμœΌλ‘œ 항상 μ‹€νŒ¨ν•˜κΈ° λ•Œλ¬Έμ— CrashLoopBackOff μƒνƒœλ‘œ μ§„μž…ν•˜κ²Œ λ©λ‹ˆλ‹€.

또 λ‹€λ₯Έ μ˜ˆμ‹œ:

apiVersion: v1
kind: Pod
metadata:
  name: missing-env
spec:
  containers:
  - name: app
    image: myapp:latest
    env:
      - name: API_KEY
        valueFrom:
          configMapKeyRef:
            name: missing-config
            key: apiKey

μœ„ μ˜ˆμ‹œλŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ConfigMap을 μ°Έμ‘°ν•΄ μ»¨ν…Œμ΄λ„ˆ μ‹œμž‘ μ‹œ ν™˜κ²½ λ³€μˆ˜ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.


πŸ“š 마무리 μš”μ•½

μΏ λ²„λ„€ν‹°μŠ€μ˜ Pod μƒνƒœλ₯Ό 잘 μ΄ν•΄ν•˜λŠ” 것은 ν΄λŸ¬μŠ€ν„° 운영 λŠ₯λ ₯을 λ†’μ΄λŠ” μ²«κ±ΈμŒμž…λ‹ˆλ‹€!


πŸ“Ž 참고자료: