3. Fluent Bit 部署模式:DaemonSet部署(Kubernetes)、Sidecar模式、Agent模式、集中式转发器模式

在生产环境中,Fluent Bit 的部署模式直接决定了数据采集的覆盖范围、资源消耗、运维复杂度以及变更门禁流水线的集成方式。根据集群规模、安全隔离要求和数据路由策略,通常采用以下四种主流部署模式。

3.1 四种部署模式对比总览

部署模式 典型场景 数据采集范围 资源开销 变更门禁集成难度
DaemonSet(Kubernetes) K8s 集群节点日志采集 每个节点上的所有容器 低(每节点一个 Pod) 低(原生 K8s 资源)
Sidecar 模式 应用级日志隔离、多租户 单个 Pod 内的单个容器 中(每 Pod 一个 Sidecar) 中(需注入 Sidecar)
Agent 模式 虚拟机/裸金属主机监控 宿主机上的所有进程/文件 低(单进程) 低(独立部署)
集中式转发器模式 多集群/多数据中心聚合 接收上游 Agent 转发数据 高(需处理高吞吐) 高(需配置路由规则)

3.2 DaemonSet 部署(Kubernetes)

DaemonSet 是 Kubernetes 中最推荐的 Fluent Bit 部署方式。它在每个工作节点上运行一个 Fluent Bit Pod,自动采集该节点上所有容器的标准输出日志(stdout/stderr)和文件日志。

核心优势: 无需修改应用 Pod 定义,通过挂载宿主机日志目录(如 /var/log/containers/)实现零侵入采集;随节点扩缩自动调整,运维成本最低。
# Fluent Bit DaemonSet 核心配置示例(仅展示关键字段)
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluent-bit
  namespace: logging
spec:
  selector:
    matchLabels:
      app: fluent-bit
  template:
    metadata:
      labels:
        app: fluent-bit
    spec:
      containers:
      - name: fluent-bit
        image: cr.fluentbit.io/fluent/fluent-bit:2.2
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers
变更门禁集成要点: 在 DaemonSet 模式下,可通过 ConfigMap 热更新 Fluent Bit 配置,结合 K8s Admission Webhook 实现配置变更前的语法校验和灰度发布,避免错误配置影响全集群日志采集。

3.3 Sidecar 模式

Sidecar 模式将 Fluent Bit 作为独立容器注入到每个应用 Pod 中,与应用容器共享网络和存储卷。此模式适用于需要精细化日志处理(如多行日志合并、敏感数据脱敏)或应用级隔离的场景。

# Pod 定义中注入 Fluent Bit Sidecar 容器
apiVersion: v1
kind: Pod
metadata:
  name: my-app-with-logging
spec:
  containers:
  - name: my-app
    image: my-app:1.0
    volumeMounts:
    - name: log-volume
      mountPath: /var/log/app
  - name: fluent-bit-sidecar
    image: cr.fluentbit.io/fluent/fluent-bit:2.2
    volumeMounts:
    - name: log-volume
      mountPath: /var/log/app
      readOnly: true
    args: ["-c", "/etc/fluent-bit/fluent-bit.conf"]
  volumes:
  - name: log-volume
    emptyDir: {}
资源开销提醒: 每个 Pod 额外运行一个 Fluent Bit 容器,集群中 Pod 数量较多时,总资源开销会显著增加。建议仅在需要应用级定制处理时使用,并设置合理的资源 requests/limits。

3.4 Agent 模式

Agent 模式将 Fluent Bit 作为独立进程直接部署在虚拟机或裸金属主机上。它通过读取宿主机文件系统、系统日志(syslog/journald)或监听网络端口来采集数据。

  • 部署方式: 使用 systemd 服务、Docker 容器(--network=host)或二进制包直接运行。
  • 适用场景: 传统虚拟机环境、混合云架构、边缘计算节点。
  • 变更门禁集成: 可通过配置管理工具(Ansible、Puppet)统一分发配置,并在 CI/CD 流水线中加入配置语法检查步骤。
# Agent 模式 systemd 服务单元示例
[Unit]
Description=Fluent Bit Agent
After=network.target

[Service]
ExecStart=/usr/bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

3.5 集中式转发器模式

集中式转发器模式部署一个或多个 Fluent Bit 实例作为数据聚合层,专门接收来自上游 Agent、DaemonSet 或 Sidecar 转发过来的日志/指标数据,经过二次处理(如过滤、聚合、格式转换)后发送到最终存储后端。

架构定位: 转发器通常部署在独立的 K8s Deployment 或物理服务器上,配置高可用(多副本 + 负载均衡),作为数据管道的中枢节点。
# 集中式转发器 Fluent Bit 配置(接收上游 Forward 协议)
[SERVICE]
    flush           1
    log_level       info

[INPUT]
    name            forward
    listen          0.0.0.0
    port            24224

[OUTPUT]
    name            es
    match           *
    host            elasticsearch-logging
    port            9200
    index           fluent-bit-${YYYY.MM.DD}

3.6 四种部署模式架构关系图

下图展示了四种部署模式在典型数据采集与转发拓扑中的位置关系:

Fluent Bit 四种部署模式架构关系 数据源层 K8s 节点日志 应用容器日志 宿主机系统日志 网络设备 Syslog DaemonSet 每节点一个 Pod 采集节点所有容器 Sidecar 每 Pod 一个 Sidecar 应用级日志隔离 Agent 宿主机独立进程 采集系统/文件日志 集中式转发器 数据聚合层 接收上游转发数据 输出目标层 Elasticsearch Kafka S3 / GCS Prometheus Splunk 转发器可接收所有上游模式数据

3.7 部署模式选择决策树

在实际项目中,可根据以下条件快速选择最合适的部署模式:

  1. 是否运行在 Kubernetes 集群?
    • 是 → 进入第 2 步
    • 否 → 使用 Agent 模式 或 集中式转发器模式
  2. 是否需要应用级日志隔离或定制处理?
    • 是 → 使用 Sidecar 模式
    • 否 → 使用 DaemonSet 模式
  3. 是否需要跨集群/跨数据中心数据聚合?
    • 是 → 在 DaemonSet/Agent 之上叠加 集中式转发器模式
    • 否 → 当前模式即可满足需求
最佳实践: 大多数生产环境采用“DaemonSet + 集中式转发器”的组合模式。DaemonSet 负责节点级采集,转发器负责数据聚合、过滤和路由,既保证了覆盖范围,又降低了输出目标端的连接压力。