为什么Kubernetes网络驱动weave会生成大体积日志,该如何解决?
Weave容器日志异常暴涨问题排查与处理方案
常见原因
- 网络连通性故障导致的重连日志刷屏:比如节点间网络波动、防火墙规则变动、节点上下线频繁,weave会持续打印连接重试、握手失败、对等节点不可达的日志
- 调试级别的日志未关闭:weave默认如果启动时加了
--log-level=debug参数,会输出所有数据包转发、流表更新的明细日志,日志量会是info级别的3~10倍 - 业务集群规模大、Pod变动频繁:每一次Pod创建/销毁、IP分配/回收,weave都会输出对应操作日志,若集群单节点Pod密度超过50、每日Pod变动量超过1000,默认日志量级会大幅提升
- 内核网络模块异常:比如主机iptables规则冲突、arp表溢出、虚拟网卡掉包,weave会持续打印内核调用失败的错误日志
排查步骤
- 先查看当前weave的日志级别,执行命令:
kubectl describe ds weave-net -n kube-system | grep log-level,如果返回debug级别基本可以确定是日志级别过高导致 - 实时查看当前打印的高频日志内容,执行命令:
kubectl logs -f <weave-net-pod-name> -n kube-system --tail 100,判断日志是报错类还是常规操作类 - 检查节点间网络连通性,测试不同节点的weave端口(默认6783/6784 TCP+UDP)是否能正常通信:
nc -zv <节点IP> 6783
处理方案
- 调整日志级别:如果当前是debug级别,修改weave DaemonSet启动参数,把
--log-level=debug改为--log-level=info,如果问题仍然严重可以改为--log-level=warn,仅打印警告和错误日志 - 配置容器日志轮转:修改Docker/Containerd的全局日志配置,限制单个容器日志最大大小和保留数量。以Containerd为例,修改
/etc/containerd/config.toml中的日志配置段:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] LogMaxSize = "100M" LogMaxFiles = 3
修改后执行systemctl restart containerd生效,后续所有容器日志超过100M会自动轮转,最多保留3个历史日志文件
- 清理现有超大日志:如果需要立即释放磁盘空间,可执行命令清理当前weave容器的日志文件:
# 先找到weave容器的日志路径 docker inspect $(docker ps | grep weave | awk '{print $1}') | grep LogPath # 清空日志文件(不要直接删除,避免容器无法写入日志报错) truncate -s 0 <上一步查到的日志路径>
- 修复底层异常:如果排查发现是网络连通性、iptables冲突之类的底层故障,先修复对应问题,错误日志就会自动停止打印
内容的提问来源于stack exchange,提问作者karlos
相关产品推荐
相关产品推荐

