Back to Charts

DEPRECATED Jaeger

incubator/jaeger/README.md

latest23.7 KB
Original Source

DEPRECATED Jaeger

This chart has been deprecated and moved to its new home:

To add the repo:

$ helm repo add jaegertracing https://jaegertracing.github.io/helm-charts

Jaeger is a distributed tracing system.

Introduction

This chart adds all components required to run Jaeger as described in the jaeger-kubernetes GitHub page for a production-like deployment. The chart default will deploy a new Cassandra cluster (using the cassandra chart), but also supports using an existing Cassandra cluster, deploying a new ElasticSearch cluster (using the elasticsearch chart), or connecting to an existing ElasticSearch cluster. Once the back storage available, the chart will deploy jaeger-agent as a DaemonSet and deploy the jaeger-collector and jaeger-query components as standard individual deployments.

Prerequisites

  • Has been tested on Kubernetes 1.7+

  • The Cassandra chart calls out the following requirements (default) for a test environment (please see the important note in the installation section):

resources:
  requests:
    memory: 4Gi
    cpu: 2
  limits:
    memory: 4Gi
    cpu: 2
  • The Cassandra chart calls out the following requirements for a production environment:
resources:
  requests:
    memory: 8Gi
    cpu: 2
  limits:
    memory: 8Gi
    cpu: 2
  • The ElasticSearch chart calls out the following requirements for a production environment:
client:
  ...
  resources:
    limits:
      cpu: "1"
      # memory: "1024Mi"
    requests:
      cpu: "25m"
      memory: "512Mi"

master:
  ...
  resources:
    limits:
      cpu: "1"
      # memory: "1024Mi"
    requests:
      cpu: "25m"
      memory: "512Mi"

data:
  ...
  resources:
    limits:
      cpu: "1"
      # memory: "2048Mi"
    requests:
      cpu: "25m"
      memory: "1536Mi"

Installing the Chart

To install the chart with the release name myrel, run the following command:

bash
$ helm install incubator/jaeger --name myrel

After a few minutes, you should see a 3 node Cassandra instance, a Jaeger DaemonSet, a Jaeger Collector, and a Jaeger Query (UI) pod deployed into your Kubernetes cluster.

IMPORTANT NOTE: For testing purposes, the footprint for Cassandra can be reduced significantly in the event resources become constrained (such as running on your local laptop or in a Vagrant environment). You can override the resources required run running this command:

bash
helm install incubator/jaeger --name myrel --set cassandra.config.max_heap_size=1024M --set cassandra.config.heap_new_size=256M --set cassandra.resources.requests.memory=2048Mi --set cassandra.resources.requests.cpu=0.4 --set cassandra.resources.limits.memory=2048Mi --set cassandra.resources.limits.cpu=0.4

Tip: List all releases using helm list

Installing the Chart using an Existing Cassandra Cluster

If you already have an existing running Cassandra cluster, you can configure the chart as follows to use it as your backing store (make sure you replace <HOST>, <PORT>, etc with your values):

bash
helm install incubator/jaeger --name myrel --set provisionDataStore.cassandra=false --set storage.cassandra.host=<HOST> --set storage.cassandra.port=<PORT> --set storage.cassandra.user=<USER> --set storage.cassandra.password=<PASSWORD>

Tip: It is highly encouraged to run the Cassandra cluster with storage persistence.

Installing the Chart using an Existing Cassandra Cluster with TLS

If you already have an existing running Cassandra cluster with TLS, you can configure the chart as follows to use it as your backing store:

Content of the values.yaml file:

YAML
storage:
  type: cassandra
  cassandra:
    host: <HOST>
    port: <PORT>
    user: <USER>
    password: <PASSWORD>
    tls:
      enabled: true
      secretName: cassandra-tls-secret

provisionDataStore:
  cassandra: false

Content of the jaeger-tls-cassandra-secret.yaml file:

YAML
apiVersion: v1
kind: Secret
metadata:
  name: cassandra-tls-secret
