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
@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