-
-
Save zparnold/0e72d7d3563da2704b900e3b953a8229 to your computer and use it in GitHub Desktop.
kubectl get pods --all-namespaces | grep Evicted | awk '{print $2 " --namespace=" $1}' | xargs kubectl delete pod |
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
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.
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.
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.
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
Thank you @rubenpetrosyan1. This worked well for me. All the other versions using --field-selector
is not working for some reason.
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
@rubenpetrosyan1 good, it's works
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
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
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
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
thank you so much - this is the cleanest by far
The simplest solution possible would be like
NAMESPACE="test"
kubectl delete pods -n $NAMESPACE --field-selector=status.phase!=Running
kubectl delete pods -A --field-selector=status.phase=Failed