Ich habe Pods mit Befehl gestartet
$ kubectl run busybox --image=busybox --restart=Never --tty -i --generator=run-pod/v1
Es ist etwas schiefgegangen, und jetzt kann ich das nicht löschen Pod
.
Ich habe versucht, die unten beschriebenen Methoden zu verwenden, aber die werden Pod
immer wieder neu erstellt.
$ kubectl delete pods busybox-na3tm
pod "busybox-na3tm" deleted
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
busybox-vlzh3 0/1 ContainerCreating 0 14s
$ kubectl delete pod busybox-vlzh3 --grace-period=0
$ kubectl delete pods --all
pod "busybox-131cq" deleted
pod "busybox-136x9" deleted
pod "busybox-13f8a" deleted
pod "busybox-13svg" deleted
pod "busybox-1465m" deleted
pod "busybox-14uz1" deleted
pod "busybox-15raj" deleted
pod "busybox-160to" deleted
pod "busybox-16191" deleted
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default busybox-c9rnx 0/1 RunContainerError 0 23s
kubernetes
kubectl
Yman
quelle
quelle
kubectl get all -o name
?kubectl get events
, was diese Objekte erstellt?kubctl get rc
festzustellen, ob ein ReplicationController erstellt wurde. Wenn ja, löschen Sie das und löschen Sie die Pods.kubectl get deployment
kubectl delete deployment <deployment_name>
. Um denkubectl get deployments
Antworten:
Sie müssen die Bereitstellung löschen, wodurch wiederum die Pods und die Replikatsätze https://github.com/kubernetes/kubernetes/issues/24137 gelöscht werden sollten
So listen Sie alle Bereitstellungen auf:
So löschen Sie die Bereitstellung:
Wobei NAMESPACE der Namespace ist, in dem es sich befindet, und DEPLOYMENT der Namespace
name
der Bereitstellung.In einigen Fällen kann es auch aufgrund eines Jobs oder eines Daemonsets ausgeführt werden. Überprüfen Sie Folgendes und führen Sie den entsprechenden Löschbefehl aus.
quelle
kubectl create
Befehl.kubectl get jobs
kubectl delete replicasets,subscriptions,deployments,jobs,services,pods --all -n <namespace>
Anstatt herauszufinden, ob es sich um eine Bereitstellung, ein Deamonset, ein Statefulset handelt ... oder was (in meinem Fall war es ein Replikationscontroller, der immer wieder neue Pods überspannte :) Um festzustellen, was das Image I immer wieder überspannte habe alle Ressourcen mit diesem Befehl erhalten:
kubectl get all
Natürlich können Sie auch alle Ressourcen aus allen Namespaces abrufen:
kubectl get all --all-namespaces
oder definieren Sie den Namespace, den Sie überprüfen möchten:
kubectl get all -n NAMESPACE_NAME
Als ich sah, dass der Replikationscontroller für meine Probleme verantwortlich war, löschte ich ihn:
kubectl delete replicationcontroller/CONTROLLER_NAME
quelle
Wenn Ihr Pod einen ähnlichen Namen hat
name-xxx-yyy
, kann er von einer replicasets.apps mit dem Namen gesteuert werdenname-xxx
. Sie sollten diesen Replikatsatz zuerst löschen, bevor Sie den Pod löschenkubectl delete replicasets.apps name-xxx
quelle
kubectl delete --all jobs -n <namespace>
kubectl get replicasets.apps -n <namespace>
(oder --all-Namespaces)Achten Sie auch auf Stateful Sets
um alle statusbehafteten Mengen in einem Namespace zu löschen
um sie einzeln zu löschen
quelle
In einigen Fällen verschwinden die Pods auch beim Löschen der Bereitstellung nicht. In diesem Fall können Sie den folgenden Befehl ausführen, um das Löschen zu erzwingen.
kubectl delete pods podname --grace-period=0 --force
quelle
Recreate
.Dadurch werden Informationen zu allen Pods, Bereitstellungen, Diensten und Jobs im Namespace bereitgestellt.
Pods können entweder durch Bereitstellungen oder Jobs erstellt werden
Wenn Sie die Bereitstellung oder den Job löschen, kann der Neustart der Pods gestoppt werden.
quelle
Wenn der Pod auch nach dem manuellen Löschen des Pods automatisch neu erstellt wird, wurden diese Pods mithilfe der Bereitstellung erstellt. Wenn Sie eine Bereitstellung erstellen, werden automatisch ReplicaSet und Pods erstellt. Abhängig davon, wie viele Replikate Ihres Pods Sie im Bereitstellungsskript erwähnt haben, wird zunächst diese Anzahl von Pods erstellt. Wenn Sie versuchen, einen Pod manuell zu löschen, werden diese automatisch erneut erstellt.
Ja, manchmal müssen Sie die Pods mit Gewalt löschen. In diesem Fall funktioniert der Befehl force jedoch nicht.
quelle
Anstatt NS zu entfernen, können Sie versuchen, replicaSet zu entfernen
Löschen Sie dann das replicaSet
quelle
In vielen Antworten wird angegeben, dass ein bestimmtes k8s-Objekt gelöscht werden soll. Sie können jedoch mehrere Objekte gleichzeitig löschen , anstatt eines nach dem anderen:
kubectl delete deployments,jobs,services,pods --all -n <namespace>
In meinem Fall führe ich OpenShift- Cluster mit OLM - Operator Lifecycle Manager aus . OLM ist derjenige, der die Bereitstellung steuert. Als ich die Bereitstellung löschte, war es nicht ausreichend, den Neustart der Pods zu verhindern.
Erst als ich OLM und sein Abonnement löschte , waren die Bereitstellung, Dienste und Pods weg.
Listen Sie zuerst alle k8s-Objekte in Ihrem Namespace auf:
OLM ist nicht mit aufgeführt
get all
, daher suche ich speziell danach:Löschen Sie jetzt alle Objekte, einschließlich OLMs, Abonnements, Bereitstellungen, Replikatsätze usw .:
Objekte erneut auflisten - alles weg:
quelle
Nachdem ich ein interaktives Tutorial absolviert hatte, erhielt ich eine Reihe von Pods, Diensten und Bereitstellungen:
Um alles aufzuräumen, hat gut
delete --all
funktioniert:Das ließ mich mit einem leeren Kubernetes-Cluster zurück (was ich denke):
quelle
Wenn Sie einen Job haben, der weiterhin ausgeführt wird, müssen Sie den Job durchsuchen und löschen:
kubectl get job --all-namespaces | grep <name>
und
kubectl delete job <job-name>
quelle
Sie können
kubectl get replicasets
anhand des Alters oder der Zeit nach alten Bereitstellungen suchenLöschen Sie die alte Bereitstellung basierend auf der Zeit, wenn Sie denselben aktuell ausgeführten Anwendungs-Pod löschen möchten
quelle
Ich war auch mit dem Problem konfrontiert. Ich habe den folgenden Befehl verwendet, um die Bereitstellung zu löschen.
Da die Pods jedoch immer noch neu erstellt wurden, überprüfte ich das Replikatset mit dem folgenden Befehl
Bearbeiten Sie dann das Replikatset auf 1 bis 0
quelle
Die Hauptursache für die gestellte Frage war das Spezifikationsattribut für Deployment / Job / Replicasets,
strategy->type
das definiert, was passieren soll, wenn der Pod zerstört wird (entweder implizit oder explizit). In meinem Fall war esRecreate
.Gemäß der Antwort von @ nomad ist das Löschen der Bereitstellungs- / Job- / Replikatsätze die einfache Lösung, um zu vermeiden, dass Sie mit tödlichen Combos experimentieren, bevor Sie den Cluster als Anfänger durcheinander bringen.
Probieren Sie die folgenden Befehle aus, um die Aktionen hinter den Kulissen zu verstehen, bevor Sie mit dem Debuggen beginnen:
quelle
In meinem Fall habe ich über eine YAML-Datei wie bereitgestellt
kubectl apply -f deployment.yaml
und die Lösung scheint darin zu bestehen, über zu löschenkubectl delete -f deployment.yaml
quelle
Ich hatte ein ähnliches Problem: Nach dem Löschen der Bereitstellung (
kubectl delete deploy <name>
) liefen die Pods weiter und wurden nach dem Löschen automatisch neu erstellt (kubectl delete po <name>
).Es stellte sich heraus, dass der zugehörige Replikatsatz aus irgendeinem Grund nicht automatisch gelöscht wurde, und nach dem Löschen von that (
kubectl delete rs <name>
) konnten die Pods gelöscht werden.quelle
Bei Bereitstellungen mit Stateful Sets (oder Diensten, Jobs usw.) können Sie diesen Befehl verwenden:
Dieser Befehl beendet alles, was im angegebenen ausgeführt wird
<NAMESPACE>
Und kraftvoll
quelle