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 日
如果觉得我的文章对你有用,请随意赞赏