Pod는 왜 자꾸 CrashLoopBackOff 나는가 (feat. 내 멘탈)

Json·2025년 9월 23일
0

k8d

목록 보기
39/42

🌀 내 멘탈 CrashLoopBackOff

"나는 분명 kubectl apply 했을 뿐인데…"


🚨 Intro

쿠버네티스 쓰다 보면 가장 많이 보는 에러 상태 1위:

Pod가 뜨긴 뜨는데, 몇 초 지나면 죽고, 다시 뜨고, 또 죽고…
결국 kubectl get pods 찍으면 무한 루프처럼 CrashLoopBackOff 🌀

이 순간 개발자 멘탈 상태:


🤯 CrashLoopBackOff란?

  • Crash: 컨테이너가 죽음
  • Loop: 다시 시작함
  • BackOff: 점점 딜레이 늘려가며 재시도

즉, “얘가 죽었으니 다시 켜볼까? … 또 죽었네? 그럼 쉬었다 다시 켜보자”
쿠버네티스가 부모님 모드로 계속 살려보는 상태.


💀 대표적인 사망 원인들

1. OOMKilled (Exit Code 137)

  • 메모리 제한 resources.limits.memory 넘으면 → 컨테이너 강제 종료
  • dmesg | grep -i kill 하면 OOM 로그 볼 수 있음
  • 내 컨테이너: "난 아직 살아있어!"
  • 커널: "쉿. 메모리 다 썼어. 가서 쉬어 😵"

    👉 해결: Pod 메모리 제한 조정 or 애플리케이션 메모리 누수 점검

2. Application Error (Exit Code 1 등)

  • 애플리케이션 자체에서 터짐 (예: npm start에서 문법 에러, DB 연결 실패)

  • 로그 보면 답이 있음:
    👉 해결: kubectl logs는 CrashLoopBackOff의 친구다.

3. Liveness Probe / Readiness Probe 실패

  • 프로브 설정 잘못해서 정상인데도 "죽었다"고 판단
  • 예: /health API가 10초 걸리는데, 타임아웃을 1초로 줌 🤦

👉 해결: Probe 설정은 꼭 서비스 특성에 맞춰 튜닝


4. Permission Denied / File Not Found

  • ConfigMap/Secret mount 안 됨
  • 권한 문제로 실행 파일 못 읽음
  • 볼륨 경로 틀림

👉 해결: kubectl describe pod 찍으면 이벤트 로그에서 원인 나옴


5. 잘못된 Command / Entrypoint

  • commandargs 오타 → 컨테이너 들어가자마자 “command not found”
  • Pod: "내가 뭘 실행해야 되지?"

👉 해결: Dockerfile ENTRYPOINT와 Deployment yaml 확인


📊 Exit Code별 상황 정리

CrashLoopBackOff 디버깅할 때 자주 보는 코드들:

Exit Code의미흔한 원인내 멘탈 상태
137OOMKilled메모리 부족“램 좀 더 달라…” 🥲
1일반 에러애플리케이션 종료, 스크립트 실패“로그 열심히 까야겠네”
139Segmentation Fault네이티브 라이브러리 크래시, 잘못된 메모리 접근“C/C++ 냄새 난다…”
143SIGTERM정상 종료 신호 (종종 스케일 다운/재시작)“아, 그냥 재시작이었네” 😅
0정상 종료컨테이너가 할 일 다 하고 종료“에러 아님. 설마 배치 잡인데 서비스처럼 띄운 건 아니겠지?”

🧪 디버깅 팁

  1. kubectl logs -f pod-name → 애플리케이션 로그 확인
  2. kubectl describe pod pod-name → 이벤트/exit code 확인
  3. kubectl get events --sort-by=.metadata.creationTimestamp → 최근 이벤트 순으로 보기
  4. CrashLoopBackOff 반복되면 kubectl logs --previous로 이전 실행 로그 확인 가능

🍜 비유: 라면 끓이기

  • 물(메모리)이 부족하면? → OOMKilled 🍲
  • 라면 스프 안 넣으면? → Application Error ❌
  • 너무 빨리 뚜껑 열어보면? → Readiness Probe 실패
  • 가스레인지 불이 안 켜지면? → Entrypoint Error 🔥

결국 CrashLoopBackOff는 라면 끓이다 중간중간 실패하는 상황과 비슷합니다.
(라면도 K8s도 타이밍이 중요하다)


🎬 마무리

CrashLoopBackOff는 무섭지 않습니다.
👉 로그 보고, 이벤트 확인하고, Exit Code 뜯어보면 답이 있음.

다음부터는 Pod가 CrashLoopBackOff 뜰 때 이렇게 외치세요:

“괜찮아, 로그 보면 다 나와 있어.” 😎

0개의 댓글