Skip to content

Instantly share code, notes, and snippets.

@zparnold
Last active May 6, 2024 13:14
Show Gist options
  • Save zparnold/0e72d7d3563da2704b900e3b953a8229 to your computer and use it in GitHub Desktop.
Save zparnold/0e72d7d3563da2704b900e3b953a8229 to your computer and use it in GitHub Desktop.
A simply script to delete all failed pods from Kubernetes
kubectl get pods --all-namespaces | grep Evicted | awk '{print $2 " --namespace=" $1}' | xargs kubectl delete pod
@TobiasWenzel
Copy link

The solution provided by @willemm is the best, as it doesn't require other tools and works on every platform, so also under Windows.

That command is needlessly complicated. You just use:

kubectl delete pods --field-selector=status.phase=Evicted

However, for me it didn't work out of the box, the = after --field-selector has to be removed to make it work and Evicted has to be replaced with Failed ("Evicted" is the reason, "Failed" is the phase). Also you have to provide a namespace.
So I ended up with:

kubectl delete pods --field-selector status.phase=Failed --all-namespaces

Bear in mind, however, that this not only deletes evicted pods, but also pods that have failed due to different reasons ("ContainerCannotRun", "Error", "ContainerCreating", etc.).

@zparnold
Copy link
Author

@TobiasWenzel thanks for drawing this to my attention :)

@woodgear
Copy link

The solution provided by @willemm is the best, as it doesn't require other tools and works on every platform, so also under Windows.

That command is needlessly complicated. You just use:
kubectl delete pods --field-selector=status.phase=Evicted

However, for me it didn't work out of the box, the = after --field-selector has to be removed to make it work and Evicted has to be replaced with Failed ("Evicted" is the reason, "Failed" is the phase). Also you have to provide a namespace.
So I ended up with:

kubectl delete pods --field-selector status.phase=Failed --all-namespaces

Bear in mind, however, that this not only deletes evicted pods, but also pods that have failed due to different reasons ("ContainerCannotRun", "Error", "ContainerCreating", etc.).

make this golf even better,use -A instead of --all-namespaces.
hence kubectl delete pods --field-selector status.phase=Failed -A

@wangzhenzhe
Copy link

Great!
Very helpful!

@smilelikeshit
Copy link

thanks for you all guys! very usefull

@CarTerr
Copy link

CarTerr commented Jan 13, 2022

kubectl delete pods -A --field-selector=status.phase=Failed

@renich
Copy link

renich commented Jun 7, 2022

Or, if you want to delete all pods that are not explicitly running (completed, for example):

kubectl delete -A --field-selector 'status.phase!=Running' pods

@juniorz
Copy link

juniorz commented Jun 20, 2022

kubectl delete -A --field-selector 'status.phase!=Running' pods

Note this will also delete pods in PodInitializing, ContainerCreating and Pending status - which might not be desired.

@fabiocaldeira
Copy link

This command was just perfect to delete my evicted pods: kubectl delete pods --field-selector status.phase=Failed -A

Thank you guys for this thread! It was really helpful.

@yuzp1996
Copy link

yuzp1996 commented Jul 28, 2022

First, execute kubectl get po -A |grep Evicted |awk '{print "kubectl delete po " $2 " -n " $1 }' to check the command.

After you confirm the command is what you want then execute kubectl get po -A |grep Evicted |awk '{print "kubectl delete po " $2 " -n " $1 }' |bash to run the command.

@rubenpetrosyan1
Copy link

rubenpetrosyan1 commented Aug 26, 2022

for me, all the above was not working with the newer (v1.23+) version of Kubernetes as with kubectl get pods --all-namespaces it shows some other statuses as well, like "OutOfcpu", "OOMKilled", "ContainerStatusUnknown", etc. So I added all those statuses to @yuzp1996 command:

kubectl get pods --all-namespaces | grep -E OutOfcpu\|Evicted\|Completed\|OOMKilled\|Error\|ContainerStatusUnknown | awk '{print "kubectl delete po " $2 " -n " $1 }' | bash

@cristianuibar
Copy link

Thank you @rubenpetrosyan1. This worked well for me. All the other versions using --field-selector is not working for some reason.

@abdulnazurudeen
Copy link

My case I have to delete few specifically those have different name of pod, I will used below command to delete those.
If you know the name list to delete try like below worked for me.
kubectl delete pods podname1 anotherpod2 etcpod

@Nurlan199206
Copy link

@rubenpetrosyan1 good, it's works

@mayconritzmann
Copy link

mayconritzmann commented Mar 29, 2023

This simple loop could help:

#!/bin/bash

for ns in $(kubectl get po -A --no-headers | grep -i crash | awk {'print $1'}); do
  delpods=$(kubectl get pods -n $ns |
    grep -i 'CrashLoopBackOff' |
    awk '{print $1 }')    
  for i in ${delpods[@]}; do
    kubectl delete pod $i --force=true --wait=false \
      --grace-period=0 -n $ns 
  done
done

@BioQwer
Copy link

BioQwer commented Jun 28, 2023

kubectl delete pods --field-selector status.phase=Failed --all-namespaces
kubectl delete pods --field-selector status.phase=Error --all-namespaces
kubectl delete pods --field-selector status.phase=Succeeded --all-namespaces

#ALL
kubectl delete pods --field-selector status.phase!=Running --all-namespaces

@mertyakan
Copy link

kubectl get po -A -o wide| grep -vE "Compl|Runn"|awk {'print $1,$2'}|grep -v NAMESPACE| sed "s,^,kubectl delete pod --force -n ,g" |bash

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment