上次写了一篇 使用shell脚本批量清理kubernetes集群中Evicted状态的pod,原理是使用获取kubernetes集群中状态为Evicted 的pod输出到一个临时文件,再截取文本解析成字段,最终拼接成一个个 kubectl delete pod xx-pod -n xx-namsepace
根据大佬留言指点,一条命令就可以处理这个情况了,具体命令如下:
kubectl get pods --all-namespaces | \ awk '/Evicted/{print $1,$2}' | \ xargs -r -n2 kubectl delete pod -n下面我们来详细解释下这条命令:
kubectl get pods --all-namespaces 就是获取集群中所有的pods,新的版本我们可以简写成 kubectl get pods -Aawk '/Evicted/{print $1,$2}' 其中 '/Evicted/' 表示只处理包含'/Evicted/'的行,{print $1 "\t" $2} 表示打印第一行和第二行,实际是包含了namespace和pod的名称。xargs 是一个命令行工具,它可以从标准输入读取数据,并将这些数据作为参数传递给指定的命令-r 或 --no-run-if-empty 选项意味着如果标准输入没有数据(即为空),则不运行命令。这可以防止在没有任何输入时执行不必要的命令。-n2 选项告诉 xargs 每次传递两个参数给 kubectl delete pod -n 命令。这条命令充分利用了 xargs -r -n2 kubectl delete pod -n 的特性来拼接kubectl get pods --all-namespaces | awk '/Evicted/{print $1,$2}' 输出的命名空间和pod名称,可以直接一条命令来清理k8s集群中被驱离的pod。
如果您在日常运维工作中遇到了任何问题或挑战,无论是关于系统配置、性能优化、故障排除还是其他方面,都欢迎您随时留言或私信我。我会尽我所能为您提供解决方案或建议。相互学习,积累更多的经验和知识,让工作更加顺畅高效!