179 votes

Qu'adviendra-t-il des pods évincés dans Kubernetes ?

Je viens de voir que certains de mes pods ont été expulsés par Kubernetes. Qu'est-ce qui va leur arriver ? Ils vont rester là comme ça ou je dois les supprimer manuellement ?

4 votes

Témoin du même comportement, j'ai un pod qui a été en Evicted depuis 13 jours maintenant. On dirait que les pods expulsés ne sont pas retirés (ou peut-être est-ce juste un bug).

0 votes

Le contrôleur podgc récupère ces pods échoués/réussis lorsqu'un seuil configurable est atteint.

2 votes

Mes Pods sont expulsés et il y en a 40 au total. Serai-je donc facturé par mois pour ces pods expulsés également ?

134voto

Kalvin Points 386

Une solution de contournement rapide que j'utilise, est de supprimer manuellement tous les pods expulsés après un incident. Vous pouvez utiliser cette commande :

kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c

3 votes

0 votes

Vous devez avoir une faute de frappe, -a L'argument est invalide.

50 votes

Cette réponse (et d'autres réponses similaires) ne répond pas à la question du PO "Que leur arrivera-t-il [si vous ne faites rien] ?".

127voto

ticapix Points 51

Pour supprimer les pods en état d'échec dans l'espace de noms default

kubectl -n default delete pods --field-selector=status.phase=Failed

9 votes

Bizarrement, cela n'apparaît pas lorsque status.phase=Evicted . J'ai réussi à le faire en kubectl -n default delete pods --field-selector=status.phase!=Running . Mais attention, cela supprimerait tout

10 votes

Je suppose qu'il peut être utile d'exécuter kubectl -n default get pods --field-selector=status.phase=Failed au début.

1 votes

Il se débarrasse de la Evicted des gousses pour moi.

40voto

Les pods expulsés doivent être supprimés manuellement. Vous pouvez utiliser la commande suivante pour supprimer tous les pods dans le répertoire Error l'État.

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -

32voto

Simon Tesar Points 850

Selon qu'il s'agisse d'une seuil d'éviction qui a été atteint, les Containers du Pod seront résiliés avec ou sans période de grâce, le PodPhase sera marqué comme Failed et le Pod est supprimé. Si votre application est exécutée dans le cadre d'un déploiement, par exemple, un autre pod sera créé et planifié par Kubernetes, probablement sur un autre nœud ne dépassant pas ses seuils d'éviction.

Sachez que l'éviction ne doit pas nécessairement être provoquée par des seuils, mais qu'elle peut également être invoquée par l'intermédiaire de kubectl drain à vider un nœud ou manuellement via le API Kubernetes .

4 votes

Oui, mon pod provient d'un déploiement, et je vois un autre pod fonctionner sur un autre noeud, mais les pods précédemment expulsés sont également présents.

0 votes

Comment déterminez-vous qu'ils sont "aussi là" ? Quelle commande vous le montre exactement ?

0 votes

Juste kubectl get pods -n mynamespace

3voto

ffghfgh Points 224

L'équivalent OpenShift de la commande de Kalvin pour supprimer tous les pods 'Evicted' :

eval "$(oc get pods --all-namespaces -o json | jq -r '.items[] | select(.status.phase == "Failed" and .status.reason == "Evicted") | "oc delete pod --namespace " + .metadata.namespace + " " + .metadata.name')"

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