Ich habe einen Single-Node-Kubernetes-Cluster in der Google Container Engine zum Herumspielen.
Zweimal ist eine kleine persönliche Website, die ich darin hoste, für ein paar Minuten offline gegangen. Wenn ich mir die Protokolle des Containers ansehe, sehe ich, dass die normale Startreihenfolge vor Kurzem abgeschlossen wurde. Ich gehe also davon aus, dass ein Container gestorben ist (oder beendet wurde?) und neu gestartet wurde.
Wie kann ich herausfinden, wie und warum dies passiert ist?
Gibt es eine Möglichkeit, eine Warnung zu erhalten, wenn ein Container unerwartet gestartet/gestoppt wird?
Antwort1
Sie können die letzten Neustartprotokolle eines Containers wie folgt anzeigen:
kubectl loggt podname -c containername --vorheriges
Wie von Sreekanth beschrieben, sollte kubectl get pods Ihnen die Anzahl der Neustarts anzeigen, Sie können aber auch ausführen
kubectl beschreibt Pod Podname
Außerdem werden Ihnen Ereignisse angezeigt, die vom Kubelet an den API-Server zu den Lebenszyklus-Ereignissen des Pods gesendet werden.
Sie können auch eine Abschlussmeldung in /dev/termination-log schreiben. Diese wird dann wie indie Dokumente.
Antwort2
Neben den vorherigen Antworten hat mir ein weiterer Befehl geholfen, einen Fehler zu finden:
kubectl get event [--namespace=my-namespace]
Es listet auch Ereignisse von Pods, Jobs und Nodes auf
Antwort3
Um die Ursache für den Fehler zu ermitteln, gehe ich folgendermaßen vor:
# 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
Antwort4
Beim Neustart
kubectl describe pod your-pod-name
Suchen Sie nach einem Abschnitt wie diesem:
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
Die Interpretation des oben Gesagten ist wie folgt:
- Der Pod wurde
Wed, 23 Jun 2021 23:46:52 +1000
nach dem Start um beendetWed, 23 Jun 2021 23:46:48 +1000
und ist nun betriebsbereit, nachdem er zuletzt um gestartet wurde.Wed, 23 Jun 2021 23:52:05 +1000
Ein Pull Request wurde jetzt in den Kubernetes-Meilenstein 1.22 integriert, um LAST RESTART
eine Spalte hinzuzufügen kubectl get pods
, und wird verfügbar sein, sobald dieser veröffentlicht wird – siehe hier.
https://github.com/kubernetes/kubernetes/pull/100142
So zeigen Sie Ihre aktuelle Version an:kubernetes version
(1.21 ist die neueste Version vom 28. Juni 2021)
Bei einem Neustart
kubectl get po [your-pod-name]
Der Pod wurde irgendwann neu gestartet, wenn in der RESTARTS
Spalte eine Zahl steht
Warum neu gestartet
kubectl describe pod [your-pod-name]
zeigt ein an Last State
, das Ihnen einen Überblick gibt. Um zu sehen, was auf dem Pod vor dem Neustart passiert ist, verwenden Sie kubectl logs your-pod-name --previous
. Sie können dies zur Überprüfung in eine Datei weiterleiten, z. B.
kubectl logs your-pod-name --previous > pod_previous_log.txt
(Siehe auch oben unter „Beim Neustart“)