72 votes

Comment savoir quand/si/pourquoi un conteneur dans un cluster kubernetes redémarre ?

J'ai un cluster kubernetes à un seul nœud dans le moteur de conteneur de Google pour jouer avec.

À deux reprises, un petit site web personnel que j'y héberge a été mis hors ligne pendant quelques minutes. Lorsque je consulte les journaux du conteneur, je vois que la séquence de démarrage normale s'est récemment achevée, je suppose donc qu'un conteneur est mort (ou a été tué ?) et qu'il a redémarré.

Comment puis-je comprendre le pourquoi et le comment de cette situation ?

Existe-t-il un moyen de recevoir une alerte lorsqu'un conteneur démarre/arrête de manière inattendue ?

89voto

beeps Points 921

Vous pouvez consulter les derniers journaux de redémarrage d'un conteneur en utilisant :

kubectl logs podname -c containername --previous

Comme décrit par Sreekanth, kubectl get pods devrait vous indiquer le nombre de redémarrages, mais vous pouvez aussi lancer

kubectl describe pod podname

Il vous montrera les événements envoyés par le kubelet à l'apiserver concernant les événements du cycle de vie du pod.

Vous pouvez également écrire un message final dans le fichier /dev/termination-log, qui s'affichera comme décrit dans la section les docs .

25voto

En plus des réponses précédentes, une autre commande qui m'a aidé à trouver une erreur est la suivante :

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

Il répertorie également les événements des Pods, Jobs et Nodes.

13voto

vladimir Points 171

Je suis les étapes suivantes pour définir la raison de l'échec :

# 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} --since=2h --timestamps

# 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

9voto

Christopher Oezbek Points 2691

Kubectl get pods listera tous les redémarrages du conteneur. La commande describe peut également être utile car elle liste tous les événements associés au pod.

Les sondes de proximité et les sondes de disponibilité peuvent être configurées pour une meilleure gestion. vérifier ici

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

En outre, les crochets peuvent être configurés pour être consommés dans le conteneur à des moments spécifiques du cycle de vie du conteneur. vérifier ici

https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/

1 votes

Veuillez développer les liens dans la réponse. Sinon -1 :)

4voto

Chris Halcrow Points 203

Au redémarrage

kubectl describe pod your-pod-name

Recherchez une section comme celle-ci :

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 

L'interprétation de ce qui précède est la suivante :

  • La nacelle a été fermée Wed, 23 Jun 2021 23:46:52 +1000 après avoir commencé à Wed, 23 Jun 2021 23:46:48 +1000 La dernière fois qu'il a été mis en marche, c'était à l'adresse suivante Wed, 23 Jun 2021 23:52:05 +1000

Une pull request a été fusionnée dans le milestone kubernetes 1.22, pour ajouter LAST RESTART colonne à kubectl get pods et sera disponible dès qu'il sera publié - voir ici. https://github.com/kubernetes/kubernetes/pull/100142

Pour connaître votre version actuelle - kubernetes version

(1.21 est la dernière version au 28 juin 2021)

En cas de redémarrage

kubectl get po [your-pod-name] Le pod a été redémarré à un moment donné s'il y a un numéro dans le champ RESTARTS colonne

Pourquoi redémarrer

kubectl describe pod [your-pod-name] affichera un Last State qui vous donne une indication de haut niveau. Pour voir ce qui s'est passé sur le pod avant qu'il ne redémarre, utilisez kubectl logs your-pod-name --previous . Vous pouvez l'envoyer dans un fichier à des fins d'inspection, par exemple.

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

(Voir également ci-dessus la rubrique "Lors du redémarrage")

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X