156 votes

comment arrêter/pause un pod dans kubernetes

J'ai un pod MySQL qui fonctionne dans mon cluster.
J'ai besoin d'interrompre temporairement le fonctionnement d'un pod sans le supprimer, quelque chose de similaire à docker où la fonction docker stop container-id cmd va arrêter le conteneur mais pas le supprimer.
Existe-t-il des commandes disponibles dans Kubernetes pour mettre en pause/arrêter un pod ?

1 votes

Cette question est ce qui atterrit les gens ici et obtenir leurs réponses, mais la question a reçu seulement moins de la moitié des upvotes que la réponse acceptée

273voto

sulabh chaturvedi Points 701

Ainsi, comme d'autres l'ont souligné, Kubernetes ne prend pas en charge l'arrêt/pause de l'état actuel du pod et la reprise en cas de besoin. Cependant, vous pouvez toujours y parvenir en n'ayant aucun déploiement fonctionnel, c'est-à-dire en fixant le nombre de répliques à 0.

kubectl scale --replicas=0 deployment/<your-deployment>

voir l'aide

# Set a new size for a Deployment, ReplicaSet, Replication Controller, or StatefulSet.
kubectl scale --help

Scale permet également aux utilisateurs de spécifier une ou plusieurs conditions préalables à l'action de mise à l'échelle.

Si --current-replicas o --resource-version est spécifié, il est validé avant que la balance ne soit tentée, et il est garantie que la précondition est vraie lorsque la balance est envoyée au serveur.

Exemples :

  # Scale a replicaset named 'foo' to 3.
  kubectl scale --replicas=3 rs/foo

  # Scale a resource identified by type and name specified in "foo.yaml" to 3.
  kubectl scale --replicas=3 -f foo.yaml

  # If the deployment named mysql's current size is 2, scale mysql to 3.
  kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

  # Scale multiple replication controllers.
  kubectl scale --replicas=5 rc/foo rc/bar rc/baz

  # Scale statefulset named 'web' to 3.
  kubectl scale --replicas=3 statefulset/web

0 votes

Merci pour l'astuce, je pense que <votre-pod> devrait être <votre-nom-de-déploiement>.

0 votes

D'après ce que j'ai compris, s'il y a un hpa, ce n'est pas possible.

0 votes

C'est exact. C'est la raison pour laquelle j'ai commencé par une déclaration, ce que tous ont suggéré, et la réponse est principalement dans le contexte de la question.

13voto

P Ekambaram Points 1998

Non. Il n'est pas possible d'arrêter un pod et de le reprendre plus tard si nécessaire. Cependant, vous pouvez envisager l'approche suivante.

Dans k8s, les pods sont abstraits en utilisant un service. Un moyen auquel je pense pour isoler le(s) pod(s) est de mettre à jour le sélecteur de pod dans la définition du service. De cette façon, vous pouvez contrôler le trafic vers le(s) pod(s) en utilisant la définition du service. Lorsque vous souhaitez rétablir le trafic, remettez la valeur du sélecteur de pods à ce qu'elle était dans la définition du service.

4 votes

Dommage que cela n'aide pas les pods dont la source est kafka/eventhub (et je souhaite les mettre en pause, lancer de nouveaux pods et si cela échoue reprendre les anciens).

0 votes

Bonjour @MartinKosicky , c'est exactement mon cas d'utilisation, j'ai un conteneur qui consomme à partir de eventhubs via le protocole kafka. avez-vous trouvé une solution ? Les seuls tworkarrounds qui me viennent à l'esprit sont laids (changement d'identifiants, multiprocessus dans un conteneur au lieu de plusieurs conteneurs dans un pod, etc).

0 votes

@karlos9o nous avons en fait juste supprimé les anciens pods, depuis qu'il s'agit de eventhub/kafka sourced, le zéro downtime n'est pas si important ici. Mais si vous le voulez vraiment, vous pouvez kubectl apply et modifier certaines configurations (pause de traitement). Cela devrait déclencher le redéploiement des pods.

7voto

Anjana Silva Points 391

Avec Kubernets, il n'est pas possible d'arrêter/de mettre en pause un Pod. Cependant, vous pouvez supprimer un Pod, étant donné que vous avez le manifeste pour le ramener à nouveau.

Si vous souhaitez supprimer un Pod, vous pouvez exécuter la procédure suivante kubectl commandement :

kubectl delete -n default pod <your-pod-name>

5 votes

La question ne porte pas sur la suppression d'un pod.

9 votes

Je pense que cette réponse est valable. Il n'y a rien de tel que d'"arrêter" une capsule.

21 votes

Le pod reviendra immédiatement car le replicaset le recréera - c'est son travail. Cela ne répond donc pas à la question.

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