Kubernetes 클러스터의 컨테이너가 다시 시작되는 시기/경우/이유를 어떻게 알 수 있나요?

Kubernetes 클러스터의 컨테이너가 다시 시작되는 시기/경우/이유를 어떻게 알 수 있나요?

Google 컨테이너 엔진에 놀 수 있는 단일 노드 kubernetes 클러스터가 있습니다.

제가 호스팅하는 작은 개인 웹사이트가 두 번이나 몇 분 동안 오프라인 상태가 되었습니다. 컨테이너의 로그를 보면 최근 정상적인 시작 순서가 완료된 것을 볼 수 있으므로 컨테이너가 종료(또는 종료?)되었다가 다시 시작되었다고 가정합니다.

이런 일이 발생하는 방법과 이유를 어떻게 알 수 있나요?

컨테이너가 예기치 않게 시작/중지될 때마다 경고를 받을 수 있는 방법이 있나요?

답변1

다음을 사용하여 컨테이너의 마지막 다시 시작 로그를 볼 수 있습니다.

kubectl 로그 podname -c 컨테이너 이름 --previous

Sreekanth의 설명대로 kubectl get pods는 재시작 횟수를 표시해야 하지만 다음을 실행할 수도 있습니다.

kubectl 설명 포드 포드 이름

그리고 Pod의 수명 주기 이벤트에 대해 kubelet이 apiserver로 보낸 이벤트를 보여줍니다.

/dev/termination-log에 최종 메시지를 쓸 수도 있으며 이는 다음에 설명된 대로 표시됩니다.문서.

답변2

이전 답변 외에도 오류를 찾는 데 도움이 된 또 다른 명령은 다음과 같습니다.

kubectl get event [--namespace=my-namespace]

Pod, Job, Node의 이벤트도 나열됩니다.

답변3

실패 이유를 정의하려면 다음 단계를 따르세요.

# print out a pod logs (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#logs)
kubectl logs {name_of_pod} -n {namespace} --since=2h --timestamps


# print the logs for the _previous_ instance of the container in a pod if it exists
kubectl logs -p {name_of_pod} -n {namespace} --previous


# check events (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#describe)
kubectl describe pod {pod_name} -n {namespace}

# look at the 'Events' at the end of the output
# ..
# Events:
#   Type     Reason   Age                 From               Message
#   ----     ------   ----                ----               -------
#   Warning  BackOff  40m                 kubelet, gke-xx    Back-off restarting failed container
# ..


# observe all events (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get)
kubectl get events -n {namespace} --sort-by=.metadata.creationTimestamp


# check logs, etc. in pod container (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#exec)
kubectl exec -it {pod_name} -n {namespace} -- sh

답변4

다시 시작하면

kubectl describe pod your-pod-name

다음과 같은 섹션을 찾으세요.

State:          Running
  Started:      Wed, 23 Jun 2021 23:52:05 +1000
Last State:     Terminated
  Reason:       Error
  Exit Code:    1
  Started:      Wed, 23 Jun 2021 23:46:48 +1000
  Finished:     Wed, 23 Jun 2021 23:46:52 +1000
Ready:          True 

위 내용을 해석하면 다음과 같습니다.

  • 포드가 Wed, 23 Jun 2021 23:46:52 +1000에 시작된 후 종료되었으며 Wed, 23 Jun 2021 23:46:48 +1000, 에 마지막으로 시작된 후 현재 실행 및 준비가 되어 있습니다.Wed, 23 Jun 2021 23:52:05 +1000

이제 끌어오기 요청이 kubernetes 1.22 마일스톤에 병합되어 에 LAST RESTART열을 추가했으며 kubectl get pods출시되면 사용할 수 있습니다. 여기를 참조하세요. https://github.com/kubernetes/kubernetes/pull/100142

현재 버전을 보려면 -kubernetes version

(1.21은 2021년 6월 28일 기준 최신 릴리스입니다.)

다시 시작한 경우

kubectl get po [your-pod-name]RESTARTS열에 숫자가 있으면 어떤 단계에서 포드가 다시 시작되었습니다.

다시 시작한 이유

kubectl describe pod [your-pod-name]Last State높은 수준의 표시를 제공하는 이 표시됩니다 . Pod가 다시 시작되기 전에 Pod에서 어떤 일이 발생했는지 확인하려면 를 사용하세요 kubectl logs your-pod-name --previous. 검사를 위해 이를 파일로 파이프할 수 있습니다.

kubectl logs your-pod-name --previous > pod_previous_log.txt

(위의 '다시 시작하는 경우' 참조)

관련 정보