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?
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
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all
de se débarrasser d’eux aussi des contrôleurs de réplication embêtants.
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:
kubectl get pods --all-namespaces
pour obtenir la liste de tous les pods de tous les espaces-noms.--no-headers=true
pour masquer les en-têtes.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. delete
ressemble à: kubectl --namespace kube-system delete pod heapster-eq3yw
.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
.
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
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 {}
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.
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
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