J'ai un pod test-1495806908-xn5jn
avec 2 conteneurs. J'aimerais redémarrer l'un d'entre 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?
Le pod a été créé à l'aide d'un deployment.yaml avec:
kubectl create -f deployment.yaml
Est-il possible de redémarrer un seul conteneur
Pas via kubectl
, bien que, en fonction de la configuration de votre cluster, vous puissiez "tricher" et docker kill the-sha-goes-here
, ce qui forcera kubelet à redémarrer le conteneur "en échec" (en supposant bien entendu que la politique de redémarrage du pod indique que c'est ce qu'il convient )
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 placé 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, donc ne vous attendez pas à kubectl get pods
pour renvoyer test-1495806908-xn5jn
plus jamais)
Il existe des cas où vous souhaitez redémarrer un conteneur spécifique au lieu de supprimer le module et de laisser Kubernetes le recréer.
Faire un kubectl exec POD_NAME -c CONTAINER_NAME reboot
a fonctionné pour moi.
La raison d'être de kubernetes est qu'elle gère les conteneurs pour vous afin que vous n'ayez pas à vous soucier autant de leur cycle de vie.
Puisque vous avez une configuration deployment
qui utilise replica set
. Vous pouvez supprimer le pod en utilisant kubectl 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 individuels dans des pods annule tous les avantages des kubernetes.
Tuer le processus spécifié dans CMD
/ENTRYPOINT
de Dockerfile fonctionne pour moi. (Le conteneur redémarre automatiquement)
Le redémarrage n'était pas autorisé dans mon conteneur, je devais donc utiliser cette solution de contournement.
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, restart:
1) Mettre l'échelle à zéro:
kubectl scale deployment <<name>> --replicas=0 -n service
La commande ci-dessus mettra fin à tous vos pods avec le nom <<name>>
2) Pour redémarrer le module, définissez les répliques sur plus de 0.
kubectl scale deployment <<name>> --replicas=2 -n service
La commande ci-dessus va redémarrer vos pods avec 2 réplicas.
Il y avait un problème dans le pod coredns
, j'ai supprimé ce pod en
kubectl delete pod -n=kube-system coredns-fb8b8dccf-8ggcf
Son pod va redémarrer automatiquement.
Le conteneur et le conteneur sont tous deux éphémères. Essayez d’utiliser la commande suivante pour arrêter le conteneur spécifique. Le cluster k8s redémarre un nouveau conteneur.
kubectl exec -it [POD_NAME] -c [CONTAINER_NAME] -- /bin/sh -c "kill 1"
Nous utilisons une ligne de commande très pratique pour forcer le redéploiement de nouvelles images sur le module d'intégration.
Nous avons remarqué que nos conteneurs Alpine exécutent tous leur commande "maintien" sur le PID 5. Par conséquent, lui envoyer un signal SIGTERM
détruit le conteneur. imagePullPolicy
étant défini sur Always
, 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