Loading... # Kubernetes Pod 被驱逐(Evicted)问题排查与解决方案 --- ## 故障现象 **在 Kubernetes 集群中,部分 Pod 状态变为****`Evicted`,且频繁重启或被疯狂重新创建后依然被驱逐,导致应用无法正常运行 **示例** ``` k8s-demo frontend-deployment-xxxxx 0/1 Evicted 0 30s ``` **使用**`kubectl describe pod` 查看 Pod 事件发现: ``` Warning Evicted pod/frontend-deployment-xxxxx The node had condition: [DiskPressure]. ``` **说明节点发生了磁盘压力(DiskPressure)导致驱逐 Pod。** --- ## 故障原因 **Kubernetes 节点的磁盘空间不足,触发了节点状态中的 **`DiskPressure` 条件。此时,kubelet 会根据节点资源压力优先驱逐 Pod,以保证节点系统正常运行。 **造成磁盘压力的常见原因包括:** * **Docker 镜像和容器占用过多磁盘空间** * **节点系统日志过大** * **磁盘容量本身较小或分区不合理** * **长时间未清理无用文件和缓存** --- ## 排查过程 ### 1. 查看被驱逐的 Pod 详情 ``` kubectl describe pod <pod-name> -n <namespace> ``` **重点关注**`Events`,确认驱逐原因是否为 `DiskPressure`。 ### 2. 查看节点状态及条件 ``` kubectl describe node <node-name> ``` **查看节点的**`Conditions`,确认 `DiskPressure` 是否为 `True`。 ### 3. 登录节点检查磁盘空间 ``` ssh <node-name> df -h ``` **重点查看关键目录所用磁盘空间:** * `/var/lib/docker` 或 `/var/lib/containerd` * `/var/lib/kubelet` * `/var/log` **确认是否有磁盘空间严重不足。** ### 4. 查看具体磁盘使用情况 ``` du -sh /var/lib/docker/* du -sh /var/lib/kubelet/* du -sh /var/log/* ``` **找出占用空间大的文件夹和日志。** --- ## 解决方法 ### 1. 清理 Docker 资源 **删除无用镜像、容器和卷,释放磁盘空间:** ``` docker image prune -a -f docker container prune -f docker volume prune -f ``` **如果使用 containerd,使用对应命令清理。** ### 2. 清理系统日志 **查看日志大小:** ``` du -sh /var/log/* ``` **清理旧日志,保留最近几天的:** ``` journalctl --vacuum-time=2d ``` ### 3. 增加磁盘容量(如有条件) **扩展节点磁盘容量,避免磁盘使用率过高。** ### 4. 监控和自动清理 **建议配置节点磁盘使用监控和自动清理策略,避免磁盘压力反复出现。** --- ## 恢复验证 **清理完成后,确认节点状态:** ``` kubectl describe node <node-name> ``` **确保**`DiskPressure` 状态消失。Pod 应自动调度正常启动。 --- ## 总结 **Pod被驱逐且显示**`DiskPressure`,说明节点磁盘资源紧张。通过清理无用 Docker 资源和日志、扩容磁盘及监控,可以有效解决和避免该问题,保障 Kubernetes 集群稳定运行。 --- ## 常用命令速查 | **作用** | **命令** | | -------------------------- | --------------------------------------- | | **查看 Pod 详情** | `kubectl describe pod <pod-name> -n ns` | | **查看节点状态** | `kubectl describe node <node-name>` | | **查看磁盘使用** | `df -h` | | **查看目录大小** | `du -sh /path/*` | | **清理 Docker 镜像和容器** | `docker image/container/volume prune` | | **清理系统日志** | `journalctl --vacuum-time=2d` | 最后修改:2025 年 06 月 04 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 2 如果觉得我的文章对你有用,请随意赞赏