迁移到 Jaeger v2
本文档介绍如何将现有的 Service Mesh 分布式追踪栈——旧版 Alauda Build of Jaeger(Jaeger 1.60.0)加上 Alauda Build of OpenTelemetry 集成,如 使用 Service Mesh 配置分布式追踪平台(已弃用) 中所述——迁移到当前基于 Jaeger v2(2.16.0)加上 Alauda Build of OpenTelemetry v2 的 Alauda Distributed Tracing 集成。
迁移完成后:
- 新的 trace 会由 v2 OpenTelemetry Collector 接收,并存储到新的 Jaeger v2 后端中。
- 旧版 Jaeger 实例会继续运行一段观察窗口(默认 7 天),以便此前存储的 trace 仍可通过旧版 Jaeger UI 查询,然后再将其删除。
有关背景信息、对比表、双重导出选项以及回滚路径,请参阅底层的 从 Alauda Container Platform Tracing 迁移 指南;本文档仅聚焦于 Service Mesh 部署中有所不同的步骤。
在删除旧版 OpenTelemetryCollector 到将 Istio 资源修补为指向新的 OpenTelemetry Collector 之间,trace 接收会中断。应用流量不受影响,但在该时间窗口内生成的 span 会丢失。请在低流量时段执行迁移,并提前通知 telemetry 使用方。
前提条件
- 集群管理员已使用
cluster-admin角色建立了有效的kubectl会话。 - 使用 Service Mesh 配置分布式追踪平台(已弃用) 中描述的旧版 Service Mesh tracing 栈当前已安装——也就是说,名为
otel的OpenTelemetryCollector和名为jaeger-prod的Jaeger实例都在istio-system命名空间中运行,并且Istio资源定义了一个名为otel的 extension provider,其目标为otel-collector.istio-system.svc.cluster.local。 - 已通知 telemetry 使用方(开发者、Kiali 用户、SRE 仪表板)以及应用所有者计划中的中断窗口。
迁移操作步骤
卸载旧版 OpenTelemetry Collector 和 Operator
v1 和 v2 Alauda Build of OpenTelemetry Operator 共享相同的 CRD,因此必须先移除 v1 Operator,再安装 v2 Operator。旧版 Alauda Build of Jaeger Operator 拥有单独的 CRD(jaegertracing.io/v1.Jaeger),会继续运行,以便旧版 Jaeger 在观察窗口内持续提供历史 trace。
-
删除
istio-system命名空间中的旧版OpenTelemetryCollector实例: -
在 Web 控制台的 Administrator 视图中卸载
Alauda Build of OpenTelemetryOperator。- 从 Marketplace → OperatorHub → 使用 search box 搜索
Alauda build of OpenTelemetry。 - 单击 Alauda build of OpenTelemetry 标题以进入其详情页。
- 在 Alauda build of OpenTelemetry 详情页右上角单击 Uninstall 按钮。
- 在 Uninstall "opentelemetry-operator"? 窗口中,单击 Uninstall。
- 从 Marketplace → OperatorHub → 使用 search box 搜索
有关为什么必须先移除 v1 Operator 再安装 v2 Operator,以及由此产生的中断特征,请参阅 Alauda Distributed Tracing 迁移指南中的 将 Alauda Build of OpenTelemetry 迁移到 v2。
部署新的分布式追踪栈
完成 使用 Service Mesh 配置分布式追踪平台 的 前提条件 部分,以启动 v2 栈:
- 安装
Alauda Build of OpenTelemetry v2Operator。 - 部署新的
Jaeger v2实例(默认部署到jaeger-system命名空间)。 - 部署 v2 OpenTelemetry Collector(默认部署到
jaeger-system命名空间)。
v2 栈与 istio-system 中的旧版 jaeger-prod Jaeger 在命名空间上相互隔离,因此两者可以在观察窗口期间共存。
在满足 使用 Service Mesh 配置分布式追踪平台 的 前提条件 之后即可停止。网格侧配置(Istio 和 Telemetry 资源)已在旧版安装中就位,并将在下一步的 patch 中更新——迁移期间不要执行该文档中的 操作步骤 部分。
将 Istio extension provider 重新指向新的 OpenTelemetry Collector
修补 Istio 资源,使 otel extension provider 指向 jaeger-system 命名空间中的新 v2 OpenTelemetry Collector,而不是已删除的 istio-system 中的旧版 Collector:
此命令使用 JSON merge patch,会替换整个 meshConfig.extensionProviders 数组。如果 Istio 资源定义了其他 extension provider,请使用 kubectl edit istio default 交互式编辑资源,或者使用追加到 /spec/values/meshConfig/extensionProviders/- 的 JSON Patch(--type=json),以便保留这些配置。
该 patch 应用并且 Istio control plane 完成协调后,sidecar 会将 span 发送到新的 OpenTelemetry Collector,并且新的 trace 会出现在 Jaeger v2 UI 中。无需更改 Telemetry 资源,因为它已经通过名称(otel)引用了该 provider。
(在 ≥ 7 天后)卸载旧版 Jaeger 实例和 Operator
只要旧版 jaeger-es-index-cleaner 仍在保留它们,旧版 Jaeger 就会继续提供 切换前 生成的 trace——默认情况下,从每个索引的创建日期起保留 7 天。请在切换后至少保留旧版 Jaeger 运行 7 天,以便用户仍可在 <platform-url>/clusters/<cluster>/istio/jaeger 的旧版 UI 中搜索最近的历史 trace。一旦旧版保留期到期,即可执行下面的清理操作。
切换前的 trace 不会迁移到新的 Jaeger v2 后端;一旦删除旧版 Jaeger,这些 trace 将无法恢复。有关数据连续性模型,请参阅 Trace data continuity strategy。
-
删除
istio-system命名空间中的旧版Jaeger实例及其支持资源。下面的资源名称与使用--target-namespace='istio-system'执行install-jaeger.sh时生成的默认值一致;如果你在最初安装时使用了不同的--jaeger-instance-name,请相应调整。 -
在 Web 控制台的 Administrator 视图中卸载
Alauda build of JaegerOperator。- 从 Marketplace → OperatorHub → 使用 search box 搜索
Alauda build of Jaeger。 - 单击 Alauda build of Jaeger 标题以进入其详情页。
- 在 Alauda build of Jaeger 详情页右上角单击 Uninstall 按钮。
- 在 Uninstall "jaeger-operator"? 窗口中,单击 Uninstall。
- 从 Marketplace → OperatorHub → 使用 search box 搜索
有关可选的后续任务——清理已删除的 jaeger-es-index-cleaner 不再轮转的残留旧版 Elasticsearch 索引——请参阅 Alauda Distributed Tracing 迁移指南中的 禁用旧版功能开关并清理旧版索引。