使用 OpenSearch 升级 Alauda Distributed Tracing
将基于 OpenSearch 的部署从 v2.0(Jaeger 2.16.0、Alauda Build of OpenTelemetry v2 Operator 0.147.0)升级到 v2.1(Jaeger 2.20.0、Operator 0.157.0)涉及以下步骤:
- 安装 Alauda Build of Jaeger v2 集群插件
- 升级 Alauda Build of OpenTelemetry v2 Operator
- 更新 OpenTelemetry Collector
- 将索引管理迁移到 ISM
- 更新 Alauda Build of Jaeger v2
- 停用索引清理器
此次升级会更改索引布局。v2.0 部署会每天写入一个带日期后缀的索引,例如 <prefix>-jaeger-span-2026-08-27,并通过 jaeger-es-index-cleaner CronJob 删除已过期索引。v2.1 部署会通过 rollover alias 写入编号索引,例如 <prefix>-jaeger-span-000001,并将 rollover 和保留策略交由 OpenSearch ISM policy 处理。
现有索引不会重命名,也不会重新索引,但在切换后,Jaeger 只会通过读 alias 读取它们。步骤 4 会将这些索引附加到该 alias,从而保持历史 trace 仍可查询。
先决条件
- 按照 安装使用 OpenSearch 的 Alauda Distributed Tracing 中的说明安装的 Alauda Distributed Tracing v2.0 部署。
- Alauda Build of Jaeger v2 集群插件和 Alauda Build of OpenTelemetry v2 Operator 0.157.0 已发布到平台。
- 集群管理员使用
cluster-admin角色建立的有效 ACP CLI (kubectl) 会话,分别针对目标集群和global集群。 - 查看此版本引入的行为变更所对应的 Upgrade Notes。
设置环境变量
针对目标集群运行以下命令。OpenSearch endpoint、索引前缀以及凭据会从正在运行的部署中读取并返回,因此始终与其保持一致:
目录
安装 Alauda Build of Jaeger v2 集群插件通过 Web 控制台安装通过 CLI 安装读取镜像地址升级 Alauda Build of OpenTelemetry v2 Operator通过 Web 控制台升级通过 CLI 升级更新 OpenTelemetry Collector(可选)为 Service Performance Monitoring 更新 Collector将索引管理迁移到 ISM更新 Alauda Build of Jaeger v2(可选)为 Service Performance Monitoring 更新 Jaeger停用索引清理器验证安装 Alauda Build of Jaeger v2 集群插件
从 v2.1 开始,tracing 组件的容器镜像由 Alauda Build of Jaeger v2 集群插件提供,而不再由 Operator bundle 提供。安装该插件会将镜像同步到平台内置 registry,并在目标集群的 cpaas-system 命名空间中创建 jaeger-cluster-plugin-manifest ConfigMap。后续步骤会从该 ConfigMap 中读取镜像地址。
通过 Web 控制台安装
- 在平台管理视图中,导航到 Administrator > Marketplace > Cluster Plugins。
- 选择部署 tracing 组件的集群。
- 找到 Alauda Build of Jaeger v2 并单击 Install。该插件不需要安装参数。
通过 CLI 安装
无论插件目标集群是哪一个,集群插件都通过在 global 集群中 创建 ModuleInfo 资源来安装。
-
在
global集群中运行以下命令,查看已发布的插件版本: -
在
global集群中创建ModuleInfo资源。将<target-cluster>替换为部署 tracing 组件的集群名称,将<plugin-version>替换为上一步中的一个版本: -
在
global集群中验证安装。STATUS列显示Running时表示插件安装成功:NOTE平台会为该资源分配一个生成的名称,因此请通过 label 查询
ModuleInfo,而不是使用清单中使用的名称。
读取镜像地址
针对目标集群运行以下命令。后续步骤会使用导出的变量:
升级 Alauda Build of OpenTelemetry v2 Operator
该 Operator 使用 Manual approval 策略进行订阅,因此必须显式批准升级。有关 Operator 升级的一般背景信息,请参见 Operator。
通过 Web 控制台升级
请选择以下方法之一:
- 批量升级:导航到 Platform Management > Cluster Management > Clusters > cluster > Functional Components,然后升级 Alauda Build of OpenTelemetry v2。
- 单独升级:导航到 Administrator > Marketplace > OperatorHub,打开 Alauda Build of OpenTelemetry v2,并批准待处理的升级请求。
通过 CLI 升级
-
确认目标版本已在已订阅的 channel 中可用:
-
批准待处理的
InstallPlan: -
等待新的
ClusterServiceVersion进入Succeeded阶段:示例输出
Operator 升级会重启受管 Collector。otel Collector 未固定 spec.image,因此会立即采用新 Operator 附带的 Collector 版本;而 Jaeger 实例会一直使用 spec.image 中固定的镜像,直到 步骤 5。重命名后的组件类型仍可作为已弃用的别名使用,因此 Collector 会继续运行,并且只会记录弃用警告,直到下一步。
更新 OpenTelemetry Collector
Operator 会在升级期间重新签发其 admission webhook 证书。在此期间应用的补丁会被拒绝,并返回 failed calling webhook "mopentelemetrycollectorbeta.kb.io": ... x509: certificate signed by unknown authority。请等待几秒后再次应用。
操作步骤
-
创建名为
otel-upgrade-patch.yaml的文件,内容如下:otlpexporter 类型已重命名为otlp_grpc。将旧键设置为null会将其移除,新键会以相同 endpoint 重新创建该 exporter。add_metric_suffixes已弃用,并会被静默忽略。translation_strategy: UnderscoreEscapingWithoutSuffixes可使 metric 名称不再带有 Prometheus 风格的后缀。- Prometheus reader 的
without_scope_info、without_type_suffix和without_units设置现在默认值为true,并已被移除。由于readers是列表,该补丁会整体替换它。暴露的 metric 名称保持不变。
-
使用
envsubst渲染补丁并应用它: -
等待 Collector 重启,并确认其启动时没有弃用警告:
(可选)为 Service Performance Monitoring 更新 Collector
重命名将 span 路由到 Jaeger tier 的 loadbalancing exporter。请在前一个补丁之后立即应用此补丁:在这两次操作之间,span 会通过直接 exporter 到达 Jaeger,而不是由 service 路由,这会在 Jaeger tier 运行多个 Replica 时使 RED metric 发生分裂。
-
创建名为
otel-spm-upgrade-patch.yaml的文件,内容如下: -
使用
envsubst渲染补丁并应用它:
将索引管理迁移到 ISM
v2.0 部署会让 Jaeger 每天计算一个新的索引名称,并依赖 jaeger-es-index-cleaner CronJob 来执行保留策略。此步骤用于准备替代它的基于 alias 的布局:一个会执行 rollover 和删除索引的 ISM policy,以及 Jaeger 通过其写入的 aliases 和 index templates。
请在更新 Jaeger 配置之前执行此步骤。Jaeger 一旦切换,就会立即通过 write alias 写入,因此 aliases 必须已存在。
操作步骤
-
创建 ISM policy。该 policy 必须在初始化创建索引之前存在,因为 OpenSearch 会通过 policy 中声明的
ism_templatepatterns 关联 policy:将
transitions[0].conditions.min_index_age设置为当前jaeger-es-index-cleanerCronJob 应用的保留期限,以确保升级前后保留策略不变。其他字段的含义请参见 ISM Support。WARNING请保留
ism_templatepatterns 中的-0*后缀。它只会匹配编号 rollover 索引,例如-000001。像-*这样更宽泛的 pattern 也会匹配该部署仍然保留的带日期后缀索引,而 ISM 无法对这些索引执行 rollover。 -
使用新镜像运行
jaeger-es-rollover初始化。它会创建 index templates、-000001索引,以及 read 和 write aliases:初始化还会更新 index templates,而 Jaeger v2.20.0 需要这些模板来写入新增的 span 字段,例如
scopeTags和references.traceState。WARNING不要在此步骤与 步骤 5 之间重启 Jaeger 实例。此时它仍运行 v2.0 配置,其中
create_mappings的默认值为true,因此在启动时它会重新创建 index templates,并删除此步骤刚刚写入的 read alias 和 ISM rollover alias。写入仍会成功,因此直到第一次 rollover 时才会发现丢失。如果实例确实重启了,请在之后重新运行此 Job 以恢复这些模板。 -
将现有的带日期后缀索引附加到 read alias。切换后,Jaeger 只通过 read alias 解析读取请求,因此未附加的索引在 Jaeger UI 中将不可见:
-2*pattern 会匹配带日期后缀的索引,例如-2026-08-27,而不会匹配上一步创建的-000001索引。对于从未生成过带日期后缀索引的索引类型,会返回index_not_found_exception;在大多数部署中,这对于dependencies和sampling属于预期行为。NOTE在基于 alias 的轮转下,Jaeger 不再根据
max_span_age限制查询,因此 trace 查询以及 service 和 operation 列表会扫描附加到 read alias 的所有索引。只应附加您仍然需要其 trace 的索引。它们会在 步骤 6 中由索引清理器删除时自动从 alias 中移除。
更新 Alauda Build of Jaeger v2
操作步骤
-
创建名为
jaeger-upgrade-patch.yaml的文件,内容如下:- 在基于 alias 的轮转下,
max_span_age不再生效,因为 Jaeger 无法根据时间戳推导索引名称。移除它可以避免出现一个看似生效但实际上被忽略的设置。 max_trace_duration会在查询时间范围的两侧扩展窗口,从而仍能找到延伸到搜索窗口之外的 span。请参见 Query Time Range。create_mappings: false可阻止 Jaeger 创建自己的 index templates,否则这些模板会覆盖初始化写入的模板,并从中删除 read alias 和 ISM rollover alias。这里不会有验证捕获此问题,写入也会持续成功,直到第一次 rollover 之后新数据不再可读。请参见 Index Rollover。- 必须移除已弃用的
date_layout和rollover_frequency字段。merge patch 不会隐式删除它们,而将它们与rotation组合会导致验证失败,错误信息为cannot use both 'rotation' config and legacy 'date_layout'/'rollover_frequency' fields。 rotation.auto_rollover选择由生命周期管理的 rollover。其默认 alias 名称与初始化创建的 aliases 匹配。请保持auto_rollover.policy_name为空:在 OpenSearch 中,policy 通过ism_templatepatterns 绑定,而不是通过名称绑定。请参见 Index Management Strategies。- Operator 会将
service.telemetry.resource解析为字符串的扁平 map,并在其不是该格式时静默丢弃整个service.telemetry部分。Jaeger 已经会报告自身的service.name和service.version,因此这里是移除该 block,而不是迁移它。 - 与
otelCollector 一样,without_*设置现在默认值为true,并通过替换readers列表来移除。
- 在基于 alias 的轮转下,
-
使用
envsubst渲染补丁,应用它,并等待 Jaeger 重启: -
更新 OAuth2 Proxy sidecar 镜像。由于
additionalContainers是一个列表,merge patch 会整体替换它,因此此容器通过单独的 JSON patch 进行更新:WARNING仅在上一步之后应用此补丁。它会重启 Pod,而如果重启时仍加载 v2.0 配置,Jaeger 就会重新创建 步骤 4 中写入的 index templates,并从中删除 read alias 和 ISM rollover alias。
(可选)为 Service Performance Monitoring 更新 Jaeger
-
创建名为
jaeger-spm-upgrade-patch.yaml的文件,内容如下: -
使用
envsubst渲染补丁,应用它,并等待 Jaeger 重启:
此重命名适用于 Jaeger distribution。独立的 OpenTelemetry Collector 只会从 Collector 0.152.0 开始注册 span_metrics,因此在前端 Collector 配置中重命名 connector 之前,请先确认 Collector 版本。
停用索引清理器
ISM policy 现在会自动 rollover 并删除编号索引,因此对于新数据而言,jaeger-es-index-cleaner CronJob 已不再需要。请保持其运行,直到 v2.0 遗留的带日期后缀索引过期:ISM 只管理其 ism_template patterns 匹配到的索引,而这些 patterns 会刻意排除带日期后缀的索引。
保留该 CronJob 是安全的。在默认模式下,它只匹配以 -YYYY-MM-DD 结尾的名称,并且会跳过附加到 write alias 的索引,因此绝不会删除编号索引。
-
检查是否仍有带日期后缀的索引:
-
一旦该命令无输出,即可删除 CronJob:
验证
-
确认组件版本以及所有 Pod 是否已就绪:
-
确认 Jaeger 启动时没有弃用警告:
-
确认 index templates 仍然保留 read alias 和 ISM rollover alias。空结果表示 Jaeger 已将其覆盖,因为它在 v2.0 配置仍生效时重启了,或者因为缺少
create_mappings: false。重新运行 将索引管理迁移到 ISM 中的初始化 Job 以恢复它们: -
确认新 span 已写入编号索引,并且 read alias 仍覆盖带日期后缀的索引:
-
确认 ISM 已接管新索引。
index.plugins.index_state_management.policy_id字段应显示为jaeger-ism-policy。ISM 会通过后台扫描发现新索引,因此这一步可能需要几分钟: -
生成示例 trace,并确认它们已存储且可查询,如安装操作步骤中的 Verification 部分所述。还要确认在升级前最后一次上报的 service 仍然列出,这表明带日期后缀的索引可以通过 read alias 访问。如果启用了 SPM,请在 Jaeger UI 中打开 Monitor 选项卡,并确认生成的 service 显示了 RED metric。