跳过正文
  1. 博客文章/

快速删除 Rancher 中失败的 Pod 资源

·218 字·2 分钟·
Kubernetes Fix Rancher Kubernetes Pod
Zayn
作者
Zayn
专注 Kubernetes、CI/CD、可观测性等云原生技术栈,记录生产环境中的实战经验与踩坑复盘。
目录

问题描述
#

在 Rancher 管理的 Kubernetes 集群中,有时会出现副本集中的 Pod 部署失败的情况。如下图所示,失败的 Pod 数量可能达到上千个,手动逐一删除非常耗时。

image-20210527085545254

解决方案
#

批量删除失败的 Pod
#

使用 kubectl 命令批量删除状态为 MatchNodeSelector 的失败 Pod:

IFS='
'

for i in `kubectl get po --all-namespaces | grep -i 'MatchNodeSelector'`; do
    kubectl delete po `echo $i | awk '{print $2}'` -n `echo $i | awk '{print $1}'`
done

命令说明

  • kubectl get po --all-namespaces:获取所有命名空间中的 Pod
  • grep -i 'MatchNodeSelector':筛选出状态为 MatchNodeSelector 的 Pod
  • awk '{print $2}':提取 Pod 名称
  • awk '{print $1}':提取命名空间名称
  • kubectl delete po:删除指定的 Pod

执行结果
#

image-20210527085807930

其他常见失败状态
#

除了 MatchNodeSelector 外,还可以根据需要删除其他状态的失败 Pod:

删除 ImagePullBackOff 状态的 Pod
#

for i in `kubectl get po --all-namespaces | grep -i 'ImagePullBackOff'`; do
    kubectl delete po `echo $i | awk '{print $2}'` -n `echo $i | awk '{print $1}'`
done

删除 CrashLoopBackOff 状态的 Pod
#

for i in `kubectl get po --all-namespaces | grep -i 'CrashLoopBackOff'`; do
    kubectl delete po `echo $i | awk '{print $2}'` -n `echo $i | awk '{print $1}'`
done

删除 Pending 状态的 Pod
#

for i in `kubectl get po --all-namespaces | grep -i 'Pending'`; do
    kubectl delete po `echo $i | awk '{print $2}'` -n `echo $i | awk '{print $1}'`
done

注意事项
#

  1. 谨慎操作:删除 Pod 前请确认这些 Pod 确实是失败的且可以安全删除
  2. 备份重要数据:如果 Pod 中包含重要数据,请先进行备份
  3. 检查依赖关系:确保删除这些 Pod 不会影响其他服务的正常运行
  4. 分批处理:如果失败 Pod 数量过多,建议分批删除以避免对集群造成过大压力

预防措施
#

为了减少失败 Pod 的产生,建议:

  1. 资源配置:合理配置 Pod 的资源请求和限制
  2. 节点标签:正确配置节点标签和 Pod 的节点选择器
  3. 镜像管理:确保容器镜像可用且版本正确
  4. 监控告警:设置监控告警及时发现和处理 Pod 异常

相关文章

修复 Rancher 单机部署升级后 Docker 无法启动问题
·265 字·2 分钟
Fix Kubernetes Docker Rancher
使用 helm 在 Kubernetes 中部署 Nexus 私服
·1047 字·5 分钟
Helm Kubernetes DevOps Nexus3 Kubernetes
Rancher 开启监控后的,阈值告警配置说明 (三)
·285 字·2 分钟
K8s DevOps Kubernetes Prometheus Rancher +5