Jaeger Operator for Kubernetes simplifies deploying and running Jaeger on Kubernetes.
Go to file
domain 87d8ae049d
Update README.md (#2888)
Signed-off-by: domain <32405309+szu17dmy@users.noreply.github.com>
2025-05-06 10:45:50 +02:00
.ci Prepare release 1.65.0 (#2797) 2025-01-23 11:49:46 -06:00
.github build(deps): Bump docker/setup-buildx-action from 3.9.0 to 3.10.0 (#2838) 2025-03-03 10:52:46 +01:00
apis/v1 refactor: move webhook interface validation to test file (#2795) 2025-01-25 22:03:31 -06:00
bundle Prepare release 1.65.0 (#2797) 2025-01-23 11:49:46 -06:00
cmd Migrate to operator-sdk 1.13 (#1623) 2021-11-17 00:52:59 -06:00
config Prepare release 1.65.0 (#2797) 2025-01-23 11:49:46 -06:00
controllers feat: added missing test for elasticsearch reconciler (#2662) 2024-09-19 09:08:53 +02:00
docs TRACING-4238 | Fix gatewat 502 timeout (#2694) 2024-10-02 17:33:03 +02:00
examples Prepare release 1.65.0 (#2797) 2025-01-23 11:49:46 -06:00
hack Bump go to 1.22 and controller-gen to 1.14 (#2646) 2024-08-09 11:07:34 +02:00
pkg Remove reporter (agent) flags from all in one (#2829) 2025-02-20 12:08:43 +01:00
scripts Regenerate ES certificated when is close to 1 day for expire (#2356) 2023-11-10 16:24:24 -06:00
tests build(deps): Bump golang from `3f74443` to `c5adecd` in /tests (#2845) 2025-03-05 10:13:29 +01:00
.codecov.yml Use golangci-lint for linting (#2034) 2022-08-18 16:11:31 +00:00
.dockerignore Migrate to operator-sdk 1.13 (#1623) 2021-11-17 00:52:59 -06:00
.gitignore Fix script to run all the E2E tests (#1893) 2022-05-30 14:04:52 -05:00
.golangci.yml Bump go to 1.22 and controller-gen to 1.14 (#2646) 2024-08-09 11:07:34 +02:00
CHANGELOG.md Prepare release 1.65.0 (#2797) 2025-01-23 11:49:46 -06:00
COMPATIBILITY.md Added compatibility information about Jaeger Operator v1.61.x and v1.62.x (#2725) 2024-11-07 10:18:03 +01:00
CONTRIBUTING.md Document that the openshift CI can fail on release PR (#2366) 2023-11-24 17:22:17 +01:00
CONTRIBUTING_GUIDELINES.md Bring jaeger operator repo inline with contributing guidelines in mai… (#664) 2019-09-19 10:36:34 +01:00
DCO Bring jaeger operator repo inline with contributing guidelines in mai… (#664) 2019-09-19 10:36:34 +01:00
Dockerfile Pin agent version to 1.62.0 (#2790) 2025-01-21 23:41:50 -06:00
Dockerfile.asserts Bump curlimages/curl from `3dfa70a` to `94e9e44` (#2825) 2025-02-17 11:50:21 +01:00
LICENSE Initial working version 2018-08-31 13:06:42 +02:00
Makefile Pin agent version to 1.62.0 (#2790) 2025-01-21 23:41:50 -06:00
PROJECT Use Elasticsearch provisioning from OpenShift Elasticsearch operator (#1708) 2022-02-01 17:48:28 -06:00
README.md Update README.md (#2888) 2025-05-06 10:45:50 +02:00
RELEASE.md Preparing release v1.62.0 (#2708) 2024-10-09 08:08:07 -06:00
bundle.Dockerfile Add minimum Kubernetes and OpenShift versions (#2492) 2024-03-06 12:47:22 +00:00
go.mod build(deps): Bump the opentelemetry group with 9 updates (#2846) 2025-03-06 10:08:53 +01:00
go.sum build(deps): Bump the opentelemetry group with 9 updates (#2846) 2025-03-06 10:08:53 +01:00
kind-1.19.yaml Upgrade KiND, KiND images and add Kubernetes 1.26 (#2161) 2023-01-24 09:35:54 +00:00
kind-1.20.yaml Upgrade KiND, KiND images and add Kubernetes 1.26 (#2161) 2023-01-24 09:35:54 +00:00
kind-1.21.yaml Add support for Kubernetes 1.27 (#2235) 2023-07-04 11:43:16 -06:00
kind-1.22.yaml Add support for Kubernetes 1.27 (#2235) 2023-07-04 11:43:16 -06:00
kind-1.23.yaml Add support for Kubernetes 1.27 (#2235) 2023-07-04 11:43:16 -06:00
kind-1.24.yaml Add support for Kubernetes 1.27 (#2235) 2023-07-04 11:43:16 -06:00
kind-1.25.yaml Add support for Kubernetes 1.27 (#2235) 2023-07-04 11:43:16 -06:00
kind-1.26.yaml Add support for Kubernetes 1.27 (#2235) 2023-07-04 11:43:16 -06:00
kind-1.27.yaml Add support for Kubernetes 1.27 (#2235) 2023-07-04 11:43:16 -06:00
kind-1.28.yaml Run e2e tests on Kubernetes 1.28.0 (#2315) 2023-09-04 13:20:43 +02:00
kind-1.30.yaml Test on k8s 1.30 (#2647) 2024-08-09 11:10:11 +02:00
main.go Update the Jaeger Operator version at build time 2018-09-03 15:15:34 +02:00
versions.txt Prepare release 1.65.0 (#2797) 2025-01-23 11:49:46 -06:00

README.md

Build Status Go Report Card Code Coverage GoDoc OpenSSF Scorecard

Jaeger Operator for Kubernetes

The Jaeger Operator is an implementation of a Kubernetes Operator.

Getting started

Firstly, ensure an ingress-controller is deployed. When using minikube, you can use the ingress add-on: minikube start --addons=ingress

Then follow the Jaeger Operator installation instructions.

Once the jaeger-operator deployment in the namespace observability is ready, create a Jaeger instance, like:

kubectl apply -n observability -f - <<EOF
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
  name: simplest
EOF

This will create a Jaeger instance named simplest. The Jaeger UI is served via the Ingress, like:

$ kubectl get -n observability ingress
NAME             HOSTS     ADDRESS          PORTS     AGE
simplest-query   *         192.168.122.34   80        3m

In this example, the Jaeger UI is available at http://192.168.122.34.

The official documentation for the Jaeger Operator, including all its customization options, are available under the main Jaeger Documentation.

CRD-API documentation can be found here.

Compatibility matrix

See the compatibility matrix here.

Jaeger Operator vs. Jaeger

The Jaeger Operator follows the same versioning as the operand (Jaeger) up to the minor part of the version. For example, the Jaeger Operator v1.22.2 tracks Jaeger 1.22.0. The patch part of the version indicates the patch level of the operator itself, not that of Jaeger. Whenever a new patch version is released for Jaeger, we'll release a new patch version of the operator.

Jaeger Operator vs. Kubernetes

We strive to be compatible with the widest range of Kubernetes versions as possible, but some changes to Kubernetes itself require us to break compatibility with older Kubernetes versions, be it because of code imcompatibilities, or in the name of maintainability.

Our promise is that we'll follow what's common practice in the Kubernetes world and support N-2 versions, based on the release date of the Jaeger Operator.

For instance, when we released v1.22.0, the latest Kubernetes version was v1.20.5. As such, the minimum version of Kubernetes we support for Jaeger Operator v1.22.0 is v1.18 and we tested it with up to 1.20.

The Jaeger Operator might work on versions outside of the given range, but when opening new issues, please make sure to test your scenario on a supported version.

Jaeger Operator vs. Strimzi Operator

We maintain compatibility with a set of tested Strimzi operator versions, but some changes in Strimzi operator require us to break compatibility with older versions.

The jaeger Operator might work on other untested versions of Strimzi Operator, but when opening new issues, please make sure to test your scenario on a supported version.

(experimental) Generate Kubernetes manifest file

Sometimes it is preferable to generate plain manifests files instead of running an operator in a cluster. jaeger-operator generate generates kubernetes manifests from a given CR. In this example we apply the manifest generated by examples/simplest.yaml to the namespace jaeger-test:

curl https://raw.githubusercontent.com/jaegertracing/jaeger-operator/main/examples/simplest.yaml | docker run -i --rm jaegertracing/jaeger-operator:main generate | kubectl apply -n jaeger-test -f -

It is recommended to deploy the operator instead of generating a static manifest.

Jaeger V2 Operator

As the Jaeger V2 is released, it is decided that Jaeger V2 will deployed on Kubernetes using OpenTelemetry Operator. This will benefit both the users of Jaeger and OpenTelemetry. To use Jaeger V2 with OpenTelemetry Operator, the steps are as follows:

  • Install the cert-manager in the existing cluster with the command:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.yaml

Please verify all the resources (e.g., Pods and Deployments) are in a ready state in the cert-manager namespace.

  • Install the OpenTelemetry Operator by running:
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml

Please verify all the resources (e.g., Pods and Deployments) are in a ready state in the opentelemetry-operator-system namespace.

Using Jaeger with in-memory storage

Once all the resources are ready, create a Jaeger instance as follows:

kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
  name: jaeger-inmemory-instance
spec:
  image: jaegertracing/jaeger:latest
  ports:
  - name: jaeger
    port: 16686
  config:
    service:
      extensions: [jaeger_storage, jaeger_query]
      pipelines:
        traces:
          receivers: [otlp]    
          exporters: [jaeger_storage_exporter]
    extensions:
      jaeger_query:
        storage:
          traces: memstore
      jaeger_storage:
        backends:
          memstore:
            memory:
              max_traces: 100000
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
    exporters:
      jaeger_storage_exporter:
        trace_storage: memstore
EOF

To use the in-memory storage ui for Jaeger V2, expose the pod, deployment or the service as follows:

kubectl port-forward deployment/jaeger-inmemory-instance-collector 8080:16686

Or

kubectl port-forward service/jaeger-inmemory-instance-collector 8080:16686

Once done, type localhost:8080 in the browser to interact with the UI.

[Note] There's an ongoing development in OpenTelemetry Operator where users will be able to interact directly with the UI.

Using Jaeger with database to store traces

To use Jaeger V2 with the supported database, it is mandatory to create database deployments and they should be in ready state (ref).

Create a Kubernetes Service that exposes the database pods enabling communication between the database and Jaeger pods.

This can be achieved by creating a service in two ways, first by creating it manually or second by creating it using imperative command.

kubectl expose pods <pod-name> --port=<port-number> --name=<name-of-the-service>

Or

kubectl expose deployment <deployment-name> --port=<port-number> --name=<name-of-the-service>

After the service is created, add the name of the service as an endpoint in their respective config as follows:

jaeger_storage:
  backends:
    some_storage:
      cassandra:
        connection:
          servers: [<name-of-the-service>]
jaeger_storage:
  backends:
    some_storage:
      elasticseacrh:
        servers: [<name-of-the-service>]

Use the modified config to create Jaeger instance with the help of OpenTelemetry Operator.

kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
  name: jaeger-storage-instance # name of your choice
spec:
  image: jaegertracing/jaeger:latest
  ports:
  - name: jaeger
    port: 16686
  config:
    # modified config
EOF

Contributing and Developing

Please see CONTRIBUTING.md.

License

Apache 2.0 License.