Est-il possible de redémarrer un seul conteneur
Pas à travers kubectl
, bien que selon la configuration de votre cluster, vous puissiez "tricher" et docker kill the-sha-goes-here
, ce qui obligera 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 en fonction du nom du pod que vous avez fourni, il semble être sous la surveillance d'un ReplicaSet, vous pouvez donc simplement kubectl delete pod test-1495806908-xn5jn
et kubernetes en créera un nouveau à sa place (le nouveau pod aura un nom différent, alors ne vous attendez pas kubectl get pods
à revenir plus test-1495806908-xn5jn
jamais)
docker kill the-sha-goes-here
alors pourquoi ne pas faire à ladocker container restart the-sha-goes-here
place? pourquoi compter dessuskubelet
pour le redémarrer? Quoi qu'il en soit, le vrai problème est que où dois-je exécuter ladocker
commande, même pour tuer le conteneur. Activécould-shell
,docker
n'affiche pas les conteneurs des clusters k8s!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
travail pour moi.(J'ai changé la commande de
reboot
à en/sbin/killall5
fonction des recommandations ci-dessous.)la source
reboot
; J'ai eu plus de chance avec l'exécution à la/sbin/killall5
place; qui tue tous les processus, et le conteneur sortira.kubectl exec POD_NAME -c CONTAINER_NAME /sbin/reboot
travaillé comme un charmeLe pod et le conteneur sont é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.
Cela enverra un
SIGTERM
signal au processus 1, qui est le processus principal en cours d'exécution dans le conteneur. Tous les autres processus seront des enfants du processus 1 et seront arrêtés après la fin du processus 1. Consultez la page de manuel kill pour d'autres signaux que vous pouvez envoyer.la source
La seule raison d'avoir kubernetes est qu'il gère les conteneurs pour vous afin que vous n'ayez pas à vous soucier autant du cycle de vie des conteneurs dans le pod.
Puisque vous avez une
deployment
configuration qui utilisereplica set
. Vous pouvez supprimer le pod en utilisantkubectl delete pod test-1495806908-xn5jn
et kubernetes gérera la création d'un nouveau pod avec les 2 conteneurs sans aucun temps d'arrêt. Essayer de redémarrer manuellement des conteneurs uniques dans des pods annule tous les avantages de kubernetes.la source
Toutes les réponses ci-dessus ont mentionné la suppression du pod ... mais si vous avez plusieurs pods du même service, il serait fastidieux de supprimer chacun d'entre eux ...
Par conséquent, je propose la solution suivante, redémarrez :
1) Réglez l'échelle à zéro:
La commande ci-dessus mettra fin à tous vos pods avec le nom
<<name>>
2) Pour redémarrer le pod, définissez les répliques sur plus de 0
La commande ci-dessus redémarrera vos pods avec 2 répliques.
la source
kubectl patch deployment <deployment name> -p "{\"spec\": {\"template\": {\"metadata\": { \"labels\": { \"redeploy\": \"$(date +%s)\"}}}}}"
plutôt. Cela mettra à jour le déploiement et lancera donc la recréation de tous les pods gérés par celui-ci conformément à la stratégie de mise à jour progressive.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, l'envoi d'un
SIGTERM
signal entraîne le décrochage du conteneur.imagePullPolicy
étant défini sur,Always
le kubelet extrait à nouveau la dernière image lorsqu'il ramène le conteneur.la source
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 prenez le temps de nettoyer toutes les ressources ouvertes (fichiers temporaires, annulation des transactions de base de données, fermeture des connexions, peu importe). Contrairement à -9 (SIGKILL), tue le processus immédiatement, ne lui permettant pas de nettoyer les ressources ouvertes.Tuer le processus spécifié dans le Dockerfile
CMD
/ENTRYPOINT
fonctionne pour moi. (Le conteneur redémarre automatiquement)Le redémarrage n'était pas autorisé dans mon conteneur, j'ai donc dû utiliser cette solution de contournement.
la source
Il y avait un problème dans le
coredns
pod, j'ai supprimé ce pod parSon pod redémarrera automatiquement.
la source
En supposant que le conteneur est exécuté en tant que root, ce qui n'est pas recommandé.
Dans mon cas, lorsque j'ai changé la configuration de l'application, j'ai dû redémarrer le conteneur qui était utilisé dans un modèle de side-car, je tuerais le PID de l'application de démarrage à ressort qui appartient à l'utilisateur du docker.
la source
kubectl exec -it ${POD_NAME?} -c ${CONTAINER_NAME?} bash ...
, il est beaucoup plus facile pour les gens de copier / coller.