1 - 实操记录
1.1 - 日志文件排查
首先我们运行一下命令,过滤出比较大的一些日志文件
find /var/ -name '*.log*' -size +99M -type f 2>/dev/null -exec ls -lh {} \;
根据目录的分析,我们能看到 Log 相关的日志主要集中在上图所示的目录中,那么这个目录是做什么的呢?
/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots
目录是 containerd 使用overlayfs
作为存储驱动时存储容器镜像和容器层快照的地方。每个快照都有一个唯一的数字标识符目录。
如果确认这些日志文件是可以被清理掉的,那么接下来我们可以使用这个命令来处理掉这些文件
# 清理
find /var/ -name '*.log*' -size +99M -type f 2>/dev/null -exec truncate -s 0 {} \;
# 检查
find /var/ -name '*.log*' -size +99M -type f 2>/dev/null -exec ls -lh {} \;
问题:那么,这些能代表所有日志文件吗?显然不能,经验告诉我们,并不是所有日志文件都是以 .log
结尾的。
1.2 - 目录级别的排查
alias ds = 'du -sh ./* | sort -rh | head -20'
cd /var/lib/containerd/ && ds
就这样,我们可以逐层筛查,找到一些比较大的文件。
2 - 总结思考
- 一般情况下,Node 运行的 Pod 的数量是一个相对稳定的状态,磁盘突然不够用了,一般是有一些变动较大的文件引起的,如:
- 应用自身的日志文件
- 引入的第三方组件的日志文件
- 对于这些经常有问题的 Node ,需要结合监控,了解一下平时所使用的存储量,以方便我们来评估实现的使用量,以及是否应该扩容?
- 发现问题需要从根源进行解决,同时为了降低重复工作的次数,也需要结合一下告警回调等自动化的方法来解决这类问题。
- 使用 du 逐层查找大目录其实不是很高效,给自己埋个坑,找一下快速高效找到大文件夹的方法。
有更好的方法或者错误欢迎指出讨论!