Polecenie usunięcia wszystkich podów we wszystkich przestrzeniach nazw Kubernetes

154

Po przejrzeniu dokumentów pojawia się wywołanie API w celu usunięcia poda „a”, ale czy istnieje sposób na zabicie wszystkich podów we wszystkich przestrzeniach nazw?

user_mda
źródło

Odpowiedzi:

281

Nie ma polecenia, aby zrobić dokładnie to, o co prosiłeś.

Oto kilka bliskich dopasowań.

Możesz usunąć wszystkie pody w pojedynczej przestrzeni nazw za pomocą tego polecenia:

kubectl delete --all pods --namespace=foo

Możesz również usunąć wszystkie wdrożenia w przestrzeni nazw, co spowoduje usunięcie wszystkich podów dołączonych do wdrożeń odpowiadających przestrzeni nazw

kubectl delete --all deployments --namespace=foo

Możesz usunąć wszystkie przestrzenie nazw i każdy obiekt w każdej przestrzeni nazw (ale nie obiekty bez przestrzeni nazw, takie jak węzły i niektóre zdarzenia) za pomocą tego polecenia:

kubectl delete --all namespaces

Jednak to drugie polecenie prawdopodobnie nie jest czymś, co chcesz zrobić, ponieważ usunie elementy w przestrzeni nazw kube-system, co spowoduje, że twój klaster nie będzie nadawał się do użytku.

To polecenie usunie wszystkie przestrzenie nazw z wyjątkiem kube-system, co może być przydatne:

for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
  kubectl delete ns $each
done
Eric Tune
źródło
1
W obecnej wersji k8s polecenie "kubectl delete --all namespaces" nie usuwa już elementów systemu ... Mówi np., Że przestrzenie nazw "default" jest zabronione: ta przestrzeń nazw nie może zostać usunięta
Kai Wähner
Czy spowoduje to usunięcie wdrożenia, czy tylko pody?
Sinaesthetic
1
kubectl delete pods --all --all-namespaceswydaje się czasami działać (nie wiem, co powoduje, że działa w niektórych środowiskach, a nie w innych). Działa dobrze z mojego hosta bastionu, ale nie z laptopa. Oba z systemem Debian i oba z tą samą wersją kubectl (wersja klastra 1.13)
Patrick W
@ KaiWähner, jeśli się nie mylę, rzeczy związane z systemem k8s znajdują się w kube-systemprzestrzeni nazw. W przykładzie wiadomości widzę defaultprzestrzeń nazw. Został kube-systemusunięty wraz z dołączonym poleceniem?
George Tseres
79
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

pozbyć się ich też nieznośnych kontrolerów replikacji.

Jason
źródło
4
To jest źle. To usuwa tylko w bieżącej przestrzeni nazw.
Proszę o pomoc
Dodaj flagę -n, ale przepraszam, że dotyczy to jednego
zasobnika
1
Brakuje Ci ingrównież usuwania danych
wejściowych
2
możesz również chcieć dodać „statefulset” (jeśli dotyczy). W przeciwnym razie będzie nadal rozwidlać nowe strąki nawet po wykonaniu polecenia!
buch11
15

Po prostu musisz sedto zrobić:

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

Wyjaśnia:

  1. użyj polecenia, kubectl get pods --all-namespacesaby uzyskać listę wszystkich podów we wszystkich przestrzeniach nazw.
  2. użyj --no-headers=trueopcji, aby ukryć nagłówki.
  3. użyj spolecenia of, sedaby pobrać pierwsze dwa słowa, które reprezentują odpowiednio namespacei pod's name, a następnie ułóż deletepolecenie za ich pomocą.
  4. ostateczna deletekomenda jest podobna: kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. użyj emodyfikatora spolecenia, aby wykonać powyższe polecenie, które wykona rzeczywistą pracę delete.

Aby uniknąć usuwania podów w kube-systemprzestrzeni nazw, wystarczy dodać, grep -v kube-systemaby wykluczyć kube-systemprzestrzeń nazw przed sedpoleceniem.

Weike
źródło
Możesz też po prostu upuścić, --all-namespacesjeśli nie chcesz usuwać kube-system
podów
Jakie będzie polecenie usunięcia tylko kilku podów? Przykład: Zakręciłem 20 kapsułami, a teraz chcę zachować tylko 1.
Jason
10

Możesz po prostu biec

kubectl delete all --all --all-namespaces
  • Pierwsza alloznacza typowe rodzaje zasobów (pody, repliki, wdrożenia, ...)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • Drugi --alloznacza wybranie wszystkich zasobów wybranych rodzajów


Pamiętaj, że allnie obejmuje:

  • zasoby bez przestrzeni nazw (np. clusterrolebindings, clusterroles, ...)
  • configmaps
  • rolebindings
  • role
  • tajniki
  • ...

Aby idealnie posprzątać,

  • możesz użyć innych narzędzi (np. Helm, Kustomize, ...)
  • możesz użyć przestrzeni nazw.
  • możesz użyć etykiet podczas tworzenia zasobów.
Mo K
źródło
2

Oto jeden wiersz, który można rozszerzyć za pomocą grep, aby filtrować według nazwy.

kubectl get pods -o jsonpath="{.items[*].metadata.name}" | \
tr " " "\n" | \
xargs -i -P 0 kubectl delete pods {}
Claudio Fahey
źródło
1
kubectl delete po,ing,svc,pv,pvc,sc,ep,rc,deploy,replicaset,daemonset --all -A
Braconnot_P
źródło
Bądź ostrożny! Ponieważ PV nie ma przestrzeni nazw, powyższe polecenie usunie wszystkie PV z całego klastra.
Ahmad Ahmadi
0

Jeśli masz już utworzone ponownie pody, pomyśl najpierw o usunięciu wszystkich wdrożeń

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

Po prostu zamień NAMSPACE i DEPLOYMENT na odpowiednie, możesz uzyskać wszystkie informacje o wdrożeniach za pomocą następującego polecenia

kubectl get deployments --all-namespaces
Smaillns
źródło
0

Wtyczka Kubectl bulk (zbiorcza akcja na krew) może ci się przydać, daje ci masowe operacje na wybranych zasobach. To jest polecenie do usuwania podów

 ' kubectl bulk pods -n namespace delete '

Możesz sprawdzić szczegóły w tym

Emre Odabaş
źródło
0

Tworzę kod Pythona, aby usunąć wszystko w przestrzeni nazw

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

i wtedy

kubectl get all -n kong -o json | python delall.py
user2218085
źródło
0

K8s całkowicie działa na fundamentach przestrzeni nazw. jeśli chcesz zwolnić cały zasób związany z określoną przestrzenią nazw.

możesz skorzystać z wymienionych poniżej:

kubectl delete przestrzeń nazw k8sdemo-app

Sachin Mishra
źródło