177 votes

Redémarrer le conteneur dans le pod

J'ai un pod test-1495806908-xn5jn avec 2 conteneurs. Je voudrais redémarrer l'un d'eux appelé container-test . Est-il possible de redémarrer un seul conteneur dans un pod et comment ? Si non, comment redémarrer le pod ?

La nacelle a été créée à l'aide d'un deployment.yaml avec :

kubectl create -f deployment.yaml

191voto

Matthew L Daniel Points 371

Est-il possible de redémarrer un seul conteneur

Pas par kubectl bien qu'en fonction de la configuration de votre cluster, vous pouvez "tricher" et docker kill the-sha-goes-here ce qui amènera Kubelet à redémarrer le conteneur "défaillant" (en supposant, bien sûr, que la politique de redémarrage du pod indique que c'est ce qu'il doit faire).

comment redémarrer le pod

Cela dépend de la façon dont le Pod a été créé, mais d'après le nom du Pod que vous avez fourni, il semble être sous la surveillance d'un ReplicaSet, donc vous pouvez simplement kubectl delete pod test-1495806908-xn5jn et kubernetes en créera un nouveau à sa place (le nouveau Pod aura un nom différent, ne vous attendez donc pas à ce que kubectl get pods pour revenir test-1495806908-xn5jn plus jamais)

11 votes

La politique de redémarrage par défaut est toujours le redémarrage

1 votes

Si je peux le faire : docker kill the-sha-goes-here alors pourquoi ne pas faire docker container restart the-sha-goes-here à la place ? pourquoi s'appuyer sur kubelet pour le redémarrer ? Quoi qu'il en soit, le vrai problème est le suivant : où dois-je exécuter le programme docker même pour tuer le conteneur. Sur could-shell , docker ne montre pas les conteneurs des clusters k8s !

0 votes

Une bonne suggestion est de faire en sorte que le POD_NAME comme variable d'environnement dans vos conteneurs en cours d'exécution. Ainsi, lorsque vous devez ajouter une logique pour redémarrer le pod/conteneur, vous pouvez facilement y faire référence en utilisant la variable d'environnement définie. $POD_NAME

86voto

Zsolt Katona Points 533

Dans certains cas, vous souhaitez redémarrer un conteneur spécifique au lieu de supprimer le pod et de laisser Kubernetes le recréer.

Faire un kubectl exec POD_NAME -c CONTAINER_NAME /sbin/killall5 a fonctionné pour moi.

(J'ai changé la commande de reboot à /sbin/killall5 sur la base des recommandations ci-dessous).

32 votes

Tous les conteneurs n'ont pas reboot J'ai eu plus de chance avec l'exécution /sbin/killall5 à la place ; cela tue tous les processus, et le conteneur se termine.

1 votes

Et tous les conteneurs n'ont pas d'utilisateur racine ;)

5 votes

-1, parce que... Vous utilisez l'effet secondaire de 'reboot' qui tue tous les processus et la récupération de Kubernetes. Il fait beaucoup d'hypothèses : exécution en tant que Root, disponibilité du binaire dans le conteneur, une restartPolicy activée, etc. De plus, cela encombre les logs d'un échec du processus, ce qui n'est pas idéal.

67voto

ROY Points 894

Le pod et le conteneur sont tous deux éphémères, essayez d'utiliser la commande suivante pour arrêter le conteneur spécifique et le cluster k8s redémarrera un nouveau conteneur.

kubectl exec -it [POD_NAME] -c [CONTAINER_NAME] -- /bin/sh -c "kill 1"

Cela enverra un SIGTERM au processus 1, qui est le processus principal exécuté dans le conteneur. Tous les autres processus seront les enfants du processus 1, et seront terminés après la sortie du processus 1. Voir la page tuer la page de manuel pour d'autres signaux que vous pouvez envoyer.

7 votes

J'ai essayé d'autres réponses et celle-ci est la seule qui ait fonctionné pour moi, il me semble que c'est la plus générale.

0 votes

Comment obtenir le nom du conteneur qui s'exécute dans un pod ?

0 votes

Mon conteneur Alpine s'est retrouvé dans un état malsain quelconque lorsque j'ai essayé ceci. kubectl get po montre Error dans la colonne d'état pour le pod

24voto

Innocent Anigbo Points 1210

La raison d'être de Kubernetes est de gérer les conteneurs pour vous, afin que vous n'ayez pas à vous soucier du cycle de vie des conteneurs dans le pod.

Puisque vous avez un deployment qui utilise replica set . Vous pouvez supprimer le pod en utilisant kubectl delete pod test-1495806908-xn5jn et kubernetes va gérer la création d'un nouveau pod avec les 2 conteneurs sans aucun temps mort. Essayer de redémarrer manuellement des conteneurs individuels dans des pods annule tous les avantages de Kubernetes.

5 votes

J'ai connu un temps d'arrêt lorsque le processus de mon pod terminateur est devenu 0/1.

11 votes

Il faut être prudent en disant "sans aucun temps d'arrêt". Cela dépend de votre configuration exacte. De plus, l'absence de temps d'arrêt pose des problèmes en soi.

6 votes

Lorsque je supprime un pod dans mon déploiement avec seulement 1 réplique, je subis toujours un temps d'arrêt.

4voto

Alexis LEGROS Points 157

Nous utilisons une ligne de commande assez pratique pour forcer le redéploiement d'images fraîches sur le pod d'intégration.
Nous avons remarqué que nos conteneurs alpins exécutent tous leur commande de "maintien" sur le PID 5. Par conséquent, en lui envoyant un SIGTERM Le signal fait descendre le conteneur. imagePullPolicy étant réglé sur Always fait en sorte que le kubelet récupère la dernière image lorsqu'il ramène le conteneur.

kubectl exec -i [pod name] -c [container-name] -- kill -15 5

1 votes

Que représentent -15 et 5 ?

4 votes

@JohnBalvinArias c'est caché dans la description ci-dessus, mais dans kill -15 5 vous exécutez la commande kill pour envoyer le signal "-15" au processus avec le PID 5. C'est ainsi que vous indiquez à un processus que vous souhaitez qu'il se termine (SIGTERM) et qu'il prenne le temps de nettoyer toutes les ressources ouvertes (fichiers temporaires, transactions db rollback, connexions fermées, etc). Contrairement à -9 (SIGKILL), qui tue le processus immédiatement, sans lui permettre de nettoyer les ressources ouvertes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X