删除所有非Running状态的Pod
背景
如果所有的节点上面都有Taint, 然后这个没有Taint的节点磁盘满了, 会导致当前的节点上面留下许多状态不正常的Pod, 这些Pod大概率是停留在了Evicted状态, 或者是Completed, 甚至是 Unknown 。
这种状态的Pod Deployment默认的情况下不会自动回收, 所以需要人工操作一下。
处理方法
记录一个命令来处理这个类型的Pod。
kubectl delete pod --field-selector="status.phase==Failed"
测试方法
- 集群内两个节点, 其中一个节点Taint
kubectl taint nodes ip-172-31-60-181.cn-north-1.compute.internal app=grafana:NoSchedule
- 启动30个Grafana
- 登录到节点上面, 创建一个巨大的文件, 触发DiskPressure。
fallocate -l 72G ./large.file
- 等待节点的DiskPressure被识别, 然后触发驱逐。
- 删除文件, 取消DiskPressure状态, 等待 30 个新的Pod Ready。
rm -rf ./large.file
- 使用命令清除所有不是Running状态的Pod。
~$ kubectl delete pod --field-selector="status.phase==Failed"
- Over.
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Liarlee's Notebook!