Befehl zum Löschen aller Pods in allen kubernetes-Namespaces

154

Beim Betrachten der Dokumente gibt es einen API-Aufruf zum Löschen eines Pods. Gibt es jedoch eine Möglichkeit, alle Pods in allen Namespaces zu löschen?

user_mda
quelle

Antworten:

281

Es gibt keinen Befehl, genau das zu tun, was Sie gefragt haben.

Hier sind einige enge Übereinstimmungen.

Mit diesem Befehl können Sie alle Pods in einem einzigen Namespace löschen:

kubectl delete --all pods --namespace=foo

Sie können auch alle Bereitstellungen im Namespace löschen, wodurch alle Pods gelöscht werden, die mit den dem Namespace entsprechenden Bereitstellungen verknüpft sind

kubectl delete --all deployments --namespace=foo

Mit diesem Befehl können Sie alle Namespaces und jedes Objekt in jedem Namespace löschen (jedoch keine Objekte ohne Namespace wie Knoten und einige Ereignisse):

kubectl delete --all namespaces

Der letztere Befehl ist jedoch wahrscheinlich nicht das, was Sie tun möchten, da er Dinge im Namespace des Kubesystems löscht, wodurch Ihr Cluster nicht mehr verwendbar wird.

Dieser Befehl löscht alle Namespaces außer kube-system, was nützlich sein kann:

for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
  kubectl delete ns $each
done
Eric Tune
quelle
1
Mit der aktuellen Version von k8s löscht der Befehl "kubectl delete --all namespaces" das Systemmaterial nicht mehr ... Es heißt zB: Namespaces "default" ist verboten: Dieser Namespace darf nicht gelöscht werden
Kai Wähner
Löscht dies die Bereitstellung oder nur die Pods?
Sinaesthetic
1
kubectl delete pods --all --all-namespacesscheint manchmal zu funktionieren (nicht sicher, warum es in einigen Umgebungen und nicht in anderen funktioniert). Es funktioniert gut von meinem Bastion Host, aber nicht von Laptop. Beide laufen Debian und beide laufen die gleiche Version von Kubectl (Cluster-Version 1.13)
Patrick W
@ KaiWähner Wenn ich mich nicht irre, befinden sich die systembezogenen Dinge des k8 im kube-systemNamespace. Im Nachrichtenbeispiel kann ich den defaultNamespace sehen. Wird kube-systemmit dem von Ihnen angehängten Befehl gelöscht?
George Tseres
79
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

um sie auch lästige Replikations-Controller loszuwerden.

Jason
quelle
4
Das ist falsch. Dies wird nur im aktuellen Namespace gelöscht.
Bitte helfen Sie
Fügen Sie die -n-Flagge hinzu, aber es tut mir leid, dass dies jeweils für einen Pod gilt und nicht alle auf einmal
grbonk
1
Sie vermissen ingauch
Eingriffe
2
Möglicherweise möchten Sie auch "statefulset" hinzufügen (falls zutreffend). Andernfalls werden immer wieder neue Pods gegabelt, selbst nachdem Sie den Befehl ausgeführt haben!
Buch11
15

Sie müssen nur Folgendes sedtun:

kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(\S+)\s+(\S+).*/kubectl --namespace \1 delete pod \2/e'

Erklärt:

  1. Verwenden Sie den Befehl kubectl get pods --all-namespaces, um die Liste aller Pods in allen Namespaces abzurufen.
  2. Verwenden Sie die --no-headers=trueOption, um die Überschriften auszublenden.
  3. Verwenden Sie den sBefehl von sed, um die ersten beiden Wörter abzurufen, die jeweils repräsentieren, namespaceund setzen Sie pod's namedann den deleteBefehl mit ihnen zusammen.
  4. Der letzte deleteBefehl lautet wie folgt : kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. Verwenden Sie den eModifikator des sBefehls, um den oben zusammengestellten Befehl auszuführen, der die eigentlichen deleteArbeiten ausführt .

Um das Löschen von Pods im kube-systemNamespace zu vermeiden , müssen Sie nur hinzufügen grep -v kube-system, um den kube-systemNamespace vor dem sedBefehl auszuschließen .

Weike
quelle
Sie können auch einfach --all-namespaceslöschen , wenn Sie keine Pods im kube-systemNamespace löschen möchten
ianstarz
Was ist der Befehl, um nur wenige Pods zu löschen? Beispiel: Ich hatte Spin 20 Pod und möchte jetzt nur 1 behalten.
Jason
10

Sie können einfach laufen

kubectl delete all --all --all-namespaces
  • Der erste allbedeutet die gängigen Ressourcentypen (Pods, Replikatsätze, Bereitstellungen, ...)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • Das zweite --allbedeutet, alle Ressourcen der ausgewählten Arten auszuwählen


Beachten Sie, dass allFolgendes nicht enthalten ist:

  • Ressourcen ohne Namespace (z. B. Clusterrollenbindungen, Clusterrollen, ...)
  • Konfigurationskarten
  • Rollenbindungen
  • Rollen
  • Geheimnisse
  • ...

Um perfekt aufzuräumen,

  • Sie könnten andere Werkzeuge verwenden (z. B. Helm, Kustomize, ...)
  • Sie könnten einen Namespace verwenden.
  • Sie können beim Erstellen von Ressourcen Beschriftungen verwenden.
Mo K.
quelle
2

Hier ist ein Einzeiler, der mit grep erweitert werden kann, um nach Namen zu filtern.

kubectl get pods -o jsonpath="{.items[*].metadata.name}" | \
tr " " "\n" | \
xargs -i -P 0 kubectl delete pods {}
Claudio Fahey
quelle
1
kubectl delete po,ing,svc,pv,pvc,sc,ep,rc,deploy,replicaset,daemonset --all -A
Braconnot_P
quelle
Achtung! Da PV keinen Namespace hat, werden mit dem obigen Befehl alle PVs clusterweit entfernt.
Ahmad Ahmadi
0

Wenn Sie bereits Pods haben, die neu erstellt werden, sollten Sie zuerst alle Bereitstellungen löschen

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

Ersetzen Sie einfach den NAMSPACE und die DEPLOYMENT durch die entsprechenden. Sie können alle Bereitstellungsinformationen mit dem folgenden Befehl abrufen

kubectl get deployments --all-namespaces
Smaillns
quelle
0

Das Kubectl-Bulk-Plugin (Bulk-Action auf Krew) kann für Sie nützlich sein. Es bietet Ihnen Bulk-Operationen für ausgewählte Ressourcen. Dies ist der Befehl zum Löschen von Pods

 ' kubectl bulk pods -n namespace delete '

Sie könnten überprüfen Details in dieser

Emre Odabaş
quelle
0

Ich erstelle einen Python-Code, um alle im Namespace zu löschen

delall.py

import json,sys,os;

obj=json.load(sys.stdin);
for item in obj["items"]:
        os.system("kubectl delete " + item["kind"] + "/" +item["metadata"]["name"] + " -n yournamespace")

und dann

kubectl get all -n kong -o json | python delall.py
user2218085
quelle
0

K8s arbeitet vollständig an der Grundlage des Namespace. Wenn Sie alle Ressourcen freigeben möchten, die sich auf den angegebenen Namespace beziehen.

Sie können die unten genannten verwenden:

kubectl Namespace löschen k8sdemo-app

Sachin Mishra
quelle