故障复盘

凌晨三点的 DiskPressure:一次 Kubernetes 节点驱逐排查实录

← 全部文章

现象

凌晨 3:12,同一节点上 6 个 Pod 陆续被 Evicted,告警显示节点 DiskPressure=True。

应急处理

1
2
3
4
kubectl describe node <node> | grep -A5 DiskPressure
du -sh /var/log/pods/* | sort -h | tail
du -sh /var/lib/docker/containers/* | sort -h | tail
kubectl drain <node> --ignore-daemonsets

根因是一个调试版本每秒打 800 行日志,单容器日志文件涨到 47GB,json-file 驱动没有配轮转。

根治措施

kubelet 配置(多数托管 K8s 可通过节点启动模板下发):

1
2
containerLogMaxSize: 50Mi
containerLogMaxFiles: 5

Pod 层面给 emptyDir 加上限,超限会被驱逐而不是拖垮整节点:

1
2
3
4
volumes:
  - name: tmp
    emptyDir:
      sizeLimit: 1Gi

教训

节点级故障要靠“限制爆炸半径”治理,而不是指望每个开发者都记得加日志轮转。