Comando para eliminar todos los pods en todos los espacios de nombres de kubernetes

154

Al mirar los documentos, hay una llamada API para eliminar 'a' pod, pero ¿hay alguna manera de matar todos los pods en todos los espacios de nombres?

user_mda
fuente

Respuestas:

283

No hay un comando para hacer exactamente lo que le pediste.

Aquí hay algunos partidos cercanos.

Puede eliminar todos los pods en un solo espacio de nombres con este comando:

kubectl delete --all pods --namespace=foo

También puede eliminar todas las implementaciones en el espacio de nombres, lo que eliminará todos los pods adjuntos con las implementaciones correspondientes al espacio de nombres

kubectl delete --all deployments --namespace=foo

Puede eliminar todos los espacios de nombres y todos los objetos en cada espacio de nombres (pero no los objetos sin espacios de nombres, como los nodos y algunos eventos) con este comando:

kubectl delete --all namespaces

Sin embargo, el último comando probablemente no sea algo que desee hacer, ya que eliminará cosas en el espacio de nombres del sistema kube, lo que hará que su clúster no sea utilizable.

Este comando eliminará todos los espacios de nombres, excepto kube-system, que puede ser útil:

for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
do
  kubectl delete ns $each
done
Eric Tune
fuente
1
Con la versión actual de k8s, el comando "kubectl delete --todos los espacios de nombres" ya no elimina las cosas del sistema ... Dice, por ejemplo: espacios de nombres "por defecto" está prohibido: este espacio de nombres no se puede eliminar
Kai Wähner
¿Esto elimina la implementación o solo los pods?
Sinaesthetic
1
kubectl delete pods --all --all-namespacesparece funcionar a veces (no estoy seguro de qué lo hace funcionar en algunos entornos y no en otros). Funciona bien desde mi servidor bastión pero no desde la computadora portátil. Ambos ejecutan Debian y ambos ejecutan la misma versión de Kubectl (versión de clúster 1.13)
Patrick W
@ KaiWähner, si no me equivoco, las cosas relacionadas con el sistema k8 están en el kube-systemespacio de nombres. En el ejemplo del mensaje, puedo ver el defaultespacio de nombres. ¿Se kube-systemelimina con el comando que ha adjuntado?
George Tseres
79
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

para deshacerse de los molestos controladores de replicación también.

jason
fuente
44
Esto está mal. Esto solo se elimina en el espacio de nombres actual.
favor
Agregue la bandera -n, pero lo siento, eso es para un pod a la vez y no todos a la vez
grbonk
1
También te falta ingeliminar
entradas
2
es posible que también desee agregar "statefulset" (si corresponde). De lo contrario, seguirá bifurcando nuevos pods incluso después de ejecutar el comando anterior.
buch11
15

Solo necesitas sedhacer esto:

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

Explica:

  1. use el comando kubectl get pods --all-namespacespara obtener la lista de todos los pods en todos los espacios de nombres.
  2. use la --no-headers=trueopción para ocultar los encabezados.
  3. use el scomando de sedpara buscar las dos primeras palabras, que representan namespacey pod's namerespectivamente, luego ensamble el deletecomando usándolas.
  4. la final deletede comandos es igual: kubectl --namespace kube-system delete pod heapster-eq3yw.
  5. use el emodificador de scomando para ejecutar el comando ensamblado anteriormente, que hará los deletetrabajos reales .

Para evitar eliminar pods en el kube-systemespacio de nombres, solo necesita agregar grep -v kube-systempara excluir kube-systemespacios de nombres antes del sedcomando.

Weike
fuente
También puede soltar --all-namespacessi no desea eliminar los pods en el kube-systemespacio de nombres
ianstarz
¿Cuál será el comando para eliminar solo unos pocos pod? Ejemplo: tenía spin 20 Pod y ahora deseo mantener solo 1.
Jason
11

Simplemente puedes correr

kubectl delete all --all --all-namespaces
  • El primero allsignifica los tipos de recursos comunes (pods, conjuntos de réplicas, implementaciones, ...)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • El segundo --allmedio es seleccionar todos los recursos de los tipos seleccionados.


Tenga en cuenta que allno incluye:

  • recursos sin espacio de nombres (p. ej., clusterrolebindings, clusterroles, ...)
  • configmaps
  • rolebindings
  • roles
  • misterios
  • ...

Para limpiar perfectamente,

  • podría usar otras herramientas (por ejemplo, Helm, Kustomize, ...)
  • podrías usar un espacio de nombres.
  • podría usar etiquetas cuando cree recursos.
Mo K
fuente
2

Aquí hay una línea que se puede extender con grep para filtrar por nombre.

kubectl get pods -o jsonpath="{.items[*].metadata.name}" | \
tr " " "\n" | \
xargs -i -P 0 kubectl delete pods {}
Claudio Fahey
fuente
1
kubectl delete po,ing,svc,pv,pvc,sc,ep,rc,deploy,replicaset,daemonset --all -A
Braconnot_P
fuente
¡Ten cuidado! Como PV no tiene espacio de nombres, el comando anterior eliminará todos los PV en todo el clúster.
Ahmad Ahmadi
0

Si ya tiene pods que se recrean, piense en eliminar primero todas las implementaciones

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

Simplemente reemplace el NAMSPACE y el DESPLIEGUE por los correspondientes, puede obtener toda la información de despliegues con el siguiente comando

kubectl get deployments --all-namespaces
Smaillns
fuente
0

El complemento Kubectl bulk (acción masiva en Krew) puede ser útil para usted, ya que le brinda operaciones masivas en recursos seleccionados. Este es el comando para eliminar pods

 ' kubectl bulk pods -n namespace delete '

Puedes consultar los detalles en este

Emre Odabaş
fuente
0

Creo un código de Python para eliminar todo en el espacio de nombres

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

y entonces

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

K8s funciona completamente en lo fundamental del espacio de nombres. si desea liberar todos los recursos relacionados con el espacio de nombres especificado.

puede usar lo siguiente:

kubectl eliminar el espacio de nombres k8sdemo-app

Sachin Mishra
fuente