Ich habe versucht, eine zu löschen ReplicationController
mit 12 Pods und ich konnte sehen, dass einige der Pods im Terminating
Status stecken bleiben .
Mein Kubernetes-Cluster besteht aus einem Steuerebenenknoten und drei Arbeitsknoten, die auf virtuellen Ubuntu-Maschinen installiert sind.
Was könnte der Grund für dieses Problem sein?
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
kubernetes
Dimuthu
quelle
quelle
Antworten:
Mit dem folgenden Befehl können Sie den POD zwangsweise löschen.
quelle
--force
um die Pods teminieren zu lassen.Löschen des Pods erzwingen:
Die
--force
Flagge ist obligatorisch.quelle
kube-system
Namespace angezeigt .ktl get pods -o custom-columns=:metadata.name | xargs kubectl delete pod --force --grace-period=0
Löschen Sie den Finalizer-Block aus der Ressource (Pod, Bereitstellung, DS usw.). Yaml:
quelle
delete -grace-period=0 --force
dies nicht der Fall war . Ich würde mich auch über eine Ausarbeitung dessen freuen, was es genau macht.Praktische Antwort - Sie können einen terminierenden Pod jederzeit löschen, indem Sie Folgendes ausführen:
Historische Antwort - In Version 1.1 gab es ein Problem, bei dem Pods manchmal im Status "Beenden" gestrandet sind, wenn ihre Knoten unrein aus dem Cluster entfernt wurden.
quelle
kubectl delete pod NAME --grace-period=0
kubectl delete ...
eineSIG_TERM
Anforderung an den Container gesendet wird. Was aber, wenn der Container nach Ablauf der Nachfrist noch läuft? Ich habe ein paar PodsTerminating
festgeklebt, einige in go geschrieben, einige in nodejs. Der replicationController wurde entfernt und der Container läuft nochkubectl delete pod PODNAME --grace-period=0
arbeitete für mich wie von Clayton vorgeschlagen.Ich fand diesen Befehl einfacher:
Alle Pods im Status "Beenden" im Standard-Namespace werden gelöscht.
quelle
kube-system
usefor p in $(kubectl get pods -n kube-system| grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force -n kube-system;done
In meinem Fall hat die
--force
Option nicht ganz funktioniert. Ich konnte die Kapsel immer noch sehen! Es steckte im Terminierungs- / Unbekannten-Modus fest. Also nach dem LaufenIch rannte
quelle
Wenn
--grace-period=0
es nicht funktioniert, können Sie Folgendes tun:quelle
Ich bin kürzlich darauf gestoßen, als ich den Rook Ceph-Namespace entfernt habe - er blieb im Abschlusszustand stecken.
Das einzige, was geholfen hat, war das Entfernen des Kubernetes-Finalizers durch direktes Aufrufen der k8s-API mit Curl, wie hier vorgeschlagen .
kubectl get namespace rook-ceph -o json > tmp.json
tmp.json
(leeres Array lassen"finalizers": []
)kubectl proxy
zu Authentifizierungszwecken ein anderes Terminal aus und führen Sie die folgende Curl-Anforderung an den zurückgegebenen Port auscurl -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
Detaillierter Abriss des Turm-Cephs hier .
quelle
Die ursprüngliche Frage lautet " Was könnte der Grund für dieses Problem sein? ". Die Antwort wird unter https://github.com/kubernetes/kubernetes/issues/51835 & https://github.com/kubernetes/kubernetes/issues erläutert / 65569 & siehe https://www.bountysource.com/issues/33241128-unable-to-remove-a-stopped-container-device-or-resource-busy
Es wird durch Docker-Mount verursacht, der in einen anderen Namespace gelangt.
Sie können sich beim Pod-Host anmelden, um dies zu untersuchen.
quelle
Ich bin kürzlich darauf gestoßen, um Ressourcen in meinem Cluster freizugeben. Hier ist der Befehl, um alle zu löschen.
hoffe, das hilft jemandem, der das liest
quelle