3. Jaeger 部署模式:All-in-one vs 生产级 Kubernetes 部署,选型对比
Jaeger 提供两种主流的部署模式:All-in-one 和 生产级 Kubernetes 部署。前者适用于本地开发与快速验证,后者则面向生产环境的高可用与大规模链路采集。本节将从架构、组件、资源消耗、可观测性 SLI 支撑能力等维度进行系统性对比。
3.1 All-in-one 模式:快速原型验证
All-in-one 将 Jaeger 的所有核心组件(Agent、Collector、Query、UI、Storage)打包在同一个二进制或容器进程中,默认使用内存存储。这种模式启动简单,适合开发者在笔记本或测试环境快速体验链路追踪。
适用场景:本地开发调试、功能验证、Demo 演示、小规模单机测试(trace 量 < 1000 spans/s)。
3.1.1 组件架构
3.1.2 启动方式
# Docker 单行启动
docker run -d --name jaeger \
-p 16686:16686 \
-p 14250:14250 \
-p 6831:6831/udp \
jaegertracing/all-in-one:1.60
快速验证技巧:启动后访问 http://localhost:16686 即可打开 Jaeger UI,配合 OpenTelemetry SDK 发送一条 trace 即可验证链路是否完整。
3.2 生产级 Kubernetes 部署:高可用与弹性
生产环境需要将 Jaeger 组件解耦为独立微服务,部署在 Kubernetes 集群中,支持水平扩展、持久化存储、多租户隔离与故障自愈。通常使用 Jaeger Operator 或 OpenTelemetry Collector 作为采集层。
关键差异:生产部署必须分离 Collector 与 Storage,避免单点故障;Agent 以 DaemonSet 形式运行在每个节点上,或通过 Sidecar 注入。
3.2.1 组件架构
3.3 选型对比表
| 对比维度 | All-in-one | 生产级 Kubernetes 部署 |
|---|---|---|
| 部署复杂度 | 极低,单容器启动 | 较高,需 Operator / Helm Chart |
| 组件隔离 | 单进程,无隔离 | 独立微服务,故障隔离 |
| 存储持久化 | 内存存储,重启丢失 | Elasticsearch / Cassandra / S3 |
| 水平扩展 | 不支持 | Collector / Query 支持 HPA |
| 采集吞吐 | < 1000 spans/s | 10万+ spans/s(可调) |
| 高可用 | 无,单点故障 | 多副本 + 健康检查 + 自动恢复 |
| 数据保留策略 | 无 | 支持 TTL、索引生命周期管理 |
| 多租户隔离 | 不支持 | 支持 / 命名空间隔离 |
| SLI 可观测性 | 基础,仅 Jaeger 自身指标 | 完整:采集延迟、存储写入速率、查询 P99 延迟 |
| 运维成本 | 几乎为零 | 需维护存储集群、监控 Collector 健康 |
3.4 生产部署关键配置建议
- Agent 部署模式:推荐使用 DaemonSet 在每个节点部署一个 Agent,减少 Sidecar 资源开销;对于需要独立采集配置的命名空间,可使用 Sidecar 注入。
- Collector 副本数:至少 2 副本,根据每秒 span 数配置 HPA 阈值(例如 CPU > 70% 或每秒 span > 5000)。
- 存储选型:Elasticsearch 适合中等规模(TB 级),Cassandra 适合超大规模写入;避免使用内存存储。
- 采样策略:生产环境必须配置概率采样或自适应采样,避免全量采集导致存储爆炸。
SLI 口径优化关联:生产级部署模式下,Collector 暴露
jaeger_collector_spans_received_total、jaeger_collector_spans_saved_total、jaeger_query_latency_seconds 等指标,可直接用于构建基础设施 SLI 看板。All-in-one 模式不提供这些细粒度指标,无法支撑 SLI 口径优化。