Comando per eliminare tutti i pod in tutti gli spazi dei nomi di kubernetes


154

Osservando i documenti, esiste una chiamata API per eliminare un pod "a", ma esiste un modo per eliminare tutti i pod in tutti gli spazi dei nomi?

Risposte:


283

Non c'è alcun comando per fare esattamente quello che hai chiesto.

Ecco alcune corrispondenze ravvicinate.

Puoi eliminare tutti i pod in un singolo spazio dei nomi con questo comando:

kubectl delete --all pods --namespace=foo

Puoi anche eliminare tutte le distribuzioni nello spazio dei nomi che eliminerà tutti i pod associati alle distribuzioni corrispondenti allo spazio dei nomi

kubectl delete --all deployments --namespace=foo

Puoi eliminare tutti gli spazi dei nomi e tutti gli oggetti in ogni spazio dei nomi (ma non gli oggetti senza spazio, come nodi e alcuni eventi) con questo comando:

kubectl delete --all namespaces

Tuttavia, quest'ultimo comando non è probabilmente qualcosa che vuoi fare, poiché eliminerà le cose nello spazio dei nomi del sistema kube, il che renderà il tuo cluster non utilizzabile.

Questo comando eliminerà tutti gli spazi dei nomi tranne kube-system, che potrebbero essere utili:

for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
  kubectl delete ns $each
done

1
Con la versione corrente di k8s, il comando "kubectl delete --all namespace" non elimina più le cose di sistema ... Dice ad esempio: namespace "default" è proibito: questo spazio dei nomi non può essere cancellato
Kai Wähner

Questo elimina la distribuzione o solo i pod?
Sinaesthetic

1
kubectl delete pods --all --all-namespacessembra funzionare a volte (non sono sicuro di ciò che lo fa funzionare in alcuni ambienti e non in altri). Funziona bene dal mio host bastione ma non dal laptop. Entrambi eseguono debian ed entrambi eseguono la stessa versione di kubectl (versione cluster 1.13)
Patrick W

@ KaiWähner se non sbaglio le cose relative al sistema k8 sono nello kube-systemspazio dei nomi. Nell'esempio del messaggio, posso vedere lo defaultspazio dei nomi. Viene kube-systemeliminato con il comando che hai allegato?
George Tseres,

79
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

per sbarazzarsi di quei fastidiosi controller di replica.


4
Questo è sbagliato. Questo elimina solo nello spazio dei nomi corrente.
Aiutatemi il

Aggiungi il flag -n, ma mi dispiace che sia per un pod alla volta e non tutti in una volta
grbonk

1
Ti manca inganche l'eliminazione degli
ingressi

2
potresti voler aggiungere anche "statefulset" (se applicabile). Altrimenti continuerà a biforcare nuovi pod anche dopo aver eseguito il comando sopra!
buch11

15

Hai solo bisogno seddi fare questo:

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

spiega:

  1. usa il comando kubectl get pods --all-namespacesper ottenere l'elenco di tutti i pod in tutti gli spazi dei nomi.
  2. usa l' --no-headers=trueopzione per nascondere le intestazioni.
  3. utilizzare il scomando di sedper recuperare le prime due parole, che rappresentano namespacee pod's namerispettivamente, quindi assemblare il deletecomando utilizzandole.
  4. la finale deletedi comando è come: kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. utilizzare il emodificatore di scomando per eseguire il comando assemblato sopra, che eseguirà i deletelavori effettivi .

Per evitare di eliminare i pod nello kube-systemspazio dei nomi, è sufficiente aggiungere grep -v kube-systemper escludere lo kube-systemspazio dei nomi prima del sedcomando.


Puoi anche rilasciarlo --all-namespacesse non vuoi eliminare i pod nello kube-systemspazio dei nomi
ianstarz,

Quale sarà il comando per eliminare solo pochi pod? Esempio: ho girato 20 Pod e ora desidero mantenere solo 1.
Jason

11

Puoi semplicemente correre

kubectl delete all --all --all-namespaces
  • Il primo allindica i tipi di risorse comuni (pod, replicaset, distribuzioni, ...)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • Il secondo --allsignifica selezionare tutte le risorse dei tipi selezionati


Si noti che allnon include:

  • risorse senza spazio dei nomi (ad es. clusterrolebindings, clusterroles, ...)
  • configmaps
  • rolebindings
  • ruoli
  • segreti
  • ...

Per pulire perfettamente,

  • potresti usare altri strumenti (es. Helm, Kustomize, ...)
  • potresti usare uno spazio dei nomi.
  • potresti usare le etichette quando crei risorse.

2

Ecco un one-liner che può essere esteso con grep per filtrare per nome.

kubectl get pods -o jsonpath="{.items[*].metadata.name}" | \
tr " " "\n" | \
xargs -i -P 0 kubectl delete pods {}


0

Se disponi già di pod ricreati, pensa prima di eliminare tutte le distribuzioni

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

Basta sostituire NAMSPACE e DEPLOYMENT con quelli corrispondenti, è possibile ottenere tutte le informazioni sulle distribuzioni con il comando seguente

kubectl get deployments --all-namespaces

0

Il plug-in bulk di Kubectl (bulk-action su krew) può essere utile per te, ti dà operazioni di massa su risorse selezionate. Questo è il comando per eliminare i pod

 ' kubectl bulk pods -n namespace delete '

Puoi controllare i dettagli in questo


0

Creo un codice Python per eliminare tutto nello spazio dei nomi

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")

e poi

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

0

K8s funziona completamente sul fondamentale dello spazio dei nomi. se ti piace rilasciare tutte le risorse relative allo spazio dei nomi specificato.

è possibile utilizzare quanto segue:

kubectl elimina lo spazio dei nomi k8sdemo-app

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.