更新时间:2024-07-02 GMT+08:00
Containerd节点业务容器标准输出日志写入过快导致节点数据盘使用率过高
问题现象
Containerd节点上业务容器标准输出不断写入大量日志,导致/var/lib/containerd目录占用空间不断增长,同时节点上容器创删速度变慢,进一步出现磁盘使用率过高、Pod驱逐、节点异常等现象。
问题根因
对于使用Containerd运行时的节点上业务容器,若日志输出方式采用容器标准输出,其日志转储由节点上kubelet组件完成,除负责业务容器标准输出日志转储外,kubelet还负责节点上所有容器生命周期的维护操作。
若节点上业务容器过多,业务容器标准日志输出过快,会导致kubelet持续高负荷运行,超过一定限度会出现日志转储,进而日志累积导致磁盘使用率过高。同时因为kubelet高负荷运行此时节点上容器创删等操作也会受影响。
解决方法
一般场景下,以8U16G节点、数据盘大小为100G为例,建议单容器的日志标准输出速率不超过512KB/s,节点上所有容器总体日志标准速率建议不超过5MB/s。若确实存在大量日志输出场景,可考虑以下方式优化:
- 避免日志输出过多的容器调度在同一个节点。例如给此类应用配置Pod间反亲和,或减少单节点的Pod数量上限。
- 考虑单独挂盘,如用户创建节点时挂载额外用户数据盘或应用动态挂载存储等等,然后将业务日志输出到额外挂载盘中的文件。