迁移到 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 v2Alauda Distributed Tracing 集成。

迁移完成后:

  • 新的 trace 会由 v2 OpenTelemetry Collector 接收,并存储到新的 Jaeger v2 后端中。
  • 旧版 Jaeger 实例会继续运行一段观察窗口(默认 7 天),以便此前存储的 trace 仍可通过旧版 Jaeger UI 查询,然后再将其删除。

有关背景信息、对比表、双重导出选项以及回滚路径,请参阅底层的 从 Alauda Container Platform Tracing 迁移 指南;本文档仅聚焦于 Service Mesh 部署中有所不同的步骤。

迁移期间的 Tracing 中断

在删除旧版 OpenTelemetryCollector 到将 Istio 资源修补为指向新的 OpenTelemetry Collector 之间,trace 接收会中断。应用流量不受影响,但在该时间窗口内生成的 span 会丢失。请在低流量时段执行迁移,并提前通知 telemetry 使用方。

前提条件

  • 集群管理员已使用 cluster-admin 角色建立了有效的 kubectl 会话。
  • 使用 Service Mesh 配置分布式追踪平台(已弃用) 中描述的旧版 Service Mesh tracing 栈当前已安装——也就是说,名为 otelOpenTelemetryCollector 和名为 jaeger-prodJaeger 实例都在 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。

  1. 删除 istio-system 命名空间中的旧版 OpenTelemetryCollector 实例:

    kubectl -n istio-system delete opentelemetrycollector otel
  2. 在 Web 控制台的 Administrator 视图中卸载 Alauda Build of OpenTelemetry Operator。

    • MarketplaceOperatorHub → 使用 search box 搜索 Alauda build of OpenTelemetry
    • 单击 Alauda build of OpenTelemetry 标题以进入其详情页。
    • Alauda build of OpenTelemetry 详情页右上角单击 Uninstall 按钮。
    • Uninstall "opentelemetry-operator"? 窗口中,单击 Uninstall

有关为什么必须先移除 v1 Operator 再安装 v2 Operator,以及由此产生的中断特征,请参阅 Alauda Distributed Tracing 迁移指南中的 将 Alauda Build of OpenTelemetry 迁移到 v2

部署新的分布式追踪栈

完成 使用 Service Mesh 配置分布式追踪平台前提条件 部分,以启动 v2 栈:

  • 安装 Alauda Build of OpenTelemetry v2 Operator。
  • 部署新的 Jaeger v2 实例(默认部署到 jaeger-system 命名空间)。
  • 部署 v2 OpenTelemetry Collector(默认部署到 jaeger-system 命名空间)。

v2 栈与 istio-system 中的旧版 jaeger-prod Jaeger 在命名空间上相互隔离,因此两者可以在观察窗口期间共存。

NOTE

在满足 使用 Service Mesh 配置分布式追踪平台前提条件 之后即可停止。网格侧配置(IstioTelemetry 资源)已在旧版安装中就位,并将在下一步的 patch 中更新——迁移期间不要执行该文档中的 操作步骤 部分。

将 Istio extension provider 重新指向新的 OpenTelemetry Collector

修补 Istio 资源,使 otel extension provider 指向 jaeger-system 命名空间中的新 v2 OpenTelemetry Collector,而不是已删除的 istio-system 中的旧版 Collector:

kubectl patch istio default --type=merge -p '
spec:
  values:
    meshConfig:
      enableTracing: true
      extensionProviders:
      - name: otel
        opentelemetry:
          port: 4317
          service: otel-collector.jaeger-system.svc.cluster.local
'
WARNING

此命令使用 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

  1. 删除 istio-system 命名空间中的旧版 Jaeger 实例及其支持资源。下面的资源名称与使用 --target-namespace='istio-system' 执行 install-jaeger.sh 时生成的默认值一致;如果你在最初安装时使用了不同的 --jaeger-instance-name,请相应调整。

    kubectl -n istio-system delete ingress      jaeger-prod-query         --ignore-not-found
    kubectl -n istio-system delete podmonitor   jaeger-prod-monitor       --ignore-not-found
    kubectl -n istio-system delete jaeger       jaeger-prod               --ignore-not-found
    kubectl -n istio-system delete rolebinding  jaeger-prod-rb            --ignore-not-found
    kubectl -n istio-system delete role         jaeger-prod-role          --ignore-not-found
    kubectl -n istio-system delete sa           jaeger-prod-sa            --ignore-not-found
    kubectl -n istio-system delete secret       jaeger-prod-oauth2-proxy  --ignore-not-found
    kubectl -n istio-system delete secret       jaeger-prod-es-basic-auth --ignore-not-found
    kubectl -n istio-system delete configmap    jaeger-prod-oauth2-proxy  --ignore-not-found
  2. 在 Web 控制台的 Administrator 视图中卸载 Alauda build of Jaeger Operator。

    • MarketplaceOperatorHub → 使用 search box 搜索 Alauda build of Jaeger
    • 单击 Alauda build of Jaeger 标题以进入其详情页。
    • Alauda build of Jaeger 详情页右上角单击 Uninstall 按钮。
    • Uninstall "jaeger-operator"? 窗口中,单击 Uninstall

有关可选的后续任务——清理已删除的 jaeger-es-index-cleaner 不再轮转的残留旧版 Elasticsearch 索引——请参阅 Alauda Distributed Tracing 迁移指南中的 禁用旧版功能开关并清理旧版索引