Migrating to Jaeger v2
This document describes how to migrate an existing Service Mesh distributed tracing stack — the legacy Alauda Build of Jaeger (Jaeger 1.60.0) plus Alauda Build of OpenTelemetry integration described in Configuring distributed tracing platform with Service Mesh (Deprecated) — to the current Alauda Distributed Tracing integration based on Jaeger v2 (2.20.0) plus Alauda Build of OpenTelemetry v2.
After the migration:
- New traces are ingested by the v2 OpenTelemetry Collector and stored in the new Jaeger v2 backend.
- Traces produced before the cutover stay in the legacy Elasticsearch indices, which are attached to the read aliases of the new backend. The new Jaeger UI serves them alongside new traces, so nothing is copied or reindexed and no trace history is lost.
- The legacy Jaeger instance is kept only as a rollback target and is removed once the new pipeline has been validated — it no longer has to outlive a full retention window.
For background, comparison tables, and rollback paths, refer to the underlying Migrating from Alauda Container Platform Tracing guide; this Service Mesh document focuses on the steps that differ for a Service Mesh deployment.
Trace ingestion is interrupted between the time the legacy OpenTelemetryCollector is deleted and the time the Istio resource is patched to point at the new OpenTelemetry Collector. Application traffic is not affected, but spans generated during that window are dropped. Plan the migration during a low-traffic window and notify telemetry consumers in advance.
Prerequisites
- An active
kubectlsession by a cluster administrator with thecluster-adminrole. - The legacy Service Mesh tracing stack described in Configuring distributed tracing platform with Service Mesh (Deprecated) is currently installed — that is, an
OpenTelemetryCollectornamedoteland aJaegerinstance namedjaeger-prodare both running in theistio-systemnamespace, and theIstioresource defines anotelextension provider that targetsotel-collector.istio-system.svc.cluster.local. - Telemetry consumers (developers, Kiali users, SRE dashboards) and application owners have been notified of the planned outage window.
Migration procedure
Uninstall the legacy OpenTelemetry Collector and Operator
The v1 and v2 Alauda Build of OpenTelemetry Operators share the same CRDs, so the v1 Operator must be removed before the v2 Operator is installed. The legacy Alauda Build of Jaeger Operator owns a separate CRD (jaegertracing.io/v1.Jaeger) and is left running so that the legacy Jaeger continues to serve historical traces during the observation window.
-
Delete the legacy
OpenTelemetryCollectorinstance in theistio-systemnamespace: -
Uninstall the
Alauda Build of OpenTelemetryOperator from the Administrator view in the web console.- From Marketplace → OperatorHub → use the search box to search for
Alauda build of OpenTelemetry. - Click on the Alauda build of OpenTelemetry title to enter its details.
- On the Alauda build of OpenTelemetry details page, click the Uninstall button in the upper right corner.
- In the Uninstall "opentelemetry-operator"? window, click Uninstall.
- From Marketplace → OperatorHub → use the search box to search for
For background on why the v1 Operator must be removed before the v2 Operator is installed, and on the resulting outage characteristics, see Migrate Alauda Build of OpenTelemetry to v2 in the Alauda Distributed Tracing migration guide.
Deploy the new distributed tracing stack
Complete the Prerequisites section of Configuring distributed tracing platform with Service Mesh to bring up the v2 stack:
- Install the
Alauda Build of OpenTelemetry v2Operator. - Deploy a new
Jaeger v2instance (defaulted to thejaeger-systemnamespace). - Deploy the v2 OpenTelemetry Collector (defaulted to the
jaeger-systemnamespace).
The v2 stack is namespace-isolated from the legacy jaeger-prod Jaeger in istio-system, so the two can coexist for the duration of the observation window.
Stop after the Prerequisites of Configuring distributed tracing platform with Service Mesh are satisfied. The mesh-side configuration (the Istio and Telemetry resources) is already in place from the legacy installation and is updated by the patch in the next step — do not follow the Procedure section of that document during the migration.
Attach the legacy Elasticsearch indices to the new read aliases
Traces produced before the cutover live in the index family that the legacy Jaeger instance wrote. Attaching those indices to the read aliases of the new index family makes them queryable in the new Jaeger UI, so the legacy Jaeger no longer has to be kept alive to answer historical queries. Nothing is copied, renamed, or reindexed, and the legacy indices stay read-only.
Perform this step before repointing the mesh, so that the new Jaeger UI is already complete when it starts receiving spans.
Follow Attach the legacy indices to the new read aliases in the Alauda Distributed Tracing migration guide, with these two values:
-
LEGACY_ES_INDEX_PREFIX— the--jaeger-es-index-prefixvalue used when the legacy Jaeger was installed (for exampleistio-tracing-<cluster>). Read it back from the legacy instance rather than relying on memory: -
JAEGER_ES_INDEX_PREFIX— the prefix chosen for the new Jaeger v2 instance in Configuring distributed tracing platform with Service Mesh.
Both Jaeger instances must use the same Elasticsearch cluster, which is the case when the new instance was installed against the endpoint of the legacy one.
In a multi-cluster mesh both the legacy and the new prefix are shared by every cluster, so there is one legacy index family and one set of read aliases for the whole mesh. Attach the indices once, not once per cluster.
Repoint the Istio extension provider at the new OpenTelemetry Collector
Patch the Istio resource so that the otel extension provider targets the new v2 OpenTelemetry Collector in the jaeger-system namespace instead of the deleted legacy Collector in istio-system:
This command uses a JSON merge patch, which replaces the entire meshConfig.extensionProviders array. If the Istio resource defines other extension providers, edit the resource interactively with kubectl edit istio default or use a JSON Patch (--type=json) that appends to /spec/values/meshConfig/extensionProviders/- so they are preserved.
Once the patch is applied and the Istio control plane reconciles, sidecars send spans to the new OpenTelemetry Collector and new traces appear in the Jaeger v2 UI. The Telemetry resource does not need to be changed because it already references the provider by name (otel).
Uninstall the legacy Jaeger instance and Operator
The legacy Jaeger no longer has to outlive the retention window: with the indices attached to the read aliases, pre-cutover traces are served by the new Jaeger UI. Keep the legacy instance only for as long as you want a rollback target, then remove it. See Trace data continuity strategy for the data-continuity model.
The jaeger-es-index-cleaner CronJob is owned by the Jaeger resource and is garbage-collected together with it, after which nothing would expire the legacy indices. Complete Take over retention of the legacy indices first.
Deleting the Jaeger resource does not delete its Elasticsearch indices, so pre-cutover traces stay queryable in the new Jaeger UI afterwards.
-
Delete the legacy
Jaegerinstance and its supporting resources in theistio-systemnamespace. The resource names below match the defaults produced byinstall-jaeger.shwith--target-namespace='istio-system'; adjust them if you used a different--jaeger-instance-nameduring the original installation. -
Uninstall the
Alauda build of JaegerOperator from the Administrator view in the web console.- From Marketplace → OperatorHub → use the search box to search for
Alauda build of Jaeger. - Click on the Alauda build of Jaeger title to enter its details.
- On the Alauda build of Jaeger details page, click the Uninstall button in the upper right corner.
- In the Uninstall "jaeger-operator"? window, click Uninstall.
- From Marketplace → OperatorHub → use the search box to search for
Once the legacy indices have expired under the policy applied above, remove the leftover index templates and the delete-only policy as described in Disable the legacy feature switch and retire the legacy index family in the Alauda Distributed Tracing migration guide. The acp-tracing-ui feature switch mentioned there belongs to the platform tracing stack and does not apply to a Service Mesh deployment.