⚠️ Experimental: This chart is under active development with no stability guarantees. Breaking changes may occur in minor versions.
Jaeger is a distributed tracing system. This chart deploys Jaeger v2 using a unified "All-In-One" architecture built on the OpenTelemetry Collector framework.
This release is a refactor designed to simplify operation and configuration.
- Unified Architecture: All functionality (Collector, Query, Ingester) is now provided by a single "All-in-One" deployment.
- Configuration: Storage is configured via the
config.extensions.jaeger_storagesection using native Jaeger/OTEL config syntax. - Cassandra Schema: Jaeger v2 handles schema creation internally. The legacy schema job has been removed.
- Service Consolidation: A single Service now exposes all ports (agent, collector, query).
- No provisioned storage: Dependency charts have been removed. The user must deploy them separately and configure connection using the Otel config Syntax https://github.com/jaegertracing/jaeger/blob/main/cmd/jaeger/config.yaml
This chart uses the All-In-One deployment model.
- Single Binary: Runs as a
Deploymentscalable to multiple replicas. - Stateless: Can connect to external persistent storage (Elasticsearch, Cassandra) for production use.
- Default: Memory storage (ephemeral), suitable for testing.
- Scalable: Increase replica count to scale horizontally
You can customize the Jaeger image and tag using the following values:
jaeger:
image:
repository: jaegertracing/jaeger
tag: "2.2.0" # Override the default versionOr globally:
tag: "2.2.0" # Applies to all componentsAdd the Jaeger Tracing Helm repository:
helm repo add jaegertracing https://jaegertracing.github.io/helm-chartsTo install a release named jaeger:
helm install jaeger jaegertracing/jaegerThere are several examples of how to configure you can reference at:
https://github.com/jaegertracing/jaeger/tree/main/cmd/jaeger
Ideal for testing. No persistence.
helm install jaeger jaegertracing/jaegerThis chart does not provision an ElasticSearch instance.
To use ElasticSearch storage, you must provide your own ElasticSearch instance and configure Jaeger via the native config syntax:
values.yaml
userconfig:
extensions:
jaeger_query:
storage:
traces: primary_store_elasticsearch
traces_archive: archive_store_elasticsearch
jaeger_storage:
backends:
primary_store_elasticsearch:
elasticsearch:
server_urls: ["http://my-elasticsearch-master:9200"]
auth:
basic:
username: elastic
password: changeme
archive_store_elasticsearch:
elasticsearch:
server_urls: ["http://my-elasticsearch-master:9200"]
auth:
basic:
username: elastic
password: changeme
exporters:
jaeger_storage_exporter:
trace_storage: primary_store_elasticsearchRunning Maintenance Jobs:
To run Index Cleaner or Rollover jobs, enable them.
They require configuration by adjusting storage.elasticsearch values. See that section in values.yaml for more details.
esIndexCleaner:
enabled: true
storage:
elasticsearch:
tls:
enabled: false
url: http://elasticsearch-master:9200
# user: elastic
# password: changeme- es-rollover requires elasticsearch to be running BEFORE install so the hook job can run.
This chart does not provision a Cassandra cluster.
To use Cassandra storage, you must provide your own Cassandra instance and configure Jaeger via the native config syntax:
values.yaml Example:
storage:
type: cassandra
config:
extensions:
jaeger_storage:
backends:
primary_store:
cassandra:
connection:
servers:
- cassandra-host
port: 9042
schema:
keyspace: jaeger_v1_testNote: The legacy Cassandra schema job has been removed. Jaeger v2 handles schema creation internally.
To run the Spark dependencies job (for dependency links graph) set spark.enabled=true
Below is an example of how to set overrides. Please see the values.yaml for more examples:
The values are populated under storage.elasticsearch and storage.casandra Please see comments in values.yaml for more details.
You must choose the storage type with storage.type=elasticsearch or storage.type=cassandra
spark:
enabled: true
extraEnv:
- name: ES_NODES_WAN_ONLY
value: "true"For a full list of supported environment variables, see the Spark Dependencies README.
To access the ui you can either:
- enable the ingress and fill at least one host
- provide your own ingress
- or port forward
kubectl port-forward --namespace {{ .Release.Namespace }} $POD_NAME 16686:16686 --address 0.0.0.0and access at http://localhost:16686/
jaeger:
ingress:
enabled: true
hosts:
- <fill a host here>You can customize the UI by setting uiconfig. Please see the values.yaml for examples or https://github.com/jaegertracing/jaeger/tree/main/cmd/jaeger
The Jaeger v2 configuration is defined in config using OpenTelemetry Collector syntax. You can override pipelines, receivers, and processors there.
config:
service:
pipelines:
traces:
receivers: [otlp, jaeger, zipkin]
processors: [batch]
exporters: [jaeger_storage_exporter]The unified Service exposes the following ports:
- Query UI: 16686, 16685 (gRPC)
- OTLP: 4317 (gRPC), 4318 (HTTP)
- Jaeger: 14250 (gRPC), 14268 (HTTP), 6831/6832 (UDP)
- Zipkin: 9411
- Prometheus: 8888 (HTTP), 8889 (HTTP)
- Additional ports may be added via jaeger.service.extraPorts override.