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 +1000
después de haber comenzado enWed, 23 Jun 2021 23:46:48 +1000
y 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 RESTART
una columna kubectl get pods
y 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 RESTARTS
columna
¿Por qué reiniciar?
kubectl describe pod [your-pod-name]
mostrará un Last State
mensaje 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')