anchor.diff:  Memory storage is only appropriate for development, testing, demonstrations, and proof of concept environments as the data does not persist if the pod is shut down. For production environments Jaeger supports Elasticsearch for persistent storage.
   |`memory`
   
  -|===
  -
  -
  -.Elasticsearch configuration parameters
  -[options="header"]
  -[cols="l, a, a, a"]
  -|===
  -|Parameter |Description |Values |Default value
  -
  -4+|General Elasticsearch configuration settings
  -|elasticsearch:
  -  server-urls:
  -|URL of the Elasticsearch instance.
  -|The fully-qualified domain name of the Elasticsearch server.  If you have specified `spec:storage:type`= `elasticsearch` but have not specified a value for `server-urls` parameter, the Jaeger Operator will use the Elasticsearch Operator to create an Elasticsearch cluster using the configuration in the `spec:storage:elasticsearch` section of the custom resource file.
  -|`http://elasticsearch.<namespace>.svc:9200`
  -
  -|es:
  -  max-num-spans:
  -|The maximum number of spans to fetch at a time, per query, in Elasticsearch.
  -|
  -|10000
  -
  -|es:
  -  max-span-age:
  -|The maximum lookback for spans in Elasticsearch.
  -|
  -|72h0m0s
  -
  -|elasticsearch:
  +|storage:
     secretname:
   |Name of the secret, for example `jaeger-secret`.
   |
   |N/A
  -
  -|es:
  -  sniffer:
  -|The sniffer configuration for Elasticsearch.  The client uses the sniffing process to find all nodes automatically. Disabled by default.
  -|`true`/ `false`
  -|`false`
  -
  -|es:
  -  timeout:
  -|Timeout used for queries. When set to zero there is no  timeout.
  -|
  -|0s
  -
  -|es:
  -  username:
  -|The username required by Elasticsearch. The basic authentication also loads CA if it is specified.  See also `es.password`.
  -|
  -|
  -
  -|es:
  -  password:
  -|The password required by Elasticsearch.   See also, `es.username`.
  -|
  -|
  -
  -|es:
  -  version:
  -|The major Elasticsearch version. If not specified, the value will be auto-detected from Elasticsearch.
  -|
  -|0
  -
  -4+|Elasticsearch resource configuration settings
  +|===
  +
  +.Elasticsearch index cleaner parameters
  +[options="header"]
  +[cols="l, a, a, a"]
  +|===
  +|Parameter |Description |Values |Default value
  +|storage:
  +  esIndexCleaner:
  +    enabled:
  +|When using Elasticsearch storage, by default a job is created to clean old traces from the index.  This parameter enables or disables the index cleaner job.
  +|`true`/ `false`
  +|`true`
  +
  +|storage:
  +  esIndexCleaner:
  +    numberOfDays:
  +|Number of days to wait before deleting an index.
  +|Integer value
  +|`7`
  +
  +|storage:
  +  esIndexCleaner:
  +    schedule:
  +|Defines the schedule for how often to clean the Elasticsearch index.
  +|Cron expression
  +|"55 23 * * *"
  +|===
  +
  +[id="jaeger-config-auto-provisioning-es_{context}"]
  +== Auto-provisioning an Elasticsearch instance
  +
  +When the `storage:type` is set to `elasticsearch` but there is no value set for `spec:storage:options:es:server-urls`, the Jaeger Operator uses the Elasticsearch Operator to create an Elasticsearch cluster based on the configuration provided in the `storage` section of the custom resource file.
  +
  +.Restrictions
  +
  +* There can be only one Elasticsearch per namespace.
  +* You cannot share or reuse a {ProductName} logging Elasticsearch instance with Jaeger.  The Elasticsearch cluster is meant to be dedicated for a single Jaeger instance.
  +
  +[NOTE]
  +====
  +If you already have installed Elasticsearch as part of OpenShift logging, the Jaeger Operator can use the installed Elasticsearch Operator to provision storage.
  +====
  +
  +The following configuration parameters are for a _self-provisioned_ Elasticsearch instance, that is an instance created by the Jaeger Operator using the Elasticsearch Operator.  You specify configuration options for self-provisioned Elasticsearch under `spec:storage:elasticsearch`  in your configuration file.
  +
  +.Elasticsearch resource configuration parameters
  +[options="header"]
  +[cols="l, a, a, a"]
  +|===
  +|Parameter |Description |Values |Default value
   |elasticsearch:
     nodeCount:
   |Number of Elasticsearch nodes. For high availability use at least 3 nodes. Do not use 2 nodes as “split brain” problem can happen.
  
positive.code: 
  You configure storage for the Collector, Ingester, and Query services under `spec:storage`.  Multiple instances of each of these components can be provisioned as required for performance and resilience purposes.
  
  .Restrictions
  
  * There can be only one Jaeger with self-provisioned Elasticsearch instance per namespace.
  * There can be only one Elasticsearch per namespace.
  * You cannot share or reuse a {ProductName} logging Elasticsearch instance with Jaeger.  The Elasticsearch cluster is meant to be dedicated for a single Jaeger instance.
  
  [NOTE]
  ====
  If you already have installed Elasticsearch as part of OpenShift logging, the Jaeger Operator can use the installed Elasticsearch Operator to provision storage.
  ====
  
  .Jaeger general storage parameters
  [options="header"]
  [cols="l, a, a, a"]
  |===
  |Parameter |Description |Values |Default value
  
  |spec:
   storage:
    options: {}
  
negative.code:   strategy: production
    storage:
      type: elasticsearch
      options:
        es:
          server-urls: https://quickstart-es-http.default.svc:9200 # <1>
          index-prefix: my-prefix
          tls: # <2>
            ca: /es/certificates/ca.crt
      secretName: jaeger-secret # <3>
    volumeMounts: # <4>
      - name: certificates
        mountPath: /es/certificates/
        readOnly: true
    volumes:
      - name: certificates
        secret:
          secretName: quickstart-es-http-certs-public
  
  ----
  <1> URL to Elasticsearch service running in default namespace.
  <2> TLS configuration. In this case only CA certificate, but it can also contain es.tls.key and es.tls.cert when using mutual TLS.
  <3> Secret which defines environment variables ES_PASSWORD and ES_USERNAME. Created by kubectl create secret generic jaeger-secret --from-literal=ES_PASSWORD=changeme --from-literal=ES_USERNAME=elastic
  <4> Volume mounts and volumes which are mounted into all storage components.
  