强制删除kubernetes中的驱逐/终止Pods
时间:2020-02-23 14:30:24 来源:igfitidea点击:
在此简短的教程中,我们将研究如何在Kubernetes集群中删除被驱逐或者终止的POD。
有很多原因,你会发现一些被驱逐和终止状态的Pods。
为了驱逐,通常是工人节点或者应用程序错误的资源压力的结果。
终止可能是缩小应用程序或者部署后终止旧POD的应用程序的新版本。
在群集中的每个节点中运行的kubelet服务负责POD驱逐。
PODS驱逐的顺序是:最佳努力 - QoS类QoSburstable Pods使用更多资源而不是Starved Resource.Burstable Pods的要求,而不是其饥饿资源的要求。
我们可以通过运行以下命令获取终止或者驱逐状态的命名空间中的POD列表:
kubectl get pods -n namespace | egrep -i 'Terminated|Evicted'
强制删除kubernetes中的驱逐/终止Pods
我们可以以各种方式删除这些POD。
使用kbectl和bash本机命令
这些是Bash命令,通过过滤,我们将运行以强制删除位于被驱逐或者终止状态的命名空间中的POD。
# Define namespace namespace="mynamespace" # Get all pods in Terminated/Evicted State epods=$(kubectl get pods -n ${namespace} | egrep -i 'Terminated|Evicted' | awk '{print }') # Force deletion of the pods for i in ${epods[@]}; do kubectl delete pod --force=true --wait=false --grace-period=0 $i -n ${namespace} done
确认是否存在此状态仍然存在POD。
kubectl get pods -n ${namespace} | egrep -i 'Terminated|Evicted'
从所有名称空间中删除所有被驱散和终止的POD:
kubectl get pods --all-namespaces | egrep -i 'Evicted|Terminated' | awk '{print " --namespace=" }' | xargs kubectl delete pod --force=true --wait=false --grace-period=0
从所有名称空间中删除imagePullbullbuld状态中的所有容器 - 奖金:
kubectl get pods --all-namespaces | grep 'ImagePullBackOff' | awk '{print " --namespace=" }' | xargs kubectl delete pod
从所有命名空间中删除imagePullbullbull或者errimagepull状态的所有容器 - 奖金:
kubectl get pods --all-namespaces | grep -E 'ImagePullBackOff|ErrImagePull|Evicted' | awk '{print " --namespace=" }' | xargs kubectl delete pod
使用kubectl过滤器和jq
我们还可以将kubectl命令输出和管道过滤到JQ以获取特定列。
首次安装JQ命令:
--- Ubuntu/Debian -- $sudo apt update && sudo apt install jq --- CentOS/Fedora -- $sudo yum -y install epel-release $sudo yum -y install jq --- RHEL -- wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 -O jq chmod +x jq sudo mv jq /usr/local/bin
然后用命令删除驱逐的Pods:
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c