4. Fluent Bit 部署模式:DaemonSet、Sidecar、Aggregator 的选择

在多集群与大规模节点场景下,Fluent Bit 的部署模式直接决定了日志采集的可靠性、资源开销与运维复杂度。本章从架构视角对比三种主流部署模式:DaemonSet(节点级代理)、Sidecar(应用级代理)与 Aggregator(集中转发器),并给出选型决策矩阵。

4.1 三种部署模式概述

部署模式 部署位置 采集粒度 典型场景
DaemonSet 每个 Kubernetes 节点 1 个 Pod 节点级(所有容器 stdout/stderr + 节点日志) 通用日志采集、集群审计、节点监控
Sidecar 与业务容器同 Pod 应用级(单个 Pod 内日志) 多行日志、特殊解析、应用日志隔离
Aggregator 独立 Deployment/StatefulSet 集群级(接收上游 Fluent Bit 转发) 跨集群汇聚、数据过滤、缓冲与重试
选型原则:DaemonSet 是默认首选,覆盖 80% 以上场景;Sidecar 用于需要应用级定制解析或隔离的场景;Aggregator 用于跨集群、跨数据中心或需要集中缓冲/降级处理的架构层。

4.2 DaemonSet:节点级日志代理

DaemonSet 模式在每个 Kubernetes 节点上运行一个 Fluent Bit Pod,通过挂载宿主机 /var/log/containers、/var/log/pods 等路径采集所有容器的标准输出日志。这是 Fluent Bit 官方推荐的生产部署方式。

  • 优势:资源开销低(每个节点仅 1 个 Pod)、配置统一、自动扩缩容随节点增减。
  • 劣势:无法处理应用侧多行日志(如 Java 堆栈)、日志解析逻辑全局生效,无法按应用定制。
  • 适用:集群审计日志、节点 syslog、大部分无状态服务的 stdout 日志。
# 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:3.1
        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

4.3 Sidecar:应用级日志代理

Sidecar 模式将 Fluent Bit 作为业务 Pod 内的第二个容器运行,通过 emptyDir 卷共享日志文件。适用于需要应用级定制解析、多行日志合并或日志格式转换的场景。

  • 优势:日志解析与应用完全解耦但隔离、支持多行日志、可按应用独立配置。
  • 劣势:每个业务 Pod 额外消耗资源(CPU/内存)、运维复杂度高(需注入 Sidecar)。
  • 适用:Java 堆栈日志、自定义日志格式、需要应用级标签的场景。
# Sidecar 注入示例(部分 Pod 配置)
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-app
    image: my-app:latest
    volumeMounts:
    - name: shared-logs
      mountPath: /var/log/app
  - name: fluent-bit-sidecar
    image: cr.fluentbit.io/fluent/fluent-bit:3.1
    volumeMounts:
    - name: shared-logs
      mountPath: /var/log/app
      readOnly: true
    - name: config
      mountPath: /fluent-bit/etc
  volumes:
  - name: shared-logs
    emptyDir: {}
  - name: config
    configMap:
      name: fluent-bit-sidecar-config
性能注意:Sidecar 模式会成倍增加集群中 Fluent Bit 实例总数。例如 1000 个业务 Pod 将运行 1000 个 Fluent Bit Sidecar,总内存开销可能达到 DaemonSet 模式的 10~20 倍。建议仅在必要时使用,并设置严格的资源 limits。

4.4 Aggregator:集中转发器

Aggregator 模式以 Deployment 或 StatefulSet 形式部署独立的 Fluent Bit 集群,专门接收来自多个 DaemonSet 或 Sidecar 实例的转发数据。它是跨集群日志架构的核心组件。

  • 优势:集中处理数据过滤、路由、缓冲、重试;支持跨集群、跨区域汇聚;可独立扩缩容。
  • 劣势:增加一跳网络延迟;需要额外的负载均衡与服务发现。
  • 适用:多集群统一输出、数据脱敏、集中告警、后端存储限流保护。
# Aggregator 转发接收配置(fluent-bit.conf)
[SERVICE]
    flush           1
    log_level       info

[INPUT]
    name            forward
    listen          0.0.0.0
    port            24224
    buffer_chunk_size    1M
    buffer_max_size      10M

[OUTPUT]
    name            es
    match           *
    host            elasticsearch-central.example.com
    port            9200
    index           fluent-bit-%Y.%m.%d
    retry_limit     5

4.5 部署模式对比与选型矩阵

评估维度 DaemonSet Sidecar Aggregator
资源开销(每节点) 低(1 Pod) 高(N Pod) 中(按需扩缩)
配置灵活性 全局统一 应用级定制 集中策略
多行日志支持 困难 原生支持 依赖上游
跨集群能力 单集群 单集群 多集群
运维复杂度 低 高 中
推荐场景 通用采集 应用定制 集中转发

4.6 混合部署架构

生产环境中通常采用 DaemonSet + Aggregator 的混合模式:DaemonSet 负责节点级采集,Aggregator 负责跨集群汇聚与缓冲。Sidecar 仅在需要应用级定制时按需注入。

最佳实践:在集群内使用 DaemonSet 采集 90% 以上的日志;对需要多行合并或特殊解析的应用,通过 Admission Webhook 自动注入 Sidecar;所有日志统一转发至 Aggregator 层,再由 Aggregator 输出到 Elasticsearch、Kafka 或 S3。
Fluent Bit 混合部署架构:DaemonSet + Sidecar + Aggregator Fluent Bit 混合部署架构 Kubernetes 集群 A Node A1 Fluent Bit DaemonSet 业务 Pod + Sidecar Node A2 Fluent Bit DaemonSet 业务 Pod + Sidecar Kubernetes 集群 B Node B1 Fluent Bit DaemonSet 业务 Pod + Sidecar Node B2 Fluent Bit DaemonSet 业务 Pod + Sidecar Fluent Bit Aggregator 集群 集中转发 · 缓冲 · 过滤 · 路由 Elasticsearch / Kafka / S3 图例 DaemonSet(节点级采集) Sidecar(应用级采集) Aggregator(集中转发器) 后端存储

4.7 选型决策流程

  1. 是否仅需采集 stdout/stderr? → 是 → 使用 DaemonSet。
  2. 是否需要应用级多行日志解析? → 是 → 考虑 Sidecar 注入。
  3. 是否需要跨集群汇聚或集中缓冲? → 是 → 增加 Aggregator 层。
  4. 资源预算是否充足? → 否 → 优先 DaemonSet,减少 Sidecar 使用。
  5. 运维团队是否具备 Sidecar 管理能力? → 否 → 避免大规模 Sidecar 部署。
总结:DaemonSet 是基石,Aggregator 是跨集群的枢纽,Sidecar 是精细化采集的补充。三者组合使用可构建高可靠、低延迟、可扩展的多集群日志平台。