📜 kubectl logs --previous 완전 정리 (컨테이너 재시작 로그 확인 방법)

2026. 2. 21. 15:37k8s

Kubernetes를 운영하다 보면 이런 상황을 자주 마주친다.

  • Pod가 CrashLoopBackOff 상태
  • 애플리케이션이 바로 종료됨
  • 이미지 변경 후 비정상 동작
  • OOMKilled 발생

이럴 때 단순히 kubectl logs만 보면 원인을 놓칠 수 있다.

그 이유는 현재 실행 중인 컨테이너 로그만 보여주기 때문이다.

이 문제를 해결하는 옵션이 바로:

kubectl logs POD_NAME --previous

이다.


🔎 기본 개념

Pod 안에는 하나 이상의 컨테이너가 있다.

컨테이너가 재시작되면:

  1. 기존 컨테이너 종료
  2. 새로운 컨테이너 생성
  3. 새로운 로그 파일 생성

따라서 기본 명령어:

kubectl logs nginx

현재 살아 있는 컨테이너 로그만 보여준다.

반면,

kubectl logs nginx --previous

직전에 종료된 컨테이너의 로그를 보여준다.


📦 왜 중요한가?

CrashLoopBackOff 상황을 보자.

kubectl get pod nginx

출력 예:

NAME    READY   STATUS             RESTARTS
nginx   0/1     CrashLoopBackOff   5

이 상태에서 그냥 로그를 보면:

kubectl logs nginx

→ 방금 시작된 컨테이너의 로그만 보인다.

하지만 실제 원인은 이전 컨테이너의 종료 직전 로그에 있다.

이때 사용:

kubectl logs nginx --previous

→ 종료 직전 에러 메시지 확인 가능


📌 사용 예시

1️⃣ 현재 컨테이너 로그 확인

kubectl logs nginx

2️⃣ 이전 컨테이너 로그 확인

kubectl logs nginx --previous

3️⃣ 특정 컨테이너 지정 (멀티 컨테이너 Pod)

kubectl logs nginx -c app --previous

형식:

kubectl logs POD_NAME -c CONTAINER_NAME --previous

🔥 실제 디버깅 흐름

Pod 문제가 발생했을 때 기본 루틴은 다음과 같다.

kubectl get pod
kubectl describe pod
kubectl logs pod --previous

특히 describe 명령에서 다음을 확인한다:

  • Restart Count
  • Last State
  • Exit Code
  • Reason (OOMKilled, Error 등)

그 다음 --previous 로그로 원인 분석한다.


⚠️ 주의사항

  1. 컨테이너가 최소 1회 이상 재시작되어야 한다.
  2. 직전 1개 로그만 확인 가능하다.
  3. 노드 로그 로테이션이 되면 사라질 수 있다.
  4. Pod가 삭제되면 로그도 함께 사라진다.

📊 명령어 비교 정리

명령 의미
kubectl logs pod 현재 컨테이너 로그
kubectl logs pod --previous 직전 컨테이너 로그
kubectl logs pod -f 실시간 스트리밍
kubectl logs pod -c name 특정 컨테이너

🎯 언제 반드시 써야 할까?

  • CrashLoopBackOff
  • OOMKilled
  • 애플리케이션 즉시 종료
  • 이미지 변경 후 실패
  • 초기화 실패

컨테이너가 "죽었다가 다시 살아나는" 상황에서는 거의 필수다.


🏁 정리

kubectl logs --previous

  • 재시작된 컨테이너의 이전 로그를 조회하는 옵션
  • 장애 원인 분석에 매우 중요
  • CrashLoopBackOff 디버깅 핵심 도구

운영 환경에서는 단순 logs보다
--previous를 먼저 확인하는 습관이 큰 도움이 된다.