You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE中Fluentbit报‘cannot adjust chunk size’错误的排查与解决

GKE集群Fluentbit Pod持续重启报错排查与解决

问题现象

Fluentbit以DaemonSet部署在GKE集群,搭配Fluentd做日志聚合,初期运行正常,现在Pod持续报错重启,核心错误信息如下:

Fluentbit日志

[2023/07/18 08:08:22] [error] [storage] cannot adjust chunk size '/fluent-bit/buffer//emitter.3/1-1689072144.132487045.flb' to 4096 bytes
[lib/chunkio/src/cio_file_unix.c:528 errno=28] No space left on device
[lib/chunkio/src/cio_file.c:1116 errno=28] No space left on device
...
[2023/07/18 08:08:22] [error] [sqldb] error=disk I/O error
[2023/07/18 08:08:22] [error] [input:tail:tail.0] db: could not create 'in_tail_files' table
[2023/07/18 08:08:22] [error] failed initialize input tail.0
[2023/07/18 08:08:22] [error] [lib] backend failed

Pod事件

> kubectl describe po fluent-bit-xmkj6
...
Events:
  Type     Reason   Age                     From     Message
  ----     ------   ----                    ----     -------
  Normal   Pulling  51m (x1718 over 6d3h)   kubelet  Pulling image "cr.fluentbit.io/fluent/fluent-bit:2.0.5"
  Warning  BackOff  96s (x43323 over 6d3h)  kubelet  Back-off restarting failed container

错误分析

从日志中的errno=28 No space left on device可明确:Fluentbit使用的磁盘空间耗尽,引发连锁问题:

  1. 无法调整buffer目录下的chunk文件大小,存储功能失效
  2. Tail插件无法创建/打开日志跟踪数据库/fluent-bit/buffer/logs.db,输入插件初始化失败
  3. Fluentbit引擎启动失败,触发kubelet的BackOff重启机制

磁盘耗尽的核心诱因:

  • Fluentbit的buffer目录(/fluent-bit/buffer/)使用节点本地存储(如emptyDir)或未限制大小的PVC,持续堆积未发送的日志chunk
  • 输出端Fluentd异常(宕机、处理速度慢),导致Fluentbit无法正常发送日志,buffer不断累积
  • rewrite_tag插件使用filesystem存储策略,生成大量emitter chunk文件占用空间

解决步骤

临时应急恢复

  1. 清理磁盘空间

    • 进入异常Pod清理buffer目录旧文件:
      kubectl exec -it fluent-bit-xmkj6 -- rm -rf /fluent-bit/buffer/*
      
    • 若使用emptyDir,直接删除Pod重建(emptyDir会自动清空):
      kubectl delete po fluent-bit-xmkj6
      
    • 检查GKE节点磁盘占用,清理冗余文件(如旧镜像、过期日志):
      kubectl debug node/<node-name> -it --image=ubuntu
      # 进入节点后执行df -h查看磁盘,清理无用文件
      
  2. 临时调整存储策略
    将rewrite_tag的存储改为memory,避免磁盘堆积:
    修改fluent-bit.conf中两个rewrite_tag插件配置:

    [FILTER]
        Name rewrite_tag
        ...
        Emitter_Storage.type memory
    

    重启Fluentbit DaemonSet:

    kubectl rollout restart daemonset fluent-bit
    

长期优化方案

  1. 配置存储大小限制
    在[SERVICE]段添加存储限制参数,避免buffer无限占用空间:

    [SERVICE]
        ...
        storage.max_chunks_size 1G  # 设置buffer总大小上限
        storage.expire_time 24h     # 自动删除24小时前的chunk文件
    
  2. 优化rewrite_tag插件配置

    • 若允许丢失部分日志,将Emitter_Storage.type设为memory;若需持久化,添加大小限制:
      [FILTER]
          Name rewrite_tag
          ...
          Emitter_Storage.type filesystem
          Emitter_Storage.limit_size 500M  # 设置每个emitter的存储上限
      
    • 调整匹配规则,避免重复处理同一条日志:
      [FILTER]
          Name rewrite_tag
          Match kube.** !dev.service.*  # 只匹配未被第一个rewrite_tag处理的日志
          ...
      
  3. 检查输出端Fluentd状态

    • 确认Fluentd Pod运行状态:
      kubectl get po -n <fluentd-namespace>
      
    • 查看Fluentd日志,排查连接错误、处理瓶颈:
      kubectl logs <fluentd-pod-name> -n <fluentd-namespace>
      
  4. 调整Fluentbit存储卷配置

    • 使用PVC挂载buffer目录,设置合适存储大小(如10G):
      # DaemonSet的volumeMounts配置
      volumeMounts:
      - name: fluentbit-buffer
        mountPath: /fluent-bit/buffer
      volumes:
      - name: fluentbit-buffer
        persistentVolumeClaim:
          claimName: fluentbit-buffer-pvc
      
    • 若使用emptyDir,添加sizeLimit限制:
      volumes:
      - name: fluentbit-buffer
        emptyDir:
          sizeLimit: 5Gi
      
  5. 配置节点日志轮转
    通过DaemonSet部署logrotate,配置/var/log/containers/目录的日志轮转规则,避免原生日志文件过大占用空间。


内容的提问来源于stack exchange,提问作者Ellisein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:32:11