J'étais fatigué de supprimer un contrôleur de réplication avec 12 pods et je pouvais voir que certains des pods restaient bloqués à l'état de fin. Ma configuration Kubernetes consiste en un maître et trois minons installés dans Ubuntu VMS. Quelle pourrait être la raison de ce problème?
NAME READY STATUS RESTARTS AGE
pod-186o2 1/1 Terminating 0 2h
pod-4b6qc 1/1 Terminating 0 2h
pod-8xl86 1/1 Terminating 0 1h
pod-d6htc 1/1 Terminating 0 1h
pod-vlzov 1/1 Terminating 0 1h
Vous pouvez utiliser la commande suivante pour supprimer le POD avec force.
kubectl delete pod NAME --grace-period = 0 --force
Force la suppression du pod:
kubectl delete pod --grace-period=0 --force --namespace <NAMESPACE> <PODNAME>
L'indicateur --force
est obligatoire.
Supprimez le bloc de finaliseurs de la ressource (pod, déploiement, ds etc ...)
"finalizers": [
"foregroundDeletion"
]
Réponse pratique - vous pouvez toujours supprimer un pod de terminaison en lançant:
kubectl delete pod NAME --grace-period=0
Réponse historique - Il existait un problème dans la version 1.1 dans lequel les pods étaient parfois bloqués à l'état Terminating si leurs nœuds étaient supprimés du cluster de manière non propre.
J'ai trouvé cette commande plus simple:
for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done
Il supprimera tous les pods en statut Terminating dans un espace de noms par défaut.
Dans mon cas, l'option --force
n'a pas vraiment fonctionné. Je pouvais encore voir le pod! Il était bloqué en mode Terminating/Unknown. Donc après avoir couru
kubectl delete pods <pod> -n redis --grace-period=0 --force
Iran
kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
Je suis tombé sur cela récemment en supprimant l’espace de noms Rook Ceph - il est resté bloqué dans l’état Terminating.
La seule chose qui a aidé a été de supprimer le finalizer de kubernetes en appelant directement k8s api avec curl comme suggéré ici .
kubectl get namespace rook-ceph -o json > tmp.json
tmp.json
(laisser le tableau vide "finalizers": []
)kubectl proxy
dans un autre terminal à des fins d'authentification et exécuter la demande suivante de curl au port renvoyécurl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize
Démontage détaillé de la tour ceph ici .
Si --grace-period=0
ne fonctionne pas, vous pouvez alors:
kubectl delete pods <pod> --grace-period=0 --force
Je suis tombé sur cela récemment pour libérer des ressources dans mon cluster. voici la commande pour les supprimer tous.
kubectl get pods --all-namespaces | grep Terminating | while read line; do
pod_name=$(echo $line | awk '{print $2}' ) name_space=$(echo $line | awk
'{print $1}' ); kubectl delete pods $pod_name -n $name_space --grace-period=0 --force;
done
espérons que cela aide quelqu'un qui lit ceci
La question initiale est " Quelle peut être la raison de ce problème? " et la réponse est présentée à l'adresse https://github.com/kubernetes/kubernetes/issues/51835 & https://github.com/kubernetes/kubernetes/issues/65569 & see https://www.bountysource.com/ issues/33241128-impossibilité d'éliminer un conteneur ou une ressource occupée
Cela est dû au fait que le montage du menu fixe fuit dans un autre espace de noms.
Vous pouvez vous connecter à l'hôte pod pour enquêter.
minikube ssh
docker container ps | grep <id>
docker container stop <id>