web-dev-qa-db-fra.com

Commande pour supprimer tous les pods dans tous les espaces de noms kubernetes

En regardant la doc, il y a un appel api pour supprimer 'un' pod, y a-t-il un moyen de tuer tous les pods dans tous les espaces de noms?

56
user_mda

Il n'y a aucune commande pour faire exactement ce que vous avez demandé.

Voici quelques correspondances proches.

Vous pouvez supprimer tous les pods d'un seul espace-noms avec cette commande:

kubectl delete --all pods --namespace=foo

Vous pouvez supprimer tous les espaces de noms et tous les objets de chaque espace de noms (mais pas les objets non nommés, comme les nœuds et certains événements) avec cette commande:

kubectl delete --all namespaces

Cependant, cette dernière commande n'est probablement pas quelque chose que vous souhaitez faire, car elle supprimera des éléments de l'espace de noms kube-system, ce qui rendra votre cluster inutilisable.

Cette commande supprimera tous les espaces de noms sauf kube-system, ce qui pourrait être utile:

for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
  kubectl delete ns $each
done
116
Eric Tune
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

de se débarrasser d’eux aussi des contrôleurs de réplication embêtants. 

28
jason

Vous avez juste besoin de sed pour faire ceci:

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

Explique:

  1. utilisez la commande kubectl get pods --all-namespaces pour obtenir la liste de tous les pods de tous les espaces-noms.
  2. utilisez l'option --no-headers=true pour masquer les en-têtes.
  3. utilisez la commande s de sed pour récupérer les deux premiers mots, qui représentent respectivement namespace et pod's name, puis assemblez la commande delete à l'aide de ces mots. 
  4. la dernière commande delete ressemble à: kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. utilisez le modificateur e de s pour exécuter la commande assemblée ci-dessus, qui exécutera les travaux actuels de delete.

Pour éviter de supprimer des modules dans l'espace de noms kube-system, il suffit d'ajouter grep -v kube-system pour exclure l'espace de noms kube-system avant la commande sed.

8
Weike

Le plugin Kubectl bulk (action en bloc sur krew) peut vous être utile, il vous permet d'effectuer des opérations en bloc sur des ressources sélectionnées. C'est la commande pour supprimer des pods

 ' kubectl bulk pods -n namespace delete '

Vous pouvez vérifier les détails dans this

0
Emre Odabaş

Voici un one-liner qui peut être étendu avec grep pour filtrer par nom.

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

Cela supprimera tous les pods partout.

Il en va de même pour les services, les déploiements, les cartes de configuration et les travaux.

0
David Hunsicker

Si vous avez déjà des pods qui sont recréés, pensez à supprimer d'abord tous les déploiements.

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

Il suffit de remplacer le NAMSPACE et le DEPLOYMENT par ceux correspondants, vous pouvez obtenir toutes les informations sur les déploiements à l'aide de la commande suivante

kubectl get deployments --all-namespaces
0
Smaillns

Je crée un code python pour tout supprimer dans l'espace de noms

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

et alors

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