k8s pod异常排错
问题
kuboard页面打不开,看etcd pod未启动导致的。
查看pod events:
kubectl describe pod kuboard-etcd-vmd75 -n kuboard
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m52s default-scheduler Successfully assigned kuboard/kuboard-etcd-vmd75 to 97-61-master-dev
Warning Evicted 3m52s kubelet The node had condition: [DiskPressure].
解决
1.DiskPressure时间含义及触发机制
Evicted + DiskPressure 本质是什么
这条事件表示:
kubelet 判断节点磁盘资源已进入“不可接受状态”,为了保护节点自身,主动驱逐(Evict)了 Pod。
不是调度器的问题,也不是 Pod 自己“崩了”,而是 节点在自救。
1.2 DiskPressure 的判定逻辑
kubelet 并不是等磁盘 100% 才动作,它基于 Eviction Threshold:
- evictionHard:(默认)
- nodefs.available: 10%
- nodefs.inodesFree: 5%
- imagefs.available: 15%
- imagefs.inodesFree: 5%
只有 evictionHard,没有 evictionSoft。一旦触发,直接驱逐,没有缓冲期。
NodeCondition: DiskPressure=True
1.3. kubelet 驱逐 Pod 的内部流程
flowchart TD
A[磁盘可用空间下降] --> B[kubelet 监控到 nodefs/imagefs 低于阈值]
B --> C[NodeCondition: DiskPressure=True]
C --> D[Eviction Manager 启动]
D --> E[按 QoS 等级排序 Pod]
E --> F[驱逐 BestEffort Pod]
F --> G[仍不足 → 驱逐 Burstable]
G --> H[最后才是 Guaranteed]
核心原则:牺牲“不重要”的 Pod,保全节点稳定性。