看到 Evicted 状态不用慌,这代表 Pod 已经被 kubelet 终止且不会自动重启,直接删除该 Pod 即可清理;如果它属于 Deployment 等控制器管理,新 Pod 会自动创建,否则需要检查节点资源后手动重建。
先说结论:Evicted 是终态,不会自动恢复,必须手动删除旧 Pod 触发重建
- 先确认:检查 Pod 是否由 Deployment 或 StatefulSet 控制器管理
- 先处理:使用 kubectl delete 清理处于 Evicted 状态的 Pod
- 再验证:观察新 Pod 是否成功启动且不再被驱逐
命令速用版
# 查看所有处于 Evicted 状态的 Pod
kubectl get pods `--field-selector` status.phase=Failed# 删除指定的 Evicted Pod
kubectl delete pod <pod-name> -n <namespace># 批量清理所有 Evicted Pod(谨慎使用)
kubectl get pods `--field-selector` status.phase=Failed -o jsonpath='{.items[*].metadata.name}' | xargs kubectl delete pod为什么会这样
Pod 显示 Evicted 并不是简单的“错误”,而是 kubelet 主动终止了它。常见原因包括节点资源压力(如磁盘空间不足、内存超限)或节点本身出现故障。一旦进入这个状态,Pod 生命周期就结束了,控制器如果不介入,它不会自己变回 Running。
分步处理
1. 确认 Pod 归属
先查看 Pod 详情,确认它是否有控制器管理。如果是 Deployment 创建的,删除后会自动补新;如果是裸 Pod 或 Static Pod,删除后需要手动重新应用配置。
kubectl get pod <pod-name> -o yaml | grep ownerReferences2. 清理 Evicted Pod
确认无误后直接删除。如果 Pod 卡在 Terminating,可能需要强制删除。
kubectl delete pod <pod-name> `--grace-period`=0 `--force`3. 排查根因
清理只是止血,必须检查节点资源。查看节点磁盘和内存使用情况,避免新 Pod 起来后再次被驱逐。
kubectl describe node <node-name>
df -h # 在节点上执行怎么验证是否生效
执行删除后,再次运行 get 命令,确认旧 Pod 消失。如果有控制器,会看到一个新的 Pod 创建出来。观察新 Pod 的 STATUS 列是否为 Running,且 RESTARTS 计数正常。
kubectl get pods -w常见坑
- 忽略资源压力:如果不清理节点磁盘日志或缓存,新 Pod 很快会再次 Evicted。
- 静态 Pod 误删:kube-system 下有些 Pod 是静态 Pod,删除后虽然会恢复,但频繁驱逐可能意味着控制平面节点有问题。
- 强制删除风险:使用 `--force` 跳过优雅终止可能导致应用数据丢失,仅在卡死时使用。
参考来源
- Kubernetes Official Docs - Pod Lifecycle: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/
- Kubernetes Official Docs - Eviction Policy: https://kubernetes.io/docs/concepts/scheduling-eviction/eviction-policy/
原文链接:https://www.zjcp.cc/ask/10300.html
