개요
Kubernetes 환경에서 서비스를 운영하다 보면 동작하던 Pod가 예기치 않은 문제로 재시작하는 상황이 발생할 수 있다. 다만 기본적으로 컨테이너 공간은 휘발성이기 때문에 로그 저장 공간을 따로 마운트 하지 않았다면 재시작 이후에는 로그를 확인할 수 없었다. 즉, 문제가 생긴 원인을 확인할 수 없었다.
하지만 logs 명령어로 이미 종료된 컨테이너의 로그를 확인하는 방법이 있다는 것을 알게되어 적어둔다.
logs -p
logs 명령여 -p 옵션을 사용하면 Pod 내 컨테이너의 이전 인스턴스 로그를 확인할 수 있다.
kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]
# -f, --follow : 로그를 실시간으로 출력한다.
# -p. --previos : 포드 내 컨테이너의 이전 인스턴스 로그를 출력한다.
사용 예시
최초로 시작한 뒤 문제없이 동작 중인 서비스가 있다고 하자. 포드 컨테이너의 로그를 확인하면 다음과 같다.
동작하면서 발생하는 로그를 확인할 수 있다. -p 옵션을 사용하면
기존에 종료된 컨테이너를 찾지 못해 에러가 발생한다.
이제 이 포드를 임의로 재시작해본다.
포드가 새로 시작된 이후부터의 로그만 확인할 수 있고, 포드가 재시작된 시점의 로그는 확인할 수 없다. 이제
-p 옵션을 사용하면
kubectl logs nginx -p
포드가 종료된 시점의 로그를 확인할 수 있게 된다.
이 글의 경우에는 set image 명령으로 Pod의 이미지를 변경하면서 Pod가 재시작되었다. 때문에 프로세스 종료 시그널에 의해 서비스가 중지되었던 것으로 보인다.
참고 문서
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#logs