data:
  commonName: <SERVER NAME>
  ca-cert.pem: |
    -----BEGIN CERTIFICATE-----
    <CERT>
    -----END CERTIFICATE-----
  client-cert.pem: |
    -----BEGIN CERTIFICATE-----
    <CERT>
    -----END CERTIFICATE-----
  client-key.pem: |
    -----BEGIN RSA PRIVATE KEY-----
    -----END RSA PRIVATE KEY-----
  cqlshrc: |
    [ssl]
    certfile = ~/.cassandra/ca-cert.pem
    userkey = ~/.cassandra/client-key.pem
    usercert = ~/.cassandra/client-cert.pem

bash
kubectl apply -f jaeger-tls-cassandra-secret.yaml
helm install incubator/jaeger --name myrel --values values.yaml

Installing the Chart using a New ElasticSearch Cluster

To install the chart with the release name myrel using a new ElasticSearch cluster instead of Cassandra (default), run the following command:

bash
$ helm install incubator/jaeger --name myrel --set provisionDataStore.cassandra=false  --set provisionDataStore.elasticsearch=true --set storage.type=elasticsearch

After a few minutes, you should see 2 ElasticSearch client nodes, 2 ElasticSearch data nodes, 3 ElasticSearch master nodes, a Jaeger DaemonSet, a Jaeger Collector, and a Jaeger Query (UI) pod deployed into your Kubernetes cluster.

Tip: If the ElasticSearch client nodes do not enter the running state, try --set elasticsearch.rbac.create=true

Installing the Chart using an Existing ElasticSearch Cluster

If you already have an existing running ElasticSearch cluster, you can configure the chart as follows to use it as your backing store:

bash
helm install incubator/jaeger --name myrel --set provisionDataStore.cassandra=false --set provisionDataStore.elasticsearch=false --set storage.type=elasticsearch --set storage.elasticsearch.host=<HOST> --set storage.elasticsearch.port=<PORT> --set storage.elasticsearch.user=<USER> --set storage.elasticsearch.password=<password>

Tip: It is highly encouraged to run the ElasticSearch cluster with storage persistence.

Installing the Chart using an Existing ElasticSearch Cluster with TLS

If you already have an existing running ElasticSearch cluster with TLS, you can configure the chart as follows to use it as your backing store:

Content of the jaeger-values.yaml file:

YAML
storage:
  type: elasticsearch
  elasticsearch:
    host: <HOST>
    port: <PORT>
    scheme: https
    user: <USER>
    password: <PASSWORD>
provisionDataStore:
  cassandra: false
  elasticsearch: false
query:
  cmdlineParams:
    es.tls.ca: "/tls/es.pem"
  extraConfigmapMounts:
    - name: jaeger-tls
      mountPath: /tls
      subPath: ""
      configMap: jaeger-tls
      readOnly: true
collector:
  cmdlineParams:
    es.tls.ca: "/tls/es.pem"
  extraConfigmapMounts:
    - name: jaeger-tls
      mountPath: /tls
      subPath: ""
      configMap: jaeger-tls
      readOnly: true

Content of the jaeger-tls-cfgmap.yaml file:

YAML
apiVersion: v1
kind: ConfigMap
metadata:
  name: jaeger-tls
data:
  es.pem: |
    -----BEGIN CERTIFICATE-----
    <CERT>
    -----END CERTIFICATE-----
bash
kubectl apply -f jaeger-tls-cfgmap.yaml
helm install incubator/jaeger --name myrel --values jaeger-values.yaml

Uninstalling the Chart

To uninstall/delete the myrel deployment:

bash
$ helm delete myrel

The command removes all the Kubernetes components associated with the chart and deletes the release.

Tip: To completely remove the release, run helm delete --purge myrel

Configuration

The following table lists the configurable parameters of the Jaeger chart and their default values.

