清理k8s集群Evicted,Failed的Pod!

简介:不知知道各位是如何清理的,我尝试过用阿里的任何一个面板清理,但是还要换页就很烦,所以自己就写了一个小脚本,更GOOD!的是你还可以把他放到你的定时任务里面去,为啥要这么做,不得不说,咱的集群有点小垃圾,不过那也没办法,集群也不敢动,谁知道啥时候崩了,锅谁来背,哈哈!

一个简单的不能再简单的shell脚本了

#!/bin/bash
source /etc/profile
printf "n本次操作是用来清理集群内部状态为 Evicted 和 Failed 的Pod !n"

printf "nA.  Aliyun-product      B.   Aliyun-test     C.    k8s-Intranetnn"

read -p "你需要清理的集群是:" mess

if [ $mess == A ];then
  cluster=Aliyun-product
elif [ $mess == B ];then
  cluster=Aliyun-test
elif [ $mess == C ];then
  cluster=k8s-Intranet
fi

printf "n以切换至您需要操作的集群!n"

/usr/local/bin/kubecm switch $cluster > /dev/null

read -p  "您是否需要选择清理  (yes/no): " judge

if [ $judge == yes  ];then
   echo "正在清理中,请勿 ctrl+c 中断操作!"
   /usr/bin/kubectl get pods --all-namespaces -o go-template='{{range .items}} {{if (or (eq .status.phase "Evicted") (eq .status.phase "Failed" ))}} {{.metadata.name}}{{" "}} {{.metadata.namespace}} {{"n"}}{{end}} {{end}}' | while read epod namespace; do kubectl -n $namespace delete pod $epod; done; >> /root/shell/pod/log/$mess-$(date +%Y-%m-%d-%H-%M-%S).txt
   logfile=$mess-$(date +%Y-%m-%d-%H-%M-%S).txt
else
   echo "正在停止并退出!"
   exit

fi

if [ $? != 0  ];then
   printf "n在${cluster}集群未能清理成功n"
elif [ ! -s ${logfile} ];then
   printf "n在${cluster}集群中没有可清理的PODn"
   /usr/bin/rm -rf  /root/shell/pod/log/${logfile}
else
   printf "n在${cluster}集群以清理完毕!n"
   printf "n清理的POD保存在/root/shell/pod/log/${logfile}中n"
fi
/usr/local/bin/kubecm switch k8s-Intranet > /dev/null

里面使用到了kubecm工具去切换集群,估计你们也都有用过,如果没用过的小伙伴,可以去下载下,用法很简单。

然后加入定时任务,让他自己动起来

00 */6 * * * /usr/bin/echo -e "Anyes" | /bin/sh  /root/shell/Clean-up-the-Failed-Evicted-pod.sh

最后,希望多多支持,点赞,也可以稍微的评论下,让我有点存在感!哈哈哈哈!