¿Cómo puedo saber cuándo/si/por qué se reinicia un contenedor en un clúster de Kubernetes?

¿Cómo puedo saber cuándo/si/por qué se reinicia un contenedor en un clúster de Kubernetes?

Tengo un clúster de Kubernetes de un solo nodo en el motor de contenedores de Google para jugar.

En dos ocasiones, un pequeño sitio web personal que tengo alojado en él se ha desconectado durante un par de minutos. Cuando veo los registros del contenedor, veo que la secuencia de inicio normal se completó recientemente, por lo que asumo que un contenedor murió (¿o fue eliminado?) y se reinicia.

¿Cómo puedo averiguar el cómo y el por qué sucede esto?

¿Hay alguna manera de recibir una alerta cada vez que un contenedor se inicia o se detiene inesperadamente?

Respuesta1

Puede ver los últimos registros de reinicio de un contenedor usando:

kubectl registra nombre de pod -c nombre de contenedor --previous

Como lo describe Sreekanth, kubectl get pods debería mostrarle la cantidad de reinicios, pero también puede ejecutar

kubectl describe el nombre del pod

Y le mostrará los eventos enviados por kubelet al apiserver sobre los eventos del ciclo de vida del pod.

También puede escribir un mensaje final en /dev/termination-log, y esto aparecerá como se describe enlos documentos.

Respuesta2

Además de las respuestas anteriores, otro comando que me ayudó a encontrar un error es:

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

También enumera eventos de Pods, Jobs y Nodos.

Respuesta3

Sigo estos pasos para definir el motivo del error:

# 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

Respuesta4

Cuando se reinicia

kubectl describe pod your-pod-name

Busque una sección como esta:

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 

La interpretación de lo anterior es la siguiente:

  • El módulo finalizó Wed, 23 Jun 2021 23:46:52 +1000después de haber comenzado en Wed, 23 Jun 2021 23:46:48 +1000y ahora está ejecutándose y listo, ya que se inició por última vez enWed, 23 Jun 2021 23:52:05 +1000

Ahora se ha fusionado una solicitud de extracción en el hito de Kubernetes 1.22, para agregarle LAST RESTARTuna columna kubectl get podsy estará disponible una vez que se publique; consulte aquí. https://github.com/kubernetes/kubernetes/pull/100142

Para ver su versión actual -kubernetes version

(1.21 es la última versión del 28 de junio de 2021)

Si se reinicia

kubectl get po [your-pod-name] El pod se reinició en algún momento si hay algún número en la RESTARTScolumna

¿Por qué reiniciar?

kubectl describe pod [your-pod-name]mostrará un Last Statemensaje que le indicará un nivel alto. Para ver qué sucedió en el pod antes de que se reiniciara, use kubectl logs your-pod-name --previous. Puede canalizar esto a un archivo para su inspección, por ejemplo

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

(Ver también arriba en 'Cuando se reinicia')

información relacionada