ParameterDescriptionDefault
agent.annotationsAnnotations for Agentnil
agent.cmdlineParamsAdditional command line parametersnil
agent.dnsPolicyConfigure DNS policy for agentsClusterFirst
agent.service.annotationsAnnotations for Agent SVCnil
agent.service.binaryPortjaeger.thrift over binary thrift6832
agent.service.compactPortjaeger.thrift over compact thrift6831
agent.imageImage for Jaeger Agentjaegertracing/jaeger-agent
agent.podAnnotationsAnnotations for Agent podnil
agent.pullPolicyAgent image pullPolicyIfNotPresent
agent.service.loadBalancerSourceRangeslist of IP CIDRs allowed access to load balancer (if supported)[]
agent.service.annotationsAnnotations for Agent SVCnil
agent.service.binaryPortjaeger.thrift over binary thrift6832
agent.service.compactPortjaeger.thrift over compact thrift6831
agent.service.zipkinThriftPortzipkin.thrift over compact thrift5775
agent.useHostNetworkEnable hostNetwork for agentsfalse
agent.tolerationsNode Tolerations[]
collector.autoscaling.enabledEnable horizontal pod autoscalingfalse
collector.autoscaling.minReplicasMinimum replicas2
collector.autoscaling.maxReplicasMaximum replicas10
collector.autoscaling.targetCPUUtilizationPercentageTarget CPU utilization80
collector.autoscaling.targetMemoryUtilizationPercentageTarget memory utilizationnil
collector.cmdlineParamsAdditional command line parametersnil
collector.podAnnotationsAnnotations for Collector podnil
collector.service.httpPortClient port for HTTP thrift14268
collector.service.annotationsAnnotations for Collector SVCnil
collector.imageImage for jaeger collectorjaegertracing/jaeger-collector
collector.pullPolicyCollector image pullPolicyIfNotPresent
collector.tolerationsNode Tolerations[]
collector.service.annotationsAnnotations for Collector SVCnil
collector.service.httpPortClient port for HTTP thrift14268
collector.service.loadBalancerSourceRangeslist of IP CIDRs allowed access to load balancer (if supported)[]
collector.service.tchannelPortJaeger Agent port for thrift14267
collector.service.typeService typeClusterIP
collector.service.zipkinPortZipkin port for JSON/thrift HTTP9411
collector.extraConfigmapMountsAdditional collector configMap mounts[]
collector.samplingConfigSampling strategies json filenil
elasticsearch.rbac.createTo enable RBACfalse
fullnameOverrideOverride full namenil
hotrod.enabledEnables the Hotrod demo appfalse
hotrod.service.loadBalancerSourceRangeslist of IP CIDRs allowed access to load balancer (if supported)[]
nameOverrideOverride namenil
provisionDataStore.cassandraProvision Cassandra Data Storetrue
provisionDataStore.elasticsearchProvision Elasticsearch Data Storefalse
query.agentSidecar.enabledEnable agent sidecare for query deploymenttrue
query.service.annotationsAnnotations for Query SVCnil
query.cmdlineParamsAdditional command line parametersnil
query.imageImage for Jaeger Query UIjaegertracing/jaeger-query
query.ingress.enabledAllow external traffic accessfalse
query.ingress.annotationsConfigure annotations for Ingress{}
query.ingress.hostsConfigure host for Ingressnil
query.ingress.tlsConfigure tls for Ingressnil
query.podAnnotationsAnnotations for Query podnil
query.pullPolicyQuery UI image pullPolicyIfNotPresent
query.tolerationsNode Tolerations[]
query.service.loadBalancerSourceRangeslist of IP CIDRs allowed access to load balancer (if supported)[]
query.service.portExternal accessible port80
query.service.typeService typeClusterIP
query.basePathBase path of Query UI, used for ingress as well (if it is enabled)/
query.extraConfigmapMountsAdditional query configMap mounts[]
schema.annotationsAnnotations for the schema jobnil
schema.extraConfigmapMountsAdditional cassandra schema job configMap mounts[]
schema.imageImage to setup cassandra schemajaegertracing/jaeger-cassandra-schema
schema.modeSchema mode (prod or test)prod
schema.pullPolicySchema image pullPolicyIfNotPresent
schema.activeDeadlineSecondsDeadline in seconds for cassandra schema creation job to complete120
schema.traceTtlTime to live for trace data in secondsnil
schema.keyspaceSet explicit keyspace namenil
schema.dependenciesTtlTime to live for dependencies data in secondsnil
serviceAccounts.agent.createCreate service accounttrue
serviceAccounts.agent.nameThe name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template``
serviceAccounts.cassandraSchema.createCreate service accounttrue
serviceAccounts.cassandraSchema.nameThe name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template``
serviceAccounts.collector.createCreate service accounttrue
serviceAccounts.collector.nameThe name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template``
serviceAccounts.hotrod.createCreate service accounttrue
serviceAccounts.hotrod.nameThe name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template``
serviceAccounts.query.createCreate service accounttrue
serviceAccounts.query.nameThe name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template``
serviceAccounts.spark.createCreate service accounttrue
serviceAccounts.spark.nameThe name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template``
spark.enabledEnables the dependencies jobfalse
spark.imageImage for the dependencies jobjaegertracing/spark-dependencies
spark.pullPolicyImage pull policy of the deps imageAlways
spark.scheduleSchedule of the cron job"49 23 * * *"
spark.successfulJobsHistoryLimitCron job successfulJobsHistoryLimit5
spark.failedJobsHistoryLimitCron job failedJobsHistoryLimit5
spark.tagTag of the dependencies job imagelatest
spark.tolerationsNode Tolerations[]
storage.cassandra.existingSecretName of existing password secret object (for password authentication)nil
storage.cassandra.hostProvisioned cassandra hostcassandra
storage.cassandra.passwordProvisioned cassandra password (ignored if storage.cassandra.existingSecret set)password
storage.cassandra.portProvisioned cassandra port9042
storage.cassandra.tls.enabledProvisioned cassandra TLS connection enabledfalse
storage.cassandra.tls.secretNameProvisioned cassandra TLS connection existing secret name (possible keys in secret: ca-cert.pem, client-key.pem, client-cert.pem, cqlshrc, commonName)``
storage.cassandra.usePasswordUse passwordtrue
storage.cassandra.userProvisioned cassandra usernameuser
storage.elasticsearch.existingSecretName of existing password secret object (for password authentication)nil
storage.elasticsearch.hostProvisioned elasticsearch hostelasticsearch
storage.elasticsearch.passwordProvisioned elasticsearch password (ignored if storage.elasticsearch.existingSecret set)changeme
storage.elasticsearch.portProvisioned elasticsearch port9200
storage.elasticsearch.schemeProvisioned elasticsearch schemehttp
storage.elasticsearch.usePasswordUse passwordtrue
storage.elasticsearch.userProvisioned elasticsearch userelastic
storage.elasticsearch.nodesWanOnlyOnly access specified es hostfalse
storage.typeStorage type (ES or Cassandra)cassandra
tagImage tag/version1.15.1

For more information about some of the tunable parameters that Cassandra provides, please visit the helm chart for cassandra and the official website at apache.org.

For more information about some of the tunable parameters that Jaeger provides, please visit the official Jaeger repo at GitHub.com.

Specify each parameter using the --set key=value[,key=value] argument to helm install. For example,

bash
$ helm install --name myrel \
    --set cassandra.config.rack_name=rack2 \
    incubator/jaeger

Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart.

Storage persistence

Jaeger itself is a stateful application that by default uses Cassandra to store all related data. That means this helm chart has a dependency on the Cassandra helm chart for its data persistence. To deploy Jaeger with storage persistence, please take a look at the README.md for configuration details.

Override any required configuration options in the Cassandra chart that is required and then enable persistence by setting the following option: --set cassandra.persistence.enabled=true

Pending enhancements

  • Sidecar deployment support