Jaeger Helm Chart: Simplifying Deployment

David vonThenen
JaegerTracing
Published in
4 min readNov 27, 2017

In case you missed it, the Helm Chart for Jaeger was introduced early last month and development of the chart is continuing on. With the latest PR, the Jaeger chart now supports an option for deploying an ElasticSearch backend instead of using Cassandra (default). Additionally, if there is an existing Cassandra or Elasticsearch cluster already deployed in your Kubernetes environment, the chart also supports connecting to it. This blog post will serve as a small primer to help you configure Helm so the Jaeger chart can be deployed and also to cover each of the different deployment methods for the chart.

Helm Configuration

If you haven’t used Helm before, I would highly recommend visiting the documentation for installation instructions and getting started. Since the Jaeger chart is fairly new, you can find the source in the incubator folder. All new charts start out in the incubator folder until they have enough flight time after which they get promoted into the stable folder. Since the incubator folder is not enabled on Helm by default, you need to add the incubator charts which can be done by running the following command:

helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/

Now the charts from the incubator repo can be deployed using Helm! The following several sections will discuss the various deployment options for the Jaeger chart. Let’s start with the most straightforward option first.

Deploying Jaeger with a New Cassandra Cluster

Helm is great at deploying applications in an easy to consume manner and this is equally true for the Jaeger chart. Running a simple Helm command will deploy and configure everything that is required for Jaeger to run, including creating data related services such as a Cassandra cluster. This configuration happens to be the default when running the standard Helm install command:

helm install incubator/jaeger

One thing to note is that by default Cassandra will be deployed using temporary storage meaning that once the instance is deleted or destroyed, the data will be deleted along with it. This is great for kicking the tires or for demos, but not so good for running a production-like deployment. To deploy Jaeger in a stateful manner with storage persistence, visit the Cassandra chart documentation for more details.

Deploying Jaeger with a New Elasticsearch Cluster

If your organization has more expertise or preference to using Elasticsearch instead of Cassandra, the Jaeger chart supports that configuration as well and can be deployed by running the following command:

helm install incubator/jaeger \
--set tags.cassandra=false \
--set tags.elasticsearch=true \
--set elasticsearch.data.persistence.enabled=false \
--set elasticsearch.master.persistence.enabled=false

The Elasticsearch template by default uses persistent storage for a couple of components in the chart. For demo purposes, we can override the default behavior and use temporary storage by setting the persistence.enabled=false on both those components. To use persistent storage for a production like deployment of Jaeger, visit the Elasticsearch chart documentation for more details.

Deploying Jaeger using an Existing Cassandra Cluster

If your organization already has a running instance of Cassandra, you can opt out of deploying a new Cassandra cluster and Jaeger can connect to your existing instance. You can run that configuration by executing the following command:

helm install incubator/jaeger \
--set tags.cassandra=false \
--set tags.elasticsearch=false \
--set cassandra.config.host=<Cassandra hostname>

Replace your Cassandra hostname and run the install command. If you want to test drive this functionality, there is a simple YAML file that you can run a kubectl install -f cassandra.yml that will deploy a Cassandra instance where the hostname can be set to cassandra.

Deploying Jaeger using an Existing Elasticsearch Cluster

Same goes for using an existing Elasticsearch instance. That can be done by running the following command:

helm install incubator/jaeger \
--set tags.cassandra=false \
--set tags.elasticsearch=false \
--set elasticsearch.config.host=<elasticsearch URI>

Modify the placeholder and replace with your fully qualified URI (example: http://elasticsearch:9200). If you want to test drive this functionality, there is a simple YAML file that you can run a kubectl install -f elasticsearch.yml that will deploy an Elasticsearch instance and use http://elasticsearch:9200 for the URI.

What’s Next?

The work on the Jaeger chart is moving forward and there are some more features currently being working on: sidecar deployment support and configuration via ConfigMaps. Both of these features should align the chart with Jaeger best practices and at the same time, make Jaeger easier to manage and configure. Let us know what you think so far and stop by the Jaeger Gitter channel and drop us a line!

--

--

David vonThenen
JaegerTracing

Open Source Engineer w/ @thecodeteam. Working on my next Jameson neat, lifting weights, @ApacheMesos and deploying the @docker. I’d like to buy 3 @kubernetesio.