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 四种部署模式架构关系图
下图展示了四种部署模式在典型数据采集与转发拓扑中的位置关系:
3.7 部署模式选择决策树
在实际项目中,可根据以下条件快速选择最合适的部署模式:
- 是否运行在 Kubernetes 集群?
- 是 → 进入第 2 步
- 否 → 使用 Agent 模式 或 集中式转发器模式
- 是否需要应用级日志隔离或定制处理?
- 是 → 使用 Sidecar 模式
- 否 → 使用 DaemonSet 模式
- 是否需要跨集群/跨数据中心数据聚合?
- 是 → 在 DaemonSet/Agent 之上叠加 集中式转发器模式
- 否 → 当前模式即可满足需求
最佳实践: 大多数生产环境采用“DaemonSet + 集中式转发器”的组合模式。DaemonSet 负责节点级采集,转发器负责数据聚合、过滤和路由,既保证了覆盖范围,又降低了输出目标端的连接压力。