web-dev-qa-db-fra.com

kubernetes redémarre le conteneur dans le pod

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
29
s5s

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)

42
Matthew L Daniel

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.

23
Zsolt Katona

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.

6
Innocent Anigbo

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.

2
Kevin

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.

2
Ajay Reddy

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.

1
j3ffyang

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"

1
ROY

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
0
Alexis LEGROS