3. 日志平台架构概览:常见日志采集架构与 Deployment 绑定关系

在 Kubernetes 原生环境下,日志平台通常采用 Agent → 聚合 → 存储 → 查询 的分层架构。每一层组件都以 Deployment(或有状态 StatefulSet)的形式运行,并与日志采集、处理、存储的职责绑定。理解这些组件的 Deployment 绑定关系,是实现版本漂移自动校准的前提。

3.1 常见日志采集架构对比

当前主流日志采集方案包括 Fluentd、Filebeat 和 Loki 生态。下表从采集方式、资源开销、与 Kubernetes 集成度三个维度进行对比:

采集器 部署模式 资源开销 K8s 集成度 典型输出
Fluentd DaemonSet + Deployment 中(Ruby 运行时) 高(原生 CRD 支持) Elasticsearch / Kafka / S3
Filebeat DaemonSet 低(Go 二进制) 中(需配合 Elastic 栈) Elasticsearch / Logstash
Promtail (Loki) DaemonSet 极低(Go 二进制) 高(原生 Label 继承) Loki
校准关注点: 在版本漂移场景中,DaemonSet 管理的 Agent 版本漂移影响面为“节点级”,而 Deployment 管理的聚合/存储组件版本漂移影响面为“集群级”。校准策略需区分对待。

3.2 日志平台核心组件与 Deployment 绑定关系

一个完整的日志平台通常包含以下 5 个核心组件,每个组件都与一个或多个 Deployment 绑定:

  • 日志采集 Agent — 通常以 DaemonSet 部署,但部分场景下会使用 Deployment + Sidecar 模式。
  • 日志聚合转发器 — 以 Deployment 部署,负责接收 Agent 上报的日志,进行过滤、缓冲、路由。
  • 日志存储引擎 — 以 StatefulSet 部署(有状态),但管理面组件(如 Elasticsearch Coordinator)仍使用 Deployment。
  • 日志查询 API — 以 Deployment 部署,提供 HTTP/gRPC 查询接口。
  • 日志清洗/转换管道 — 以 Deployment 部署,运行 Logstash 或 Fluentd 聚合器。

以下 SVG 图展示了典型日志平台架构中各组件的 Deployment 绑定关系:

日志平台组件与 Deployment 绑定关系 日志采集 Agent DaemonSet / Deployment Fluentd / Filebeat / Promtail 日志聚合转发器 Deployment Fluentd Aggregator / Logstash 日志存储引擎 StatefulSet / Deployment Elasticsearch / Loki 日志查询 API Deployment Kibana / Grafana / Loki API 日志清洗/转换管道 Deployment Logstash Filter / Fluentd Filter 版本漂移校准范围说明 • 采集 Agent 版本漂移:影响节点日志采集,校准需重启 DaemonSet Pod • 聚合/清洗/查询组件版本漂移:影响集群日志处理链路,校准需滚动更新 Deployment • 存储引擎版本漂移:影响数据持久化,校准需谨慎处理 StatefulSet 有状态升级 • 校准策略核心:通过 Deployment 的 revision 历史与预期版本比对,触发自动回滚

3.3 典型日志采集架构详解

3.3.1 Fluentd 架构

Fluentd 采用 Agent + Aggregator 双层架构。Agent 以 DaemonSet 部署在每台 Node 上,采集容器标准输出和文件日志;Aggregator 以 Deployment 部署,接收 Agent 上报的日志,进行过滤、缓冲后写入后端存储。版本漂移可能发生在 Agent 层或 Aggregator 层,校准策略需分别处理。

3.3.2 Filebeat 架构

Filebeat 以 DaemonSet 部署,直接采集日志并发送到 Elasticsearch 或 Logstash。由于 Filebeat 本身不承担聚合职责,版本漂移影响范围集中在节点级。校准策略通常为:检测 DaemonSet 的 image 版本与预期版本不一致时,触发 DaemonSet 滚动更新。

3.3.3 Loki + Promtail 架构

Promtail 以 DaemonSet 部署,采集日志并直接写入 Loki。Loki 本身由多个组件组成:Distributor(Deployment)、Ingester(StatefulSet)、Querier(Deployment)。版本漂移校准需分别监控每个组件的 Deployment revision。

校准关键指标: 在自动校准系统中,每个 Deployment 的 spec.template.spec.containers[].image 字段是版本漂移检测的原子单位。通过对比当前 image 与预期 image 的 SHA256 摘要,可以精确判断是否发生版本漂移。

3.4 组件与 Deployment 绑定关系清单

以下表格列出了日志平台各组件的 Deployment 绑定关系及版本漂移影响范围:

组件名称 K8s 资源类型 绑定 Deployment 名称 版本漂移影响范围 校准优先级
Fluentd Agent DaemonSet fluentd-agent 节点级 中
Fluentd Aggregator Deployment fluentd-aggregator 集群级 高
Filebeat DaemonSet filebeat 节点级 中
Promtail DaemonSet promtail 节点级 中
Loki Distributor Deployment loki-distributor 集群级 高
Loki Querier Deployment loki-querier 集群级 高
Elasticsearch Coordinator Deployment es-coordinator 集群级 高
Kibana Deployment kibana 集群级 低
校准陷阱: 部分日志平台将多个组件打包在同一个 Deployment 的多个 Container 中(Sidecar 模式)。此时版本漂移检测需分别检查每个 Container 的 image 版本,不能仅依赖 Deployment 级别的 revision 变化。

3.5 架构设计对校准策略的影响

不同的日志采集架构决定了版本漂移自动校准的实现复杂度:

  • 单层架构(Filebeat/Promtail):校准逻辑简单,只需监控 DaemonSet 的 image 版本,触发滚动更新即可。
  • 双层架构(Fluentd Agent + Aggregator):校准逻辑复杂,需分别监控 Agent 和 Aggregator 的版本,且 Aggregator 的版本漂移可能导致日志丢失,校准需先暂停 Agent 上报。
  • 微服务架构(Loki 多组件):校准逻辑最复杂,需维护组件间的版本兼容性矩阵,避免 Distributor 与 Ingester 版本不匹配导致数据写入失败。