3 # -- Overrides the Docker registry globally for all images, excluding enterprise.
5 # -- Optional list of imagePullSecrets for all images, excluding enterprise.
6 # Names of existing secrets with private container registry credentials.
7 # Ref: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
9 # pullSecrets: [ my-dockerconfigjson-secret ]
11 # -- Adding common labels to all K8S resources including pods
13 # -- Adding labels to K8S resources (excluding pods)
15 # -- Adding labels to all pods
17 # -- Overrides the priorityClassName for all pods
18 priorityClassName: null
19 # -- configures cluster domain ("cluster.local" by default)
20 clusterDomain: 'cluster.local'
21 # -- configures DNS service name
22 dnsService: 'kube-dns'
23 # -- configures DNS service namespace
24 dnsNamespace: 'kube-system'
26 # -- Fraction of the container memory limit used to compute GOMEMLIMIT (e.g. 0.85 = 85%).
27 # Set to 0 to disable automatic GOMEMLIMIT injection.
28 goMemLimitFactor: 0.85
29 # -- Value to set for GOGC alongside GOMEMLIMIT. Lowering below the default of 100 reduces
30 # heap growth between GC cycles, working in tandem with GOMEMLIMIT to smooth memory usage.
31 # Set to 0 to disable automatic GOGC injection.
33 # -- Common environment variables to add to all pods directly managed by this chart.
34 # scope: admin-api, compactor, distributor, enterprise-federation-frontend, gateway, ingester, memcached, metrics-generator, querier, query-frontend, tokengen
36 # -- Common environment variables which come from a ConfigMap or Secret to add to all pods directly managed by this chart.
37 # scope: admin-api, compactor, distributor, enterprise-federation-frontend, gateway, ingester, memcached, metrics-generator, querier, query-frontend, tokengen
39 # -- Common args to add to all pods directly managed by this chart.
40 # scope: admin-api, compactor, distributor, enterprise-federation-frontend, gateway, ingester, memcached, metrics-generator, querier, query-frontend, tokengen
42 # -- Global storage class to be used for persisted components
45# fullnameOverride: tempo
47# -- Configuration is loaded from the secret called 'externalConfigSecretName'.
48# If 'useExternalConfig' is true, then the configuration is not generated, just
49# consumed. Top level keys for `tempo.yaml` and `overrides.yaml` are to be
50# provided by the user.
51useExternalConfig: false
52# -- Defines what kind of object stores the configuration, a ConfigMap or a Secret.
53# In order to move sensitive information (such as credentials) from the ConfigMap/Secret to a more secure location (e.g. vault), it is possible to use [environment variables in the configuration](https://grafana.com/docs/mimir/latest/operators-guide/configuring/reference-configuration-parameters/#use-environment-variables-in-the-configuration).
54# Such environment variables can be then stored in a separate Secret and injected via the global.extraEnvFrom value. For details about environment injection from a Secret please see [Secrets](https://kubernetes.io/docs/concepts/configuration/secret/#use-case-as-container-environment-variables).
55configStorageType: ConfigMap
56# -- Name of the Secret or ConfigMap that contains the configuration (used for naming even if config is internal).
57externalConfigSecretName: '{{ include "tempo.resourceName" (dict "ctx" . "component" "config") }}'
58# -- Name of the Secret or ConfigMap that contains the runtime configuration (used for naming even if config is internal).
59externalRuntimeConfigName: '{{ include "tempo.resourceName" (dict "ctx" . "component" "runtime") }}'
60# -- When 'useExternalConfig' is true, then changing 'externalConfigVersion' triggers restart of services - otherwise changes to the configuration cause a restart.
61externalConfigVersion: '0'
62# -- If true, Tempo will report anonymous usage data about the shape of a deployment to Grafana Labs
64# -- Enable streaming over HTTP for tempo and Tempo gateway(nginx)
65streamOverHTTPEnabled: false
67 # -- Pod DNS config applied to all components. Override per component with `<component>.dnsConfig` or `defaults.dnsConfig`.
70 # -- The Docker registry. Overrides `global.image.registry`
72 # -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
74 # -- Docker image repository
75 repository: chainguard-private/tempo-fips
76 # -- Overrides the image tag whose default is the chart's appVersion
77 tag: 3.0.5-r0@sha256:af38ddaa0278d1c8deecdc84c2b6a397b56ba35a596616e911fc27f903ecfbdc
78 pullPolicy: IfNotPresent
79 # -- Liveness probe for all Tempo binary pods. Deep-merged over `defaults.livenessProbe`.
81 # -- Readiness probe for all Tempo binary pods. Deep-merged over `defaults.readinessProbe`.
83 # -- Startup probe for all Tempo binary pods. Deep-merged over `defaults.startupProbe`.
85 # -- Global labels for all tempo pods
87 # -- Common annotations for all pods
89 # -- The number of old ReplicaSets to retain to allow rollback
90 revisionHistoryLimit: 10
91 # -- SecurityContext holds container-level security attributes and common container settings
96 allowPrivilegeEscalation: false
100 readOnlyRootFilesystem: true
101 # -- podSecurityContext holds pod-level security attributes and common container settings
104 # -- Structured tempo configuration
106 # -- Memberlist service configuration.
108 # -- Adds the appProtocol field to the memberlist service. This allows memberlist to work with istio protocol selection. Set the optional service protocol. Ex: "tcp", "http" or "https".
110 # -- Adds the service field to the memberlist service
112 # -- Sets optional annotations to the service field of the memberlist service.
115 # -- Configure the IP families for all tempo services
116 # See the Service spec for details: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.31/#servicespec-v1-core
120 # -- Configure the IP family policy for all tempo services. SingleStack, PreferDualStack or RequireDualStack
121 ipFamilyPolicy: 'SingleStack'
122 # -- Default traffic distribution for all non-headless tempo services (PreferSameZone or PreferSameNode).
123 # See https://kubernetes.io/docs/concepts/services-networking/service/#traffic-distribution.
124 # Can be overridden per component via <component>.service.trafficDistribution.
125 trafficDistribution: null
126 # -- Point the live-store, block-builder, backend-scheduler, backend-worker and
127 # metrics-generator StatefulSets at the headless Service of their own component as the
128 # governing service, and publish the not-ready addresses of those Services. The default
129 # `false` keeps the short, unprefixed name that the chart has always written. That name
130 # matches no Service, so the stable per-pod DNS names do not resolve. The memcached
131 # StatefulSets already write the full resource name and are not affected.
132 # `spec.serviceName` is immutable, and a pod takes its subdomain at creation only. Enable
133 # this only together with the manual StatefulSet delete and the pod restart described
134 # under `Upgrading` in the chart README.
135 useHeadlessGoverningService: false
136# -- Default values applied to every pod in this chart.
137# These values are overridden by component-specific settings.
139 # -- Default pod DNS config for all pods. Overridden per component by `<component>.dnsConfig`; falls back to `tempo.dnsConfig`.
141 # -- Default pod-level security context for all pods
142 podSecurityContext: {}
143 # -- Default container-level security context for all containers
144 containerSecurityContext: {}
145 # -- Default annotations for all pods
147 # -- Default labels for all pods
149 # -- Default node selector for all pods
151 # -- Default tolerations for all pods
153 # -- Default affinity for all pods
155 # -- Default priority class name for all pods
156 priorityClassName: ""
157 # -- Default resource requests and limits for all pods
159 # -- Default extra CLI args for all Tempo binary pods
161 # -- Default extra environment variables for all pods
163 # -- Default extra environment variables from ConfigMaps or Secrets for all pods
165 # -- Default extra volume mounts for all pods
166 extraVolumeMounts: []
167 # -- Default extra volumes for all pods
169 # -- Default liveness probe for all Tempo binary pods.
170 # `tempo.livenessProbe` and `<component>.livenessProbe` are deep-merged over it, in that order.
171 # A handler (`httpGet`, `tcpSocket`, `exec`, `grpc`) set at a higher level replaces an inherited handler of a different type.
172 # Set `enabled: false` at any level to disable the probe; a higher level can set `enabled: true` to restore it.
177 initialDelaySeconds: 60
179 # -- Default readiness probe for all Tempo binary pods. Merged like `defaults.livenessProbe`.
184 initialDelaySeconds: 30
186 # -- Default startup probe for all Tempo binary pods. Disabled by default. Merged like `defaults.livenessProbe`.
189 # -- Specifies whether a ServiceAccount should be created
191 # -- The name of the ServiceAccount to use.
192 # If not set and create is true, a name is generated using the fullname template
194 # -- Image pull secrets for the service account
196 # -- Labels for the service account
198 # -- Annotations for the service account
200 automountServiceAccountToken: false
202 # -- Specifies whether RBAC manifests should be created
204# Configuration for the metrics-generator
206 # -- Specifies whether a metrics-generator should be deployed
208 # -- Kind of deployment [StatefulSet/Deployment]
210 # -- Annotations for the metrics-generator StatefulSet
212 # -- Number of replicas for the metrics-generator
214 # -- hostAliases to add
219 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
221 # -- Init containers for the metrics generator pod
224 # -- The Docker registry for the metrics-generator image. Overrides `tempo.image.registry`
226 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
228 # -- Docker image repository for the metrics-generator image. Overrides `tempo.image.repository`
230 # -- Docker image tag for the metrics-generator image. Overrides `tempo.image.tag`
232 # -- The name of the PriorityClass for metrics-generator pods
233 priorityClassName: null
234 # -- Labels for metrics-generator pods
236 # -- Annotations for metrics-generator pods
238 # -- Additional CLI args for the metrics-generator
240 # -- Environment variables to add to the metrics-generator pods
242 # -- Environment variables from secrets or configmaps to add to the metrics-generator pods
244 # -- Startup probe for metrics-generator pods. Deep-merged over `tempo.startupProbe`.
246 # -- Resource requests and limits for the metrics-generator
248 # -- Grace period to allow the metrics-generator to shutdown before it is killed. Especially for the ingestor,
249 # this must be increased. It must be long enough so metrics-generators can be gracefully shutdown flushing/transferring
250 # all data and to successfully leave the member ring on shutdown.
251 terminationGracePeriodSeconds: 300
252 # -- topologySpread for metrics-generator pods. Passed through `tpl` and, thus, to be configured as string
253 # @default -- Defaults to allow skew no more then 1 node per AZ
254 topologySpreadConstraints: |
256 topologyKey: topology.kubernetes.io/zone
257 whenUnsatisfiable: ScheduleAnyway
260 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "metrics-generator") | nindent 6 }}
261 # -- Affinity for metrics-generator pods. Passed through `tpl` and, thus, to be configured as string
262 # @default -- Hard node and soft zone anti-affinity
265 requiredDuringSchedulingIgnoredDuringExecution:
268 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "metrics-generator") | nindent 10 }}
269 topologyKey: kubernetes.io/hostname
270 preferredDuringSchedulingIgnoredDuringExecution:
275 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "metrics-generator") | nindent 12 }}
276 topologyKey: topology.kubernetes.io/zone
277 # -- Pod Disruption Budget configuration
279 # -- Enable PodDisruptionBudget for metrics-generator
281 # -- Set unhealthyPodEvictionPolicy for the metrics-generator PodDisruptionBudget. Requires policy/v1.
282 unhealthyPodEvictionPolicy: ""
283 # -- Pod Disruption Budget maxUnavailable
285 # -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
287 # -- Node selector for metrics-generator pods
289 # -- Tolerations for metrics-generator pods
291 # -- Persistence configuration for metrics-generator
293 # -- Enable creating PVCs if you have kind set to StatefulSet. This disables using local disk or memory configured in walEmptyDir
295 # -- Enable StatefulSetRecreation for changes to PVC size.
296 # This means that the StatefulSet will be deleted, recreated (with the same name) and rolled when a change to the
297 # PVC size is detected. That way the PVC can be resized without manual intervention.
298 enableStatefulSetRecreationForSizeChange: false
300 # -- Storage class to be used.
301 # If defined, storageClassName: <storageClass>.
302 # If set to "-", storageClassName: "", which disables dynamic provisioning.
303 # If empty or set to null, no storageClassName spec is
304 # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack).
306 # -- Annotations for metrics generator PVCs
308 # -- Labels for metrics generator PVCs
310 # -- The EmptyDir location where the /var/tempo will be mounted on. Defaults to local disk, can be set to memory.
312 ## Here shows how to configure 1Gi memory as emptyDir.
313 ## Ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#emptydirvolumesource-v1-core
316 # -- Extra volumes for metrics-generator pods
317 extraVolumeMounts: []
318 # -- Extra volumes for metrics-generator deployment
320 # -- Containers to add to the metrics-generator pods
322 persistentVolumeClaimRetentionPolicy:
323 # -- Enable Persistent volume retention policy for StatefulSet
325 # -- Volume retention behavior when the replica count of the StatefulSet is reduced
327 # -- Volume retention behavior that applies when the StatefulSet is deleted
334 - name: http-memberlist
340 # -- More information on configuration: https://grafana.com/docs/tempo/latest/configuration/#metrics-generator
343 collection_interval: 15s
347 # -- For processors to be enabled and generate metrics, pass the names of the processors to `overrides.defaults.metrics_generator.processors` value like `[service-graphs, span-metrics]`.
349 # -- Additional dimensions to add to the metrics along with the default dimensions.
350 # -- The resource and span attributes to be added to the service graph metrics, if present.
352 histogram_buckets: [0.1, 0.2, 0.4, 0.8, 1.6, 3.2, 6.4, 12.8]
357 # -- Additional dimensions to add to the metrics along with the default dimensions.
358 # -- The resource and span attributes to be added to the span metrics, if present.
360 histogram_buckets: [0.002, 0.004, 0.008, 0.016, 0.032, 0.064, 0.128, 0.256, 0.512, 1.02, 2.05, 4.10]
364 remote_write_flush_deadline: 1m
365 # Whether to add X-Scope-OrgID header in remote write requests
366 remote_write_add_org_id_header: true
367 # -- A list of remote write endpoints.
368 # -- https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
370 # -- Used by the local blocks processor to store a wal for traces.
371 metrics_ingestion_time_range_slack: 30s
373 # -- Annotations for Metrics Generator service
375 # -- Traffic distribution for the Metrics Generator service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
376 trafficDistribution: null
378 # -- Annotations for Metrics Generator discovery service
380 # -- Adds the appProtocol field to the metricsGenerator service. This allows metricsGenerator to work with istio protocol selection.
382 # -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
384# Configuration for the distributor
386 # -- Number of replicas for the distributor
388 # -- Annotations for distributor deployment
390 # -- hostAliases to add
395 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
398 # -- Enable autoscaling for the distributor
400 # -- Minimum autoscaling replicas for the distributor
402 # -- Maximum autoscaling replicas for the distributor
404 # -- Autoscaling behavior configuration for the distributor
406 # -- Target CPU utilisation percentage for the distributor
407 targetCPUUtilizationPercentage: 60
408 # -- Target memory utilisation percentage for the distributor
409 targetMemoryUtilizationPercentage:
411 # -- The Docker registry for the distributor image. Overrides `tempo.image.registry`
413 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
415 # -- Docker image repository for the distributor image. Overrides `tempo.image.repository`
417 # -- Docker image tag for the distributor image. Overrides `tempo.image.tag`
420 # -- Annotations for distributor service
422 # -- Labels for distributor service
424 # -- Type of service for the distributor
426 # -- If type is LoadBalancer you can assign the IP to the LoadBalancer
428 # -- If type is LoadBalancer limit incoming traffic from IPs.
429 loadBalancerSourceRanges: []
430 # -- If type is LoadBalancer you can set it to 'Local' [preserve the client source IP](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip)
431 externalTrafficPolicy: null
432 # -- https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/
433 internalTrafficPolicy: Cluster
434 # -- Traffic distribution for the distributor service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
435 trafficDistribution: null
437 # -- Annotations for distributorDiscovery service
439 # -- Labels for distributorDiscovery service
441 # -- The name of the PriorityClass for distributor pods
442 priorityClassName: null
443 # -- Labels for distributor pods
445 # -- Annotations for distributor pods
447 # -- Additional CLI args for the distributor
449 # -- Environment variables to add to the distributor pods
451 # -- Environment variables from secrets or configmaps to add to the distributor pods
453 # -- Init containers to add to the distributor pods
455 # -- Containers to add to the distributor pod
457 # -- Additional ports to expose on the distributor container (e.g. trace receiver ports).
458 # Standard ports (http-metrics, http-memberlist) are always added automatically.
460 # -- Liveness probe for distributor pods. Deep-merged over `tempo.livenessProbe`.
462 # -- Readiness probe for distributor pods. Deep-merged over `tempo.readinessProbe`.
464 # -- Startup probe for distributor pods. Deep-merged over `tempo.startupProbe`.
466 # -- Resource requests and limits for the distributor
468 # -- On SIGTERM, report not-ready and wait this long before shutdown so the LB drains the pod before connections are cut.
469 # "0s" (default) disables. When enabling, keep terminationGracePeriodSeconds above shutdownDelay + server.graceful_shutdown_timeout.
471 # -- Grace period to allow the distributor to shutdown before it is killed
472 terminationGracePeriodSeconds: 30
473 # -- Container lifecycle hooks for the distributor
475 # -- topologySpread for distributor pods. Passed through `tpl` and, thus, to be configured as string
476 # @default -- Defaults to allow skew no more then 1 node per AZ
477 topologySpreadConstraints: |
479 topologyKey: topology.kubernetes.io/zone
480 whenUnsatisfiable: ScheduleAnyway
483 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "distributor") | nindent 6 }}
484 # -- Affinity for distributor pods. Passed through `tpl` and, thus, to be configured as string
485 # @default -- Hard node and soft zone anti-affinity
488 requiredDuringSchedulingIgnoredDuringExecution:
491 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "distributor") | nindent 10 }}
492 topologyKey: kubernetes.io/hostname
493 preferredDuringSchedulingIgnoredDuringExecution:
498 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "distributor") | nindent 12 }}
499 topologyKey: topology.kubernetes.io/zone
500 # Strategy of updating pods
505 # -- Pod Disruption Budget configuration
507 # -- Enable PodDisruptionBudget for distributor
509 # -- Set unhealthyPodEvictionPolicy for the distributor PodDisruptionBudget. Requires policy/v1.
510 unhealthyPodEvictionPolicy: ""
511 # -- Pod Disruption Budget maxUnavailable
513 # -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
515 # -- Node selector for distributor pods
517 # -- Tolerations for distributor pods
519 # -- Extra volumes for distributor pods
520 extraVolumeMounts: []
521 # -- Extra volumes for distributor deployment
524 # -- Enable to log every received trace id to help debug ingestion
525 # -- WARNING: Deprecated. Use log_received_spans instead.
526 log_received_traces: null
527 # -- Enable to log every received span to help debug ingestion or calculate span error distributions using the logs
530 include_all_attributes: false
531 filter_by_status_error: false
534 include_all_attributes: false
535 filter_by_status_error: false
536 # -- Disables write extension with inactive ingesters
538 # -- Trace Attribute bytes limit. This is the maximum number of bytes that can be used in a trace. 0 for no limit. Set to null to omit from config.
539 max_attribute_bytes: null
540 # Configures usage trackers in the distributor which expose metrics of ingested traffic grouped by configurable
541 # attributes exposed on /usage_metrics.
543 # -- Enables the "cost-attribution" usage tracker. Per-tenant attributes are configured in overrides.
545 # -- Maximum number of series per tenant.
546 max_cardinality: 10000
547 # -- Interval after which a series is considered stale and will be deleted from the registry.
548 # -- Once a metrics series is deleted, it won't be emitted anymore, keeping active series low.
549 stale_duration: 15m0s
550 # -- Adds the appProtocol field to the distributor service. This allows distributor to work with istio protocol selection.
552 # -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
554# -- EXPERIMENTAL Feature, disabled by default
555# Configuration for the backend-scheduler
557 # -- Specifies whether a backend-scheduler and backend-worker
558 # -- should be deployed.
560 # -- Annotations for backend-scheduler StatefulSet
562 # -- Labels for the backend-scheduler StatefulSet
564 # -- hostAliases to add
569 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
571 # -- Init containers to add to the backend-scheduler pod
574 # -- The Docker registry for the backend-scheduler image. Overrides `tempo.image.registry`
576 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
578 # -- Docker image repository for the backend-scheduler image. Overrides `tempo.image.repository`
580 # -- Docker image tag for the backend-scheduler image. Overrides `tempo.image.tag`
582 # -- The name of the PriorityClass for backend-scheduler pod
583 priorityClassName: null
584 # -- Labels for backend-scheduler pod
586 # -- Annotations for backend-scheduler pod
588 # -- Additional CLI args for the backend-scheduler
590 # -- Environment variables to add to the backend-scheduler pod
592 # -- Environment variables from secrets or configmaps to add to the backend-scheduler pod
594 # -- Additional ports to expose on the backend-scheduler container
595 # Standard ports (grpc, http-metrics, http-memberlist) are always added automatically.
597 # -- Liveness probe for backend-scheduler pod. Deep-merged over `tempo.livenessProbe`.
599 # -- Readiness probe for backend-scheduler pod. Deep-merged over `tempo.readinessProbe`.
601 # -- Startup probe for backend-scheduler pod. Deep-merged over `tempo.startupProbe`.
603 # -- Resource requests and limits for the backend-scheduler
605 # -- Grace period to allow the backend-scheduler to shutdown before it is killed
606 terminationGracePeriodSeconds: 30
607 # -- topologySpread for backend-scheduler pods. Passed through `tpl` and, thus, to be configured as string
608 # @default -- Defaults to allow skew no more then 1 node per AZ
609 topologySpreadConstraints: |
611 topologyKey: topology.kubernetes.io/zone
612 whenUnsatisfiable: ScheduleAnyway
615 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-scheduler") | nindent 6 }}
616 # -- Affinity for backend-scheduler pods. Passed through `tpl` and, thus, to be configured as string
617 # @default -- Soft node and soft zone anti-affinity
620 preferredDuringSchedulingIgnoredDuringExecution:
625 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-scheduler") | nindent 12 }}
626 topologyKey: kubernetes.io/hostname
631 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-scheduler") | nindent 12 }}
632 topologyKey: topology.kubernetes.io/zone
633 # -- Node selector for backend-scheduler pod
635 # -- Tolerations for backend-scheduler pod
637 # -- Extra volumes for backend-scheduler pod
638 extraVolumeMounts: []
639 # -- Extra volumes for backend-scheduler StatefulSet
641 # -- Containers to add to the backend-scheduler pods
643 # -- Persistence configuration for backend-scheduler
645 # -- Enable creating a PVC for the backend-scheduler data volume, so its local
646 # work path survives a pod restart instead of being lost with the emptyDir.
648 # -- Enable StatefulSetRecreation for changes to PVC size
649 enableStatefulSetRecreationForSizeChange: false
650 # -- use emptyDir with ramdisk instead of PVC. **Please note that all data in backend-scheduler will be lost on pod restart**
652 # -- Size of persistent or memory disk
654 # -- Storage class to be used.
655 # If defined, storageClassName: <storageClass>.
656 # If set to "-", storageClassName: "", which disables dynamic provisioning.
657 # If empty or set to null, no storageClassName spec is
658 # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack).
660 # -- Annotations for backend-scheduler's persist volume claim
662 # -- Labels for backend-scheduler's persist volume claim
664 # -- Spec for the `data` volume when persistence is disabled. By default an
665 # empty `emptyDir: {}`; set e.g. `sizeLimit` or `medium: Memory` as needed.
667 # -- updateStrategy of the backend-scheduler statefulset.
671 persistentVolumeClaimRetentionPolicy:
672 # -- Enable Persistent volume retention policy for StatefulSet
674 # -- Volume retention behavior when the replica count of the StatefulSet is reduced
676 # -- Volume retention behavior that applies when the StatefulSet is deleted
679 # -- How often to flush the work cache to backend storage
680 backend_flush_interval: 1m
681 # -- How long to wait for a worker to complete a job before timing out internally
683 # -- Path to store local work cache files
684 local_work_path: /var/tempo
685 # -- How often to perform maintenance tasks (pruning old jobs, checking for dead jobs, etc.)
686 maintenance_interval: 1m
687 # -- Provider configuration for job generation
689 # -- Compaction job configuration
691 # -- Compaction configuration
693 # -- Duration to keep blocks
695 # Duration to keep blocks that have been compacted elsewhere
696 compacted_block_retention: 1h
697 # -- The time between compaction cycles
698 compaction_cycle: 30s
699 # -- Blocks in this time window will be compacted together
700 compaction_window: 1h
701 # -- Maximum size of a compacted block in bytes
702 # -- This should be set to a lower value, ideally 5GB or less
703 # -- 100GB is a legacy default for v2 storage format which is
704 # -- no longer even available as of Tempo 2.1.x
705 # -- https://github.com/grafana/tempo/discussions/5301
706 max_block_bytes: 107374182400
707 # -- Maximum number of traces in a compacted block. WARNING: Deprecated. Use max_block_bytes instead.
708 max_compaction_objects: 6000000
709 # -- The maximum amount of time to spend compacting a single tenant before moving to the next
710 max_time_per_tenant: 5m
711 # -- Number of tenants to process in parallel during retention
712 retention_concurrency: 10
713 # -- Maximum number of compaction jobs to create per tenant
714 max_compaction_level: 0
715 # -- Maximum number of blocks to compact together
717 # -- Maximum compaction level (0 means no limit)
718 max_jobs_per_tenant: 1000
719 # -- How often to measure tenant block lists and create new compaction jobs
721 # -- Minimum time between compaction cycles for a tenant
722 min_cycle_interval: 30s
723 # -- Minimum number of blocks required for compaction
725 # -- Retention job configuration
727 # -- How often to check for blocks that need to be deleted due to retention
729 # -- Work cache configuration
731 # -- After this duration, jobs that have not been updated are considered dead and will be reassigned.
732 dead_job_timeout: 24h
733 # -- How long to keep completed or failed jobs in the work cache before pruning them.
736 # -- Annotations for backend-scheduler service
738# Configuration for the backend-worker
740 # -- Number of replicas for the backend-worker
742 # -- Autoscaling configurations
744 # -- Enable autoscaling for the backend-worker
746 # -- Minimum autoscaling replicas for the backend-worker
748 # -- Maximum autoscaling replicas for the backend-worker
750 # -- Autoscaling via HPA object
753 # -- Autoscaling behavior configuration for the backend-worker
755 # -- Target CPU utilisation percentage for the backend-worker
756 targetCPUUtilizationPercentage: 100
757 # -- Target memory utilisation percentage for the backend-worker
758 targetMemoryUtilizationPercentage:
759 # -- Autoscaling via keda/ScaledObject
761 # requires https://keda.sh/
764 # scaledobject.keda.sh/transfer-hpa-ownership: "true" # Use to transfer an existing HPA ownership to this ScaledObject
765 # validations.keda.sh/hpa-ownership: "true" # Use to disable HPA ownership validation on this ScaledObject
766 # autoscaling.keda.sh/paused: "true" # Use to pause autoscaling of objects explicitly
767 pollingInterval: null # Optional. Default: 30 seconds
768 cooldownPeriod: null # Optional. Default: 300 seconds
769 initialCooldownPeriod: null # Optional. Default: 0 seconds
770 # Optional. Section to specify advanced options
772 # # Optional. Section to specify advanced options
773 # horizontalPodAutoscalerConfig:
774 # # Optional. Default: keda-hpa-{scaled-object-name}
776 # # Optional. Use to modify HPA's scaling behavior
779 # # stabilizationWindowSeconds: 300
780 # # Optional. Section to specify scaling modifiers
782 # target: null # Mandatory. New target if metrics are anyhow composed together
783 # activationTarget: null # Optional. New activation target if metrics are anyhow composed together
784 # metricType: null # Optional. Metric type to be used if metrics are anyhow composed together
785 # formula: null # Mandatory. Formula for calculation
787 # failureThreshold: null # Mandatory if fallback section is included
788 # replicas: null # Mandatory if fallback section is included
789 # behavior: null # Optional. Default: "static"
790 # -- List of autoscaling triggers for the compactor
792 # - name: tempo-outstanding-compaction-blocks
793 ## https://keda.sh/docs/2.19/concepts/authentication/
794 ## authenticationRef:
795 ## name: {trigger-authentication-name} or {cluster-trigger-authentication-name}
796 ## kind: TriggerAuthentication or ClusterTriggerAuthentication
799 # serverAddress: "http://<prometheus-host>:9090"
802 # sum by (cluster, namespace, tenant) (
803 # tempodb_compaction_outstanding_blocks{container="backend-scheduler", namespace=~".*"}
805 # ignoring(tenant) group_left count by (cluster, namespace)(
806 # tempo_build_info{container="backend-worker", namespace=~".*"}
808 # customHeaders: X-Scope-OrgID=<tenant-id>
809 # -- Annotations for backend-worker StatefulSet
811 # -- Labels for the backend-worker StatefulSet
813 # -- hostAliases to add
818 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
820 # -- Init containers to add to the backend-worker pods
823 # -- The Docker registry for the backend-worker image. Overrides `tempo.image.registry`
825 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
827 # -- Docker image repository for the backend-worker image. Overrides `tempo.image.repository`
829 # -- Docker image tag for the backend-worker image. Overrides `tempo.image.tag`
831 # -- The name of the PriorityClass for backend-worker pods
832 priorityClassName: null
833 # -- Labels for backend-worker pods
835 # -- Annotations for backend-worker pods
837 # -- Additional CLI args for the backend-worker
839 # -- Environment variables to add to the backend-worker pods
841 # -- Environment variables from secrets or configmaps to add to the backend-worker pods
843 # -- Liveness probe for backend-worker pods. Deep-merged over `tempo.livenessProbe`.
845 # -- Readiness probe for backend-worker pods. Deep-merged over `tempo.readinessProbe`.
847 # -- Startup probe for backend-worker pods. Deep-merged over `tempo.startupProbe`.
849 # -- Resource requests and limits for the backend-worker
851 # -- Grace period to allow the backend-worker to shutdown before it is killed
852 terminationGracePeriodSeconds: 30
853 # -- topologySpread for backend-worker pods. Passed through `tpl` and, thus, to be configured as string
854 # @default -- Defaults to allow skew no more then 1 node per AZ
855 topologySpreadConstraints: |
857 topologyKey: topology.kubernetes.io/zone
858 whenUnsatisfiable: ScheduleAnyway
861 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-worker") | nindent 6 }}
862 # -- Affinity for backend-worker pods. Passed through `tpl` and, thus, to be configured as string
863 # @default -- Soft node and soft zone anti-affinity
866 preferredDuringSchedulingIgnoredDuringExecution:
871 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-worker") | nindent 12 }}
872 topologyKey: kubernetes.io/hostname
877 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-worker") | nindent 12 }}
878 topologyKey: topology.kubernetes.io/zone
879 # -- Node selector for backend-worker pods
881 # -- Tolerations for backend-worker pods
883 # -- Extra volumes for backend-worker pods
884 extraVolumeMounts: []
885 # -- Extra volumes for backend-worker StatefulSet
887 # -- Containers to add to the backend-worker pods
889 # -- updateStrategy of the backend-worker statefulset.
893 persistentVolumeClaimRetentionPolicy:
894 # -- Enable Persistent volume retention policy for StatefulSet
896 # -- Volume retention behavior when the replica count of the StatefulSet is reduced
898 # -- Volume retention behavior that applies when the StatefulSet is deleted
901 backend_scheduler_client:
902 # -- gRPC client configuration
903 grpc_client_config: {}
904 # -- Backoff configuration for retrying failed jobs
909 # -- Compaction settings
910 # -- .Values.backendScheduler.compaction.compaction will be used
912 # -- Timeout for finishing the current job before shutting down the worker
913 finish_on_shutdown_timeout: 30s
915 # -- Annotations for backend-worker service
917# -- Ingest configuration. Sets the top-level `ingest:` block in tempo.yaml.
918# Required for Tempo 3.0 microservices mode. Distributors write spans to Kafka;
919# block-builders and live-stores consume from it.
920# The number of block-builder and live-store replicas must equal the Kafka partition count.
923 # -- Kafka broker address (e.g. "kafka.kafka-namespace.svc.cluster.local:9092")
925 # -- Kafka topic name for trace data
927 # -- Automatically create the topic if it does not exist
928 auto_create_topic_enabled: true
929 # -- Number of partitions for the auto-created topic.
930 # Block-builder and live-store replica count must match this value.
931 auto_create_topic_default_partitions: 3
932 # SASL authentication for the Kafka client. When `mechanism` is empty it
933 # defaults to PLAIN, which — with no username/password — leaves SASL disabled
934 # (the unauthenticated default). Set a mechanism to enable authentication.
936 # -- SASL mechanism. Must be one of PLAIN, SCRAM-SHA-256, SCRAM-SHA-512,
937 # OAUTHBEARER, AWS_MSK_IAM. Empty defaults to PLAIN.
939 # -- Username for PLAIN and SCRAM-SHA-* mechanisms. Ignored if
940 # `existingSecret` is set. Prefer `existingSecret` in production so the
941 # value is never inlined into tempo.yaml.
943 # -- Password for PLAIN and SCRAM-SHA-* mechanisms. Ignored if
944 # `existingSecret` is set. Prefer `existingSecret` in production so the
945 # value is never inlined into tempo.yaml.
947 # -- Name of an existing Secret containing `usernameKey`/`passwordKey`.
948 # When set, `username`/`password` above are ignored and the credentials
949 # are injected as env vars and passed to tempo as
950 # `-ingest.sasl-username`/`-ingest.sasl-password` CLI flags instead of
951 # being inlined into tempo.yaml. Recommended over setting
952 # `username`/`password` directly.
954 # -- Key in `existingSecret` containing the username.
955 usernameKey: username
956 # -- Key in `existingSecret` containing the password.
957 passwordKey: password
958 # OAUTHBEARER options (used when mechanism is OAUTHBEARER). Provide exactly
959 # one credential source: token, filePath, httpSocketPath, or existingSecret.
961 # -- Static OAuth token. Ignored if `existingSecret` is set. Prefer
962 # `existingSecret` in production so the value is never inlined into
965 # -- Name of an existing Secret containing `tokenKey`. When set,
966 # `token` above is ignored and the credential is injected as an env var
967 # and passed to tempo as the `-ingest.sasl-oauthbearer-token` CLI flag
968 # instead of being inlined into tempo.yaml. Recommended over setting
971 # -- Key in `existingSecret` containing the token.
973 # -- Optional authorization ID.
975 # -- Optional map of additional OAuth extensions (string -> string).
977 # -- Path to a file containing a (rotating) OAuth token in JSON format.
979 # -- Path to a Unix domain socket that serves the OAuth token over HTTP.
981 # -- Timeout for fetching the token from httpSocketPath (e.g. "10s").
982 httpSocketTimeout: ""
983 # AWS_MSK_IAM options (used when mechanism is AWS_MSK_IAM). Provide exactly
984 # one credential source: static keys, filePath, httpSocketPath, or existingSecret.
985 # Tempo does not fall back to the AWS default credential chain (e.g. IRSA).
987 # -- AWS access key ID. Ignored if `existingSecret` is set. Prefer
988 # `existingSecret` in production so the value is never inlined into
991 # -- AWS secret access key. Ignored if `existingSecret` is set. Prefer
992 # `existingSecret` in production so the value is never inlined into
995 # -- Optional AWS session token for temporary credentials. Ignored if
996 # `existingSecret` is set.
998 # -- Name of an existing Secret containing `accessKeyKey`/`secretKeyKey`
999 # and, optionally, `sessionTokenKey`. When set, `accessKey`/`secretKey`/
1000 # `sessionToken` above are ignored and the credentials are injected as
1001 # env vars and passed to tempo as `-ingest.sasl-msk-iam-*` CLI flags
1002 # instead of being inlined into tempo.yaml. Recommended over setting
1003 # the static keys directly.
1005 # -- Key in `existingSecret` containing the AWS access key ID.
1006 accessKeyKey: access-key
1007 # -- Key in `existingSecret` containing the AWS secret access key.
1008 secretKeyKey: secret-key
1009 # -- Key in `existingSecret` containing the AWS session token. Empty
1010 # by default (session token is optional); set this only when
1011 # `existingSecret` contains this key, otherwise pods fail to start.
1013 # -- Optional user agent string.
1015 # -- Path to a file containing AWS credentials in JSON format.
1017 # -- Path to a Unix domain socket that serves AWS credentials over HTTP.
1019 # -- Timeout for fetching credentials from httpSocketPath (e.g. "10s").
1020 httpSocketTimeout: ""
1021 # TLS for the Kafka client connection. Independent of the SASL mechanism and
1022 # can be combined with any of them (e.g. PLAIN over TLS).
1024 # -- Enable TLS for the Kafka connection.
1026 # -- Path to the client certificate (for mTLS).
1028 # -- Path to the client key (for mTLS).
1030 # -- Path to the CA certificate used to verify the broker.
1032 # -- Override the server name / SNI used during verification.
1034 # -- Minimum TLS version (e.g. "VersionTLS12", "VersionTLS13").
1036 # -- Skip broker certificate verification. Avoid in production.
1037 insecureSkipVerify: false
1038# Configuration for the block-builder (Tempo 3.0+)
1039# Consumes spans from Kafka and writes blocks to object storage.
1040# One replica per Kafka partition — replica count must equal ingest.kafka.auto_create_topic_default_partitions.
1042 # -- Enable the block-builder. Requires ingest.kafka.address to be set.
1044 # -- Number of replicas. Must equal the Kafka partition count.
1046 # -- Annotations for the block-builder StatefulSet
1048 # -- Labels for the block-builder StatefulSet
1050 # -- hostAliases to add
1052 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1054 # -- Init containers to add to the block-builder pod
1057 # -- The Docker registry for the block-builder image. Overrides `tempo.image.registry`
1059 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1061 # -- Docker image repository for the block-builder image. Overrides `tempo.image.repository`
1063 # -- Docker image tag for the block-builder image. Overrides `tempo.image.tag`
1065 # -- The name of the PriorityClass for block-builder pods
1066 priorityClassName: null
1067 # -- Labels for block-builder pods
1069 # -- Annotations for block-builder pods
1071 # -- Additional CLI args for the block-builder
1073 # -- Environment variables to add to the block-builder pods
1075 # -- Environment variables from secrets or configmaps to add to the block-builder pods
1077 # -- Additional ports to expose on the block-builder container
1079 # -- Liveness probe for block-builder pods. Deep-merged over `tempo.livenessProbe`.
1081 # -- Readiness probe for block-builder pods. Deep-merged over `tempo.readinessProbe`.
1083 # -- Startup probe for block-builder pods. Deep-merged over `tempo.startupProbe`.
1085 # -- Resource requests and limits for the block-builder
1087 # -- Grace period to allow the block-builder to flush its WAL before being killed
1088 terminationGracePeriodSeconds: 300
1089 # -- topologySpread for block-builder pods. Passed through `tpl`.
1090 topologySpreadConstraints: |
1092 topologyKey: topology.kubernetes.io/zone
1093 whenUnsatisfiable: ScheduleAnyway
1096 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "block-builder") | nindent 6 }}
1097 # -- Affinity for block-builder pods. Passed through `tpl`.
1100 preferredDuringSchedulingIgnoredDuringExecution:
1105 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "block-builder") | nindent 12 }}
1106 topologyKey: kubernetes.io/hostname
1107 # -- Node selector for block-builder pods
1109 # -- Tolerations for block-builder pods
1111 # -- Extra volumes for block-builder pods
1112 extraVolumeMounts: []
1113 # -- Extra volumes for block-builder StatefulSet
1115 # -- Containers to add to the block-builder pods
1117 # -- updateStrategy of the block-builder StatefulSet
1121 # -- Pod Disruption Budget configuration
1122 podDisruptionBudget:
1123 # -- Enable PodDisruptionBudget for block-builder
1125 # -- Set unhealthyPodEvictionPolicy for the block-builder PodDisruptionBudget. Requires policy/v1.
1126 unhealthyPodEvictionPolicy: ""
1127 # -- Pod Disruption Budget maxUnavailable
1130 # -- Annotations for block-builder service
1133 # -- Number of Kafka partitions each block-builder instance consumes.
1134 # Each pod consumes this many partitions starting from its ordinal * partitions_per_instance.
1135 partitions_per_instance: 1
1136# Configuration for the live-store (Tempo 3.0+)
1137# Consumes spans from Kafka and serves recent-data queries (last ~30 minutes).
1138# One replica per Kafka partition — replica count must equal ingest.kafka.auto_create_topic_default_partitions.
1140 # -- Enable the live-store. Requires ingest.kafka.address to be set.
1142 # -- Number of replicas. Must equal the Kafka partition count.
1144 # -- Annotations for the live-store StatefulSet
1146 # -- Labels for the live-store StatefulSet
1148 # -- hostAliases to add
1150 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1152 # -- Init containers to add to the live-store pod
1155 # -- The Docker registry for the live-store image. Overrides `tempo.image.registry`
1157 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1159 # -- Docker image repository for the live-store image. Overrides `tempo.image.repository`
1161 # -- Docker image tag for the live-store image. Overrides `tempo.image.tag`
1163 # -- The name of the PriorityClass for live-store pods
1164 priorityClassName: null
1165 # -- Labels for live-store pods
1167 # -- Annotations for live-store pods
1169 # -- Additional CLI args for the live-store
1171 # -- Environment variables to add to the live-store pods
1173 # -- Environment variables from secrets or configmaps to add to the live-store pods
1175 # -- Additional ports to expose on the live-store container
1177 # -- Liveness probe for live-store pods. Deep-merged over `tempo.livenessProbe`.
1179 # -- Readiness probe for live-store pods. Deep-merged over `tempo.readinessProbe`.
1181 # -- Startup probe for live-store pods. Deep-merged over `tempo.startupProbe`.
1183 # -- Resource requests and limits for the live-store
1185 # -- Grace period to allow the live-store to shut down before being killed
1186 terminationGracePeriodSeconds: 60
1187 # -- topologySpread for live-store pods. Passed through `tpl`.
1188 topologySpreadConstraints: |
1190 topologyKey: topology.kubernetes.io/zone
1191 whenUnsatisfiable: ScheduleAnyway
1194 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "live-store") | nindent 6 }}
1195 # -- Affinity for live-store pods. Passed through `tpl`.
1198 preferredDuringSchedulingIgnoredDuringExecution:
1203 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "live-store") | nindent 12 }}
1204 topologyKey: kubernetes.io/hostname
1205 # -- Node selector for live-store pods
1207 # -- Tolerations for live-store pods
1209 # -- Extra volumes for live-store pods
1210 extraVolumeMounts: []
1211 # -- Extra volumes for live-store StatefulSet
1213 # -- Containers to add to the live-store pods
1215 # -- updateStrategy of the live-store StatefulSet
1219 # -- Persistence configuration for live-store
1221 # -- Enable creating PVCs for the live-store data volume. The WAL and local
1222 # blocks then survive a restart, so the live-store resumes from its committed
1223 # Kafka offset (never further back than 2 x complete_block_timeout) instead of
1224 # re-reading that whole window, as it must when it starts with no local data.
1226 # -- Enable StatefulSetRecreation for changes to PVC size
1227 enableStatefulSetRecreationForSizeChange: false
1228 # -- use emptyDir with ramdisk instead of PVC. **Please note that all data in live-store will be lost on pod restart**
1230 # -- Size of persistent or memory disk
1232 # -- Storage class to be used.
1233 # If defined, storageClassName: <storageClass>.
1234 # If set to "-", storageClassName: "", which disables dynamic provisioning.
1235 # If empty or set to null, no storageClassName spec is
1236 # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack).
1238 # -- Annotations for live-store's persist volume claim
1240 # -- Labels for live-store's persist volume claim
1242 # -- Spec for the `data` volume when persistence is disabled. By default an
1243 # empty `emptyDir: {}`; set e.g. `sizeLimit` or `medium: Memory` as needed.
1245 # Note: the retained volume also holds the live-store's shutdown marker
1246 # (`/var/tempo/live-store/shutdown-marker`). It is removed on a graceful shutdown,
1247 # but if a pod is force-killed after the rollout-operator has called
1248 # `prepare-downscale` (grace period exceeded, OOMKill, node loss), a stale marker
1249 # is left on the volume. On scale-up that pod then starts with
1250 # `create-partition-on-startup=false` and its partition will not become ACTIVE, so
1251 # it takes no writes. If a scaled-up live-store never becomes ready, or its
1252 # partition stays INACTIVE, remove the shutdown marker from its PVC or call
1253 # `DELETE /live-store/prepare-downscale` on it.
1254 persistentVolumeClaimRetentionPolicy:
1255 # -- Enable Persistent volume retention policy for the live-store StatefulSet
1257 # -- Volume retention behaviour when the StatefulSet replica count is reduced
1259 # -- Volume retention behaviour when the StatefulSet is deleted
1261 # Zone-aware replication spreads the live-stores over failure domains such as
1262 # availability zones, racks or data centres. Every zone runs a full set of
1263 # live-stores, so each Kafka partition gets one owner per zone (RF equals the
1264 # number of zones). The read quorum is 1: a querier only needs an answer from
1265 # one zone, so recent-trace queries survive the loss of a zone.
1266 # Requires `rollout_operator.enabled: true`.
1267 zoneAwareReplication:
1268 # -- Enable zone-aware replication for the live-store
1270 # -- Set to true when a rollout-operator already runs in this namespace and is
1271 # not installed by this chart. Skips the `rollout_operator.enabled` check.
1272 rolloutOperatorManagedExternally: false
1273 # -- Topology key of the failure domain. When set, the live-stores of one zone
1274 # never share a domain with the live-stores of another zone. The cluster must
1275 # hold at least as many domains as there are zones, otherwise the extra zones
1276 # stay unschedulable. With neither this nor a `nodeSelector` on every zone,
1277 # the zones still give separate pods and one partition owner each, but two
1278 # zones can share a failure domain.
1280 # -- Maximum number of live-stores the rollout-operator restarts at the same
1281 # time inside one zone. The rollout-operator always moves one zone at a time.
1282 # A zone with fewer live-stores than this restarts as a whole, which the read
1283 # quorum of 1 covers, at the cost of the read capacity of that zone.
1285 # -- Reject every scale-down of the live-stores. The live-store count must
1286 # match the Kafka partition count, so an accidental scale-down drops the
1287 # recent-read tier of the partitions that go away. Needs the rollout-operator
1288 # webhooks. Cannot be combined with `prepareDownscale.enabled`.
1290 # Coordinated scale-down through the rollout-operator admission webhook. It
1291 # guards a lower `liveStore.replicas`, which retires the last Kafka
1292 # partitions. On such a scale-down the webhook calls `httpPath` on every
1293 # live-store that goes away, which moves its partition to INACTIVE and stops
1294 # the writes to it. The webhook then rejects the scale-down of a second zone
1295 # until `minTimeBetweenZonesDownscale` has passed, so the zones go down one
1296 # at a time. A rejected scale-down fails the `helm upgrade`: wait for the
1297 # window, then run the upgrade again.
1299 # The webhook is the only mechanism the chart uses, so a pod stops as soon
1300 # as its partition is INACTIVE. The remaining zones still own that partition
1301 # and still hold its recent traces, which is what keeps the read path whole
1302 # until the last zone goes down. Do not remove a zone from the `zones` list
1303 # in the same step: that deletes the StatefulSet, which the webhook never
1306 # -- Enable the coordinated scale-down
1308 # -- Minimum time between the scale-down of two zones. Must be longer than
1309 # the period a live-store still serves recent traces, because the last
1310 # zone to go down takes the last owner of the retired partitions with it.
1311 minTimeBetweenZonesDownscale: 12h
1312 # -- Endpoint the webhook calls on every live-store that goes away. Must
1313 # accept a POST while the partition is still ACTIVE.
1314 # `live-store/prepare-downscale` does not: it answers 409 until the
1315 # partition is INACTIVE, so it needs the delayed-downscale mechanism of
1316 # the rollout-operator, which this chart does not configure.
1317 httpPath: live-store/prepare-partition-downscale
1318 # Voluntary evictions of zone-aware live-stores, through the
1319 # ZoneAwarePodDisruptionBudget of the rollout-operator. A native
1320 # PodDisruptionBudget counts pods, so it cannot tell that the same pod
1321 # ordinal in two zones holds every owner of one partition. This one counts
1322 # per partition across zones and rejects an eviction that would take the
1323 # last owner, whatever the budget of a single zone allows.
1325 # Needs the ZoneAwarePodDisruptionBudget CRD and the pod eviction webhook of
1326 # the rollout-operator. The bundled subchart installs both. The webhook
1327 # rejects an eviction while the rollout-operator is unreachable, so this
1328 # never opens a window. While this is on, it replaces the
1329 # `liveStore.podDisruptionBudget` object.
1330 podDisruptionBudget:
1331 # -- Guard the evictions with a ZoneAwarePodDisruptionBudget. Set to false
1332 # to keep a single native PodDisruptionBudget over all zones instead.
1334 # -- Live-stores of one partition that may be unavailable at the same
1335 # time, counted over every zone. 1 keeps a partition served through any
1336 # single voluntary eviction. 0 rejects every voluntary eviction.
1338 # -- Regular expression that returns the partition of a live-store from
1339 # its pod name. The rollout-operator anchors it with `^` and `$`, so it
1340 # must match the whole name. The default reads the pod ordinal, which is
1341 # the Kafka partition, and holds for any zone name.
1342 podNamePartitionRegex: ".*-([0-9]+)"
1343 # -- Capture group of the partition. Only needed when
1344 # `podNamePartitionRegex` holds more than one group.
1345 podNameRegexGroup: null
1346 # -- Minimum time after a live-store becomes ready before another owner of
1347 # the same partition may be evicted. A Go duration, so days are not a
1348 # unit. Set this when the live-stores run with the default
1349 # `readiness-target-lag` of 0, because a live-store then reports ready
1350 # while it still replays its partition.
1351 crossZoneEvictionDelay: null
1352 # -- Zones to deploy. At least 2 zones are required. Every zone runs
1353 # `liveStore.replicas` live-stores. A zone name must be a DNS label: it
1354 # becomes a StatefulSet name suffix and the value of the zone label.
1357 # -- Node selector for the live-stores of this zone. Merged on top of
1358 # `liveStore.nodeSelector`, or of `defaults.nodeSelector`.
1360 # -- Extra affinity for the live-stores of this zone. Merged on top of
1361 # `liveStore.affinity`. The zone anti-affinity of `topologyKey`
1362 # overwrites a `podAntiAffinity` here.
1364 # -- Extra annotations for the StatefulSet of this zone
1366 # -- Extra annotations for the pods of this zone
1373 # -- Pod Disruption Budget configuration
1374 podDisruptionBudget:
1375 # -- Enable PodDisruptionBudget for live-store
1377 # -- Set unhealthyPodEvictionPolicy for the live-store PodDisruptionBudget. Requires policy/v1.
1378 unhealthyPodEvictionPolicy: ""
1379 # -- Pod Disruption Budget maxUnavailable. With zone-aware replication the
1380 # budget covers the live-stores of every zone together, because the same pod
1381 # ordinal in two zones holds every owner of one partition.
1384 # -- Annotations for live-store service
1386 # -- Extra live-store configuration. Merged verbatim into the `live_store:` config block.
1387 # See https://grafana.com/docs/tempo/latest/configuration/#live-store for available fields.
1392# Configuration for the querier
1394 # -- Number of replicas for the querier
1396 # -- hostAliases to add
1401 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1403 # -- Annotations for querier deployment
1406 # -- Enable autoscaling for the querier
1408 # -- Minimum autoscaling replicas for the querier
1410 # -- Maximum autoscaling replicas for the querier
1412 # -- Autoscaling behavior configuration for the querier
1414 # -- Target CPU utilisation percentage for the querier
1415 targetCPUUtilizationPercentage: 60
1416 # -- Target memory utilisation percentage for the querier
1417 targetMemoryUtilizationPercentage:
1419 # -- The Docker registry for the querier image. Overrides `tempo.image.registry`
1421 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1423 # -- Docker image repository for the querier image. Overrides `tempo.image.repository`
1425 # -- Docker image tag for the querier image. Overrides `tempo.image.tag`
1427 # -- The name of the PriorityClass for querier pods
1428 priorityClassName: null
1429 # -- Labels for querier pods
1431 # -- Annotations for querier pods
1433 # -- Additional CLI args for the querier
1435 # -- Environment variables to add to the querier pods
1437 # -- Environment variables from secrets or configmaps to add to the querier pods
1439 # -- Liveness probe for querier pods. Deep-merged over `tempo.livenessProbe`.
1441 # -- Readiness probe for querier pods. Deep-merged over `tempo.readinessProbe`.
1443 # -- Startup probe for querier pods. Deep-merged over `tempo.startupProbe`.
1445 # -- Resource requests and limits for the querier
1447 # -- Grace period to allow the querier to shutdown before it is killed
1448 terminationGracePeriodSeconds: 30
1449 # -- topologySpread for querier pods. Passed through `tpl` and, thus, to be configured as string
1450 # @default -- Defaults to allow skew no more then 1 node per AZ
1451 topologySpreadConstraints: |
1453 topologyKey: topology.kubernetes.io/zone
1454 whenUnsatisfiable: ScheduleAnyway
1457 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "querier") | nindent 6 }}
1458 # -- Affinity for querier pods. Passed through `tpl` and, thus, to be configured as string
1459 # @default -- Hard node and soft zone anti-affinity
1462 requiredDuringSchedulingIgnoredDuringExecution:
1465 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "querier" "memberlist" true) | nindent 10 }}
1466 topologyKey: kubernetes.io/hostname
1467 preferredDuringSchedulingIgnoredDuringExecution:
1472 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "querier" "memberlist" true) | nindent 12 }}
1473 topologyKey: topology.kubernetes.io/zone
1474 # -- Pod Disruption Budget configuration
1475 podDisruptionBudget:
1476 # -- Enable PodDisruptionBudget for querier
1478 # -- Set unhealthyPodEvictionPolicy for the querier PodDisruptionBudget. Requires policy/v1.
1479 unhealthyPodEvictionPolicy: ""
1480 # -- Pod Disruption Budget maxUnavailable
1482 # -- Max Surge for querier pods
1485 # -- Maximum number of Pods that can be unavailable during the update process
1487 # -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
1489 # -- Node selector for querier pods
1491 # -- Tolerations for querier pods
1493 # -- Init containers for the querier pod
1495 # -- Containers to add to the querier pods
1497 # -- Additional ports to expose on the querier container.
1498 # Standard ports (http-metrics, http-memberlist) are always added automatically.
1500 # -- Extra volumes for querier pods
1501 extraVolumeMounts: []
1502 # -- Extra volumes for querier deployment
1506 # -- gRPC client configuration
1507 grpc_client_config: {}
1509 # -- Timeout for trace lookup requests
1512 # -- Timeout for search requests
1514 # -- This value controls the overall number of simultaneous subqueries that the querier will service at once. It does not distinguish between the types of queries.
1515 max_concurrent_queries: 20
1517 # -- Annotations for querier service
1519 # -- Traffic distribution for the querier service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
1520 trafficDistribution: null
1521 # -- Adds the appProtocol field to the querier service. This allows querier to work with istio protocol selection.
1523 # -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
1525# Configuration for the query-frontend
1528 # -- Required for grafana version <7.5 for compatibility with jaeger-ui. Doesn't work on ARM arch
1531 # -- The Docker registry for the tempo-query image. Overrides `tempo.image.registry`
1533 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1535 # -- Docker image repository for the tempo-query image. Overrides `tempo.image.repository`
1536 repository: grafana/tempo-query
1537 # -- Docker image tag for the tempo-query image. Overrides `tempo.image.tag`
1539 # -- Resource requests and limits for the query
1541 # -- Additional CLI args for tempo-query pods
1543 # -- Environment variables to add to the tempo-query pods
1545 # -- Environment variables from secrets or configmaps to add to the tempo-query pods
1547 # -- Extra volumes for tempo-query pods
1548 extraVolumeMounts: []
1549 # -- Extra volumes for tempo-query deployment
1552 backend: 127.0.0.1:3200
1553 # -- Number of replicas for the query-frontend
1555 # -- Annotations for the query-frontend Deployment
1557 # -- hostAliases to add
1562 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1565 # -- Maximum number of outstanding requests per tenant per frontend; requests beyond this error with HTTP 429.
1566 max_outstanding_per_tenant: 2000
1567 # -- Number of times to retry a request sent to a querier
1570 # -- The number of concurrent jobs to execute when searching the backend
1571 concurrent_jobs: 1000
1572 # -- The target number of bytes for each job to handle when performing a backend search
1573 target_bytes_per_job: 104857600
1574 # -- The maximum allowed value of spans per span set. 0 disables this limit.
1575 max_spans_per_span_set: 100
1576 # -- The maximum allowed value for the limit parameter on search requests. 0 disables this limit.
1577 # max_result_limit: 262144 maximum number of results returned by search requests
1578 # -- Trace by ID lookup configuration
1580 # -- The number of shards to split a trace by ID query into.
1583 # -- The number of concurrent jobs to execute when querying the backend.
1584 concurrent_jobs: 1000
1585 # -- The target number of bytes for each job to handle when querying the backend.
1586 target_bytes_per_job: 104857600
1587 # -- The maximum allowed time range for a metrics query.
1588 # 0 disables this limit.
1590 # -- query_backend_after controls where the query-frontend searches for traces.
1591 # Time ranges newer than query_backend_after will be searched in the live-stores only.
1592 # Time ranges older than query_backend_after will be searched in the backend/object storage only.
1593 query_backend_after: 15m
1594 # -- The target length of time for each job to handle when querying the backend.
1596 # -- If set to a non-zero value, it's value will be used to decide if query is within SLO or not.
1597 # Query is within SLO if it returned 200 within duration_slo seconds OR processed throughput_slo bytes/s data.
1598 # NOTE: `duration_slo` and `throughput_bytes_slo` both must be configured for it to work
1600 # -- If set to a non-zero value, it's value will be used to decide if query is within SLO or not.
1601 # Query is within SLO if it returned 200 within duration_slo seconds OR processed throughput_slo bytes/s data.
1602 throughput_bytes_slo: 0
1604 # -- Enable autoscaling for the query-frontend
1606 # -- Minimum autoscaling replicas for the query-frontend
1608 # -- Maximum autoscaling replicas for the query-frontend
1610 # -- Autoscaling behavior configuration for the query-frontend
1612 # -- Target CPU utilisation percentage for the query-frontend
1613 targetCPUUtilizationPercentage: 60
1614 # -- Target memory utilisation percentage for the query-frontend
1615 targetMemoryUtilizationPercentage:
1617 # -- The Docker registry for the query-frontend image. Overrides `tempo.image.registry`
1619 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1621 # -- Docker image repository for the query-frontend image. Overrides `tempo.image.repository`
1623 # -- Docker image tag for the query-frontend image. Overrides `tempo.image.tag`
1626 # -- Port of the query-frontend service
1628 # -- http Metrics port of the query-frontend service
1629 httpMetricsPort: 3200
1630 # -- gRPC Port of the query-frontend service
1632 # -- Annotations for queryFrontend service
1634 # -- Labels for queryFrontend service
1636 # -- Type of service for the queryFrontend
1638 # -- Traffic distribution for the queryFrontend service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
1639 trafficDistribution: null
1640 # -- If type is LoadBalancer you can assign the IP to the LoadBalancer
1642 # -- If type is LoadBalancer limit incoming traffic from IPs.
1643 loadBalancerSourceRanges: []
1645 # -- Annotations for queryFrontendDiscovery service
1647 # -- Labels for queryFrontendDiscovery service
1650 # -- Specifies whether an ingress for the Jaeger should be created
1652 # -- Ingress Class Name. MAY be required for Kubernetes versions >= 1.18
1653 # ingressClassName: nginx
1654 # -- Annotations for the Jaeger ingress
1656 # -- Hosts configuration for the Jaeger ingress
1658 - host: query.tempo.example.com
1661 # -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
1663 # -- TLS configuration for the Jaeger ingress
1665 - secretName: tempo-query-tls
1667 - query.tempo.example.com
1668 # -- Gateway API route configuration for the query-frontend (Jaeger UI).
1669 # Multiple routes can be added by adding a dictionary key like the 'main' route.
1672 # -- Specifies whether a Gateway API route for the query-frontend should be created
1674 # -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1beta1
1675 # If not set, the latest available version will be auto-detected
1677 # -- Set the route kind
1678 # Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute
1680 # -- Route annotations
1684 # -- Hostnames for the route
1686 # - query.tempo.example.com
1687 # -- Parent references (gateway to attach to)
1689 # - name: my-gateway
1690 # namespace: gateway-namespace
1691 # -- Matches define conditions for matching incoming requests
1696 # -- Timeouts define the timeouts that can be configured for an HTTP request.
1697 # Ref. https://gateway-api.sigs.k8s.io/api-types/httproute/#timeouts-optional
1699 # -- Filters define the filters that are applied to requests that match this rule.
1701 # -- Additional custom rules that can be added to the route
1703 # -- The name of the PriorityClass for query-frontend pods
1704 priorityClassName: null
1705 # -- Labels for queryFrontend pods
1707 # -- Annotations for query-frontend pods
1709 # -- Additional CLI args for the query-frontend
1711 # -- Environment variables to add to the query-frontend pods
1713 # -- Environment variables from secrets or configmaps to add to the query-frontend pods
1715 # -- Liveness probe for query-frontend pods. Deep-merged over `tempo.livenessProbe`.
1717 # -- Readiness probe for query-frontend pods. Deep-merged over `tempo.readinessProbe`.
1719 # -- Startup probe for query-frontend pods. Deep-merged over `tempo.startupProbe`.
1721 # -- Resource requests and limits for the query-frontend
1723 # -- Grace period to allow the query-frontend to shutdown before it is killed
1724 terminationGracePeriodSeconds: 30
1725 # -- topologySpread for query-frontend pods. Passed through `tpl` and, thus, to be configured as string
1726 # @default -- Defaults to allow skew no more then 1 node per AZ
1727 topologySpreadConstraints: |
1729 topologyKey: topology.kubernetes.io/zone
1730 whenUnsatisfiable: ScheduleAnyway
1733 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "query-frontend") | nindent 6 }}
1734 # -- Affinity for query-frontend pods. Passed through `tpl` and, thus, to be configured as string
1735 # @default -- Hard node and soft zone anti-affinity
1738 requiredDuringSchedulingIgnoredDuringExecution:
1741 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "query-frontend") | nindent 10 }}
1742 topologyKey: kubernetes.io/hostname
1743 preferredDuringSchedulingIgnoredDuringExecution:
1748 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "query-frontend") | nindent 12 }}
1749 topologyKey: topology.kubernetes.io/zone
1750 # -- Pod Disruption Budget configuration
1751 podDisruptionBudget:
1752 # -- Enable PodDisruptionBudget for query-frontend
1754 # -- Set unhealthyPodEvictionPolicy for the query-frontend PodDisruptionBudget. Requires policy/v1.
1755 unhealthyPodEvictionPolicy: ""
1756 # -- Pod Disruption Budget maxUnavailable
1758 # -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
1760 # -- Node selector for query-frontend pods
1762 # -- Tolerations for query-frontend pods
1764 # -- Init containers for the query-frontend pod
1766 # -- Containers to add to the query-frontend pods
1768 # -- Additional ports to expose on the query-frontend container.
1769 # The gRPC port is included by default. Standard ports (http-metrics, http-memberlist)
1770 # are always added automatically by the pod template.
1772 - containerPort: 9095
1775 # -- Extra volumes for query-frontend pods
1776 extraVolumeMounts: []
1777 # -- Extra volumes for query-frontend deployment
1779 # -- Adds the appProtocol field to the queryFrontend service. This allows queryFrontend to work with istio protocol selection.
1781 # -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
1784 # -- Enables Tempo MCP Server
1786# Configuration for the federation-frontend
1787# Can only be enabled if enterprise.enabled is true - requires license.
1788enterpriseFederationFrontend:
1789 # -- Specifies whether a federation-frontend should be deployed
1791 # -- Number of replicas for the federation-frontend
1793 # -- Annotations for the federation-frontend Deployment
1795 # -- hostAliases to add
1801 # - name: own-data-center
1802 # url: http://get/tempo
1803 # - name: grafana-cloud
1804 # url: https://tempo-us-central1.grafana.net/tempo
1806 # username: <instance-id>
1809 # -- Enable autoscaling for the federation-frontend
1811 # -- Minimum autoscaling replicas for the federation-frontend
1813 # -- Maximum autoscaling replicas for the federation-frontend
1815 # -- Target CPU utilisation percentage for the federation-frontend
1816 targetCPUUtilizationPercentage: 60
1817 # -- Target memory utilisation percentage for the federation-frontend
1818 targetMemoryUtilizationPercentage:
1820 # -- The Docker registry for the federation-frontend image. Overrides `tempo.image.registry`
1822 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1824 # -- Docker image repository for the federation-frontend image. Overrides `tempo.image.repository`
1826 # -- Docker image tag for the federation-frontend image. Overrides `tempo.image.tag`
1829 # -- Port of the federation-frontend service
1831 # -- Annotations for enterpriseFederationFrontend service
1833 # -- Type of service for the enterpriseFederationFrontend
1835 # -- If type is LoadBalancer you can assign the IP to the LoadBalancer
1837 # -- If type is LoadBalancer limit incoming traffic from IPs.
1838 loadBalancerSourceRanges: []
1839 # -- The name of the PriorityClass for federation-frontend pods
1840 priorityClassName: null
1841 # -- Labels for enterpriseFederationFrontend pods
1843 # -- Annotations for federation-frontend pods
1845 # -- Additional CLI args for the federation-frontend
1847 # -- Environment variables to add to the federation-frontend pods
1849 # -- Environment variables from secrets or configmaps to add to the federation-frontend pods
1851 # -- Resource requests and limits for the federation-frontend
1853 # -- Grace period to allow the federation-frontend to shutdown before it is killed
1854 terminationGracePeriodSeconds: 30
1855 # -- topologySpread for federation-frontend pods. Passed through `tpl` and, thus, to be configured as string
1856 # @default -- Defaults to allow skew no more then 1 node per AZ
1857 topologySpreadConstraints: |
1859 topologyKey: failure-domain.beta.kubernetes.io/zone
1860 whenUnsatisfiable: ScheduleAnyway
1863 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "federation-frontend") | nindent 6 }}
1864 # -- Affinity for federation-frontend pods. Passed through `tpl` and, thus, to be configured as string
1865 # @default -- Hard node and soft zone anti-affinity
1868 requiredDuringSchedulingIgnoredDuringExecution:
1871 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "federation-frontend") | nindent 10 }}
1872 topologyKey: kubernetes.io/hostname
1873 preferredDuringSchedulingIgnoredDuringExecution:
1878 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "federation-frontend") | nindent 12 }}
1879 topologyKey: failure-domain.beta.kubernetes.io/zone
1880 # -- Pod Disruption Budget configuration
1881 podDisruptionBudget:
1882 # -- Enable PodDisruptionBudget for enterprise-federation-frontend
1884 # -- Pod Disruption Budget maxUnavailable
1886 # -- Node selector for federation-frontend pods
1888 # -- Tolerations for federation-frontend pods
1890 # -- Extra volumes for federation-frontend pods
1891 extraVolumeMounts: []
1892 # -- Extra volumes for federation-frontend deployment
1894multitenancyEnabled: false
1896 # -- Enable rollout-operator. It must be enabled when using Zone Aware Replication.
1904 type: RuntimeDefault
1905 # Set the container security context
1907 readOnlyRootFilesystem: true
1910 allowPrivilegeEscalation: false
1914 # -- Enable Tempo to ingest Jaeger gRPC traces
1916 # -- Jaeger gRPC receiver config
1919 # -- Enable Tempo to ingest Jaeger Thrift Binary traces
1921 # -- Jaeger Thrift Binary receiver config
1924 # -- Enable Tempo to ingest Jaeger Thrift Compact traces
1926 # -- Jaeger Thrift Compact receiver config
1929 # -- Enable Tempo to ingest Jaeger Thrift HTTP traces
1931 # -- Jaeger Thrift HTTP receiver config
1934 # -- Enable Tempo to ingest Zipkin traces
1936 # -- Zipkin receiver config
1940 # -- Enable Tempo to ingest Open Telemetry HTTP traces
1942 # -- HTTP receiver advanced config
1945 # -- Enable Tempo to ingest Open Telemetry gRPC traces
1947 # -- gRPC receiver advanced config
1949 # -- Default OTLP gRPC port
1951 # -- Enable Tempo to ingest traces from Kafka. Reference: https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/kafkareceiver
1953# -- Memberlist configuration. Please refer to https://grafana.com/docs/tempo/latest/configuration/#memberlist
1956 cluster_label: "{{ .Release.Name }}.{{ .Release.Namespace }}"
1957 randomize_node_name: true
1958 stream_timeout: "10s"
1959 retransmit_factor: 2
1960 pull_push_interval: "30s"
1961 gossip_interval: "1s"
1963 gossip_to_dead_nodes_time: "30s"
1964 min_join_backoff: "1s"
1965 max_join_backoff: "1m"
1966 max_join_retries: 10
1967 abort_if_cluster_join_fails: false
1968 rejoin_interval: "0s"
1969 left_ingesters_timeout: "5m"
1973 packet_dial_timeout: "5s"
1974 packet_write_timeout: "5s"
1975# -- Config file contents for Tempo distributed. Passed through the `tpl` function to allow templating
1977# @default -- See values.yaml
1979 multitenancy_enabled: {{ .Values.multitenancyEnabled }}
1981 stream_over_http_enabled: {{ .Values.streamOverHTTPEnabled }}
1984 reporting_enabled: {{ .Values.reportingEnabled }}
1986 {{- if .Values.enterprise.enabled }}
1988 path: "/license/license.jwt"
2000 http_api_prefix: {{get .Values.tempo.structuredConfig "http_api_prefix"}}
2004 backend: {{.Values.storage.admin.backend}}
2005 {{- if eq .Values.storage.admin.backend "s3"}}
2007 {{- toYaml .Values.storage.admin.s3 | nindent 6}}
2009 {{- if eq .Values.storage.admin.backend "gcs"}}
2011 {{- toYaml .Values.storage.admin.gcs | nindent 6}}
2013 {{- if eq .Values.storage.admin.backend "azure"}}
2015 {{- toYaml .Values.storage.admin.azure | nindent 6}}
2017 {{- if eq .Values.storage.admin.backend "swift"}}
2019 {{- toYaml .Values.storage.admin.swift | nindent 6}}
2021 {{- if eq .Values.storage.admin.backend "filesystem"}}
2023 {{- toYaml .Values.storage.admin.filesystem | nindent 6}}
2027 {{- if and .Values.enterprise.enabled .Values.enterpriseGateway.useDefaultProxyURLs }}
2031 url: http://{{ template "tempo.fullname" . }}-admin-api.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2032 {{- if .Values.backendScheduler.enabled }}
2034 url: http://{{ template "tempo.fullname" . }}-backend-worker.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2037 url: http://{{ template "tempo.fullname" . }}-admin-api.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2039 url: http://{{ template "tempo.fullname" . }}-distributor.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2041 url: h2c://{{ template "tempo.fullname" . }}-distributor.{{ .Release.Namespace }}.svc:4317
2043 url: http://{{ template "tempo.fullname" . }}-distributor.{{ .Release.Namespace }}.svc:4318
2045 url: http://{{ template "tempo.fullname" . }}-querier.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2047 url: http://{{ template "tempo.fullname" . }}-query-frontend.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}{{get .Values.tempo.structuredConfig "http_api_prefix"}}
2049 {{- if and .Values.enterprise.enabled .Values.enterpriseGateway.proxy }}
2051 proxy: {{- toYaml .Values.enterpriseGateway.proxy | nindent 6 }}
2055 {{- if .Values.backendScheduler.enabled }}
2058 prune_age: {{ .Values.backendScheduler.config.work.prune_age }}
2059 dead_job_timeout: {{ .Values.backendScheduler.config.work.dead_job_timeout }}
2060 maintenance_interval: {{ .Values.backendScheduler.config.maintenance_interval }}
2061 backend_flush_interval: {{ .Values.backendScheduler.config.backend_flush_interval }}
2064 interval: {{ .Values.backendScheduler.config.provider.retention.interval }}
2067 block_retention: {{ .Values.backendScheduler.config.provider.compaction.compaction.block_retention }}
2068 compacted_block_retention: {{ .Values.backendScheduler.config.provider.compaction.compaction.compacted_block_retention }}
2069 compaction_cycle: {{ .Values.backendScheduler.config.provider.compaction.compaction.compaction_cycle }}
2070 compaction_window: {{ .Values.backendScheduler.config.provider.compaction.compaction.compaction_window }}
2071 max_block_bytes: {{ .Values.backendScheduler.config.provider.compaction.compaction.max_block_bytes }}
2072 max_compaction_objects: {{ .Values.backendScheduler.config.provider.compaction.compaction.max_compaction_objects }}
2073 max_time_per_tenant: {{ .Values.backendScheduler.config.provider.compaction.compaction.max_time_per_tenant }}
2074 retention_concurrency: {{ .Values.backendScheduler.config.provider.compaction.compaction.retention_concurrency }}
2075 max_jobs_per_tenant: {{ .Values.backendScheduler.config.provider.compaction.max_jobs_per_tenant }}
2076 min_input_blocks: {{ .Values.backendScheduler.config.provider.compaction.min_input_blocks }}
2077 max_input_blocks: {{ .Values.backendScheduler.config.provider.compaction.max_input_blocks }}
2078 max_compaction_level: {{ .Values.backendScheduler.config.provider.compaction.max_compaction_level }}
2079 min_cycle_interval: {{ .Values.backendScheduler.config.provider.compaction.min_cycle_interval }}
2080 job_timeout: {{ .Values.backendScheduler.config.job_timeout }}
2081 local_work_path: {{ .Values.backendScheduler.config.local_work_path }}
2083 {{- with .Values.backendWorker.config.backend_scheduler_client.grpc_client_config }}
2084 backend_scheduler_client:
2086 {{- toYaml . | nindent 6 }}
2090 backend_scheduler_addr: {{ include "tempo.resourceName" (dict "ctx" . "component" "backend-scheduler") }}:9095
2092 min_period: {{ .Values.backendWorker.config.backoff.min_period }}
2093 max_period: {{ .Values.backendWorker.config.backoff.max_period }}
2094 max_retries: {{ .Values.backendWorker.config.backoff.max_retries }}
2095 {{- $compaction_default := .Values.backendScheduler.config.provider.compaction.compaction }}
2096 {{- $worker_overrides := .Values.backendWorker.config.compaction }}
2097 {{- $compaction := mergeOverwrite (deepCopy $compaction_default) $worker_overrides }}
2099 {{- toYaml $compaction | nindent 6 }}
2100 finish_on_shutdown_timeout: {{ .Values.backendWorker.config.finish_on_shutdown_timeout }}
2105 {{- if .Values.blockBuilder.enabled }}
2107 partitions_per_instance: {{ .Values.blockBuilder.config.partitions_per_instance }}
2109 {{- if .Values.liveStore.enabled }}
2111 {{- with .Values.liveStore.config }}
2112 {{- toYaml . | nindent 4 }}
2115 {{- if and .Values.enterprise.enabled .Values.enterpriseFederationFrontend.enabled }}
2118 {{- toYaml .Values.enterpriseFederationFrontend.proxy_targets | nindent 6 }}
2120 {{- if .Values.metricsGenerator.enabled }}
2126 {{- toYaml .Values.metricsGenerator.config.processor | nindent 6 }}
2128 {{- toYaml .Values.metricsGenerator.config.storage | nindent 6 }}
2130 {{- toYaml .Values.metricsGenerator.config.registry | nindent 6 }}
2131 metrics_ingestion_time_range_slack: {{ .Values.metricsGenerator.config.metrics_ingestion_time_range_slack }}
2134 {{- if .Values.distributor.config.cost_attribution.enabled }}
2137 enabled: {{ .Values.distributor.config.cost_attribution.enabled }}
2138 max_cardinality: {{ .Values.distributor.config.cost_attribution.max_cardinality }}
2139 stale_duration: {{ .Values.distributor.config.cost_attribution.stale_duration }}
2145 {{- if or (.Values.traces.jaeger.thriftCompact.enabled) (.Values.traces.jaeger.thriftBinary.enabled) (.Values.traces.jaeger.thriftHttp.enabled) (.Values.traces.jaeger.grpc.enabled) }}
2148 {{- if .Values.traces.jaeger.thriftCompact.enabled }}
2150 {{- $mergedJaegerThriftCompactConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:6831") .Values.traces.jaeger.thriftCompact.receiverConfig }}
2151 {{- toYaml $mergedJaegerThriftCompactConfig | nindent 10 }}
2153 {{- if .Values.traces.jaeger.thriftBinary.enabled }}
2155 {{- $mergedJaegerThriftBinaryConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:6832") .Values.traces.jaeger.thriftBinary.receiverConfig }}
2156 {{- toYaml $mergedJaegerThriftBinaryConfig | nindent 10 }}
2158 {{- if .Values.traces.jaeger.thriftHttp.enabled }}
2160 {{- $mergedJaegerThriftHttpConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:14268") .Values.traces.jaeger.thriftHttp.receiverConfig }}
2161 {{- toYaml $mergedJaegerThriftHttpConfig | nindent 10 }}
2163 {{- if .Values.traces.jaeger.grpc.enabled }}
2165 {{- $mergedJaegerGrpcConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:14250") .Values.traces.jaeger.grpc.receiverConfig }}
2166 {{- toYaml $mergedJaegerGrpcConfig | nindent 10 }}
2169 {{- if .Values.traces.zipkin.enabled }}
2171 {{- $mergedZipkinReceiverConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:9411") .Values.traces.zipkin.receiverConfig }}
2172 {{- toYaml $mergedZipkinReceiverConfig | nindent 6 }}
2174 {{- if or (.Values.traces.otlp.http.enabled) (.Values.traces.otlp.grpc.enabled) }}
2177 {{- if .Values.traces.otlp.http.enabled }}
2179 {{- $mergedOtlpHttpReceiverConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:4318") .Values.traces.otlp.http.receiverConfig }}
2180 {{- toYaml $mergedOtlpHttpReceiverConfig | nindent 10 }}
2182 {{- if .Values.traces.otlp.grpc.enabled }}
2184 {{- $mergedOtlpGrpcReceiverConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:4317") .Values.traces.otlp.grpc.receiverConfig }}
2185 {{- toYaml $mergedOtlpGrpcReceiverConfig | nindent 10 }}
2188 {{- if .Values.traces.kafka }}
2190 {{- toYaml .Values.traces.kafka | nindent 6 }}
2192 {{- if .Values.distributor.config.log_discarded_spans.enabled }}
2193 log_discarded_spans:
2194 enabled: {{ .Values.distributor.config.log_discarded_spans.enabled }}
2195 include_all_attributes: {{ .Values.distributor.config.log_discarded_spans.include_all_attributes }}
2196 filter_by_status_error: {{ .Values.distributor.config.log_discarded_spans.filter_by_status_error }}
2198 {{- if or .Values.distributor.config.log_received_traces .Values.distributor.config.log_received_spans.enabled }}
2200 enabled: {{ or .Values.distributor.config.log_received_traces .Values.distributor.config.log_received_spans.enabled }}
2201 include_all_attributes: {{ .Values.distributor.config.log_received_spans.include_all_attributes }}
2202 filter_by_status_error: {{ .Values.distributor.config.log_received_spans.filter_by_status_error }}
2204 {{- if .Values.distributor.config.extend_writes }}
2205 extend_writes: {{ .Values.distributor.config.extend_writes }}
2207 {{- if not (eq .Values.distributor.config.max_attribute_bytes nil) }}
2208 max_attribute_bytes: {{ .Values.distributor.config.max_attribute_bytes }}
2212 frontend_address: {{ include "tempo.resourceName" (dict "ctx" . "component" "query-frontend-discovery") }}:9095
2213 {{- if .Values.querier.config.frontend_worker.grpc_client_config }}
2215 {{- toYaml .Values.querier.config.frontend_worker.grpc_client_config | nindent 6 }}
2218 query_timeout: {{ .Values.querier.config.trace_by_id.query_timeout }}
2220 query_timeout: {{ .Values.querier.config.search.query_timeout }}
2221 max_concurrent_queries: {{ .Values.querier.config.max_concurrent_queries }}
2223 {{- if not .Values.enterprise.enabled }}
2225 enabled: {{ .Values.queryFrontend.mcp_server.enabled }}
2227 max_outstanding_per_tenant: {{ .Values.queryFrontend.config.max_outstanding_per_tenant }}
2228 max_retries: {{ .Values.queryFrontend.config.max_retries }}
2230 target_bytes_per_job: {{ .Values.queryFrontend.config.search.target_bytes_per_job }}
2231 concurrent_jobs: {{ .Values.queryFrontend.config.search.concurrent_jobs }}
2232 max_spans_per_span_set: {{ .Values.queryFrontend.config.search.max_spans_per_span_set }}
2233 {{- with .Values.queryFrontend.config.search.max_result_limit }}
2234 max_result_limit: {{ . }}
2237 query_shards: {{ .Values.queryFrontend.config.trace_by_id.query_shards }}
2239 concurrent_jobs: {{ .Values.queryFrontend.config.metrics.concurrent_jobs }}
2240 target_bytes_per_job: {{ .Values.queryFrontend.config.metrics.target_bytes_per_job }}
2241 max_duration: {{ .Values.queryFrontend.config.metrics.max_duration }}
2242 query_backend_after: {{ .Values.queryFrontend.config.metrics.query_backend_after }}
2243 interval: {{ .Values.queryFrontend.config.metrics.interval }}
2244 duration_slo: {{ .Values.queryFrontend.config.metrics.duration_slo }}
2245 throughput_bytes_slo: {{ .Values.queryFrontend.config.metrics.throughput_bytes_slo }}
2246 {{- with .Values.ingest.kafka.address }}
2250 topic: {{ $.Values.ingest.kafka.topic }}
2251 auto_create_topic_enabled: {{ $.Values.ingest.kafka.auto_create_topic_enabled }}
2252 auto_create_topic_default_partitions: {{ $.Values.ingest.kafka.auto_create_topic_default_partitions }}
2254 SASL authentication. Tempo's Kafka client accepts a fixed set of
2255 sasl_mechanism values; anything else fails at startup. An empty mechanism
2256 means PLAIN, Tempo's default, which with no username/password leaves SASL
2257 disabled. sasl_mechanism is only rendered when set explicitly; the options
2258 that apply to the effective mechanism are rendered either way.
2260 {{- $sasl := $.Values.ingest.kafka.sasl | default dict }}
2261 {{- $mechanism := $sasl.mechanism | default "PLAIN" }}
2262 {{- $allowedMechanisms := list "PLAIN" "SCRAM-SHA-256" "SCRAM-SHA-512" "OAUTHBEARER" "AWS_MSK_IAM" }}
2263 {{- if not (has $mechanism $allowedMechanisms) }}
2264 {{- fail (printf "ingest.kafka.sasl.mechanism %q is invalid, must be one of: %s" $mechanism (join ", " $allowedMechanisms)) }}
2266 {{- $oauthbearer := $sasl.oauthbearer | default dict }}
2267 {{- $mskIam := $sasl.mskIam | default dict }}
2268 {{- /* Credentials for a mechanism other than the effective one would be silently ignored. */}}
2269 {{- $userPassMechanisms := list "PLAIN" "SCRAM-SHA-256" "SCRAM-SHA-512" }}
2270 {{- if and (not (has $mechanism $userPassMechanisms)) (or $sasl.existingSecret $sasl.username $sasl.password) }}
2271 {{- fail (printf "ingest.kafka.sasl.existingSecret/username/password only apply to PLAIN and SCRAM-SHA-*, but mechanism is %s" $mechanism) }}
2273 {{- if and (ne $mechanism "OAUTHBEARER") (or $oauthbearer.existingSecret $oauthbearer.token $oauthbearer.filePath $oauthbearer.httpSocketPath) }}
2274 {{- fail (printf "ingest.kafka.sasl.oauthbearer is configured, but mechanism is %s; set ingest.kafka.sasl.mechanism=OAUTHBEARER" $mechanism) }}
2276 {{- if and (ne $mechanism "AWS_MSK_IAM") (or $mskIam.existingSecret $mskIam.accessKey $mskIam.secretKey $mskIam.sessionToken $mskIam.filePath $mskIam.httpSocketPath) }}
2277 {{- fail (printf "ingest.kafka.sasl.mskIam is configured, but mechanism is %s; set ingest.kafka.sasl.mechanism=AWS_MSK_IAM" $mechanism) }}
2280 Mirror Tempo's startup validation so misconfigurations fail at install
2281 time instead of crash-looping: SCRAM-SHA-* needs credentials, PLAIN
2282 needs both or neither of username/password (neither disables SASL), and
2283 OAUTHBEARER/AWS_MSK_IAM need exactly one credential source. An
2284 existingSecret counts as the static credential source.
2286 {{- if or (eq $mechanism "PLAIN") (eq $mechanism "SCRAM-SHA-256") (eq $mechanism "SCRAM-SHA-512") }}
2287 {{- if not $sasl.existingSecret }}
2288 {{- if or (and $sasl.username (not $sasl.password)) (and $sasl.password (not $sasl.username)) }}
2289 {{- fail "ingest.kafka.sasl: username and password must both be set" }}
2291 {{- if and (ne $mechanism "PLAIN") (not $sasl.username) }}
2292 {{- fail (printf "ingest.kafka.sasl.mechanism %s requires credentials: set ingest.kafka.sasl.existingSecret or username/password" $mechanism) }}
2295 {{- else if eq $mechanism "OAUTHBEARER" }}
2296 {{- $sources := list }}
2297 {{- if or $oauthbearer.existingSecret $oauthbearer.token }}{{ $sources = append $sources "existingSecret/token" }}{{ end }}
2298 {{- if $oauthbearer.filePath }}{{ $sources = append $sources "filePath" }}{{ end }}
2299 {{- if $oauthbearer.httpSocketPath }}{{ $sources = append $sources "httpSocketPath" }}{{ end }}
2300 {{- if ne (len $sources) 1 }}
2301 {{- fail (printf "ingest.kafka.sasl.oauthbearer: exactly one of existingSecret/token, filePath or httpSocketPath must be set (got: %s)" (join ", " $sources | default "none")) }}
2303 {{- else if eq $mechanism "AWS_MSK_IAM" }}
2304 {{- if and (not $mskIam.existingSecret) (or (and $mskIam.accessKey (not $mskIam.secretKey)) (and $mskIam.secretKey (not $mskIam.accessKey))) }}
2305 {{- fail "ingest.kafka.sasl.mskIam: accessKey and secretKey must both be set" }}
2307 {{- $sources := list }}
2308 {{- if or $mskIam.existingSecret $mskIam.accessKey }}{{ $sources = append $sources "existingSecret/accessKey+secretKey" }}{{ end }}
2309 {{- if $mskIam.filePath }}{{ $sources = append $sources "filePath" }}{{ end }}
2310 {{- if $mskIam.httpSocketPath }}{{ $sources = append $sources "httpSocketPath" }}{{ end }}
2311 {{- if ne (len $sources) 1 }}
2312 {{- fail (printf "ingest.kafka.sasl.mskIam: exactly one of existingSecret/accessKey+secretKey, filePath or httpSocketPath must be set (got: %s)%s" (join ", " $sources | default "none") (empty $sources | ternary ". Tempo does not use the AWS default credential chain (e.g. IRSA)." "")) }}
2316 Credentials are inlined into tempo.yaml only when no existingSecret is
2317 configured for the active mechanism; in that case the value ends up in
2318 plaintext in the rendered ConfigMap/Secret, so require
2319 configStorageType=Secret as a safety net. When existingSecret is set,
2320 the credential is injected from the Secret via secretKeyRef on the pod
2321 spec and passed to tempo as a CLI flag (see tempo.podTemplate), so
2322 nothing is rendered here and configStorageType can remain ConfigMap.
2324 {{- $inlinesCredential := false }}
2325 {{- if or (eq $mechanism "PLAIN") (eq $mechanism "SCRAM-SHA-256") (eq $mechanism "SCRAM-SHA-512") }}
2326 {{- if and (not $sasl.existingSecret) (or $sasl.username $sasl.password) }}
2327 {{- $inlinesCredential = true }}
2329 {{- else if eq $mechanism "OAUTHBEARER" }}
2330 {{- if and (not $oauthbearer.existingSecret) $oauthbearer.token }}
2331 {{- $inlinesCredential = true }}
2333 {{- else if eq $mechanism "AWS_MSK_IAM" }}
2334 {{- if and (not $mskIam.existingSecret) (or $mskIam.accessKey $mskIam.secretKey) }}
2335 {{- $inlinesCredential = true }}
2338 {{- if and $inlinesCredential (not (eq $.Values.configStorageType "Secret")) }}
2339 {{- fail "ingest.kafka.sasl is configuring credentials directly (not via existingSecret), but configStorageType is not Secret. Either set ingest.kafka.sasl.existingSecret (recommended) or set configStorageType=Secret." }}
2341 {{- with $sasl.mechanism }}
2342 sasl_mechanism: {{ . }}
2344 {{- if or (eq $mechanism "PLAIN") (eq $mechanism "SCRAM-SHA-256") (eq $mechanism "SCRAM-SHA-512") }}
2345 {{- if not $sasl.existingSecret }}
2346 {{- with $sasl.username }}
2347 sasl_username: {{ . | quote }}
2349 {{- with $sasl.password }}
2350 sasl_password: {{ . | quote }}
2353 {{- else if eq $mechanism "OAUTHBEARER" }}
2354 {{- with $oauthbearer }}
2355 {{- if not .existingSecret }}
2357 sasl_oauthbearer_token: {{ . | quote }}
2361 sasl_oauthbearer_zid: {{ . | quote }}
2363 {{- with .extensions }}
2364 sasl_oauthbearer_extensions:
2365 {{- toYaml . | nindent 8 }}
2367 {{- with .filePath }}
2368 sasl_oauthbearer_file_path: {{ . | quote }}
2370 {{- with .httpSocketPath }}
2371 sasl_oauthbearer_http_socket_path: {{ . | quote }}
2373 {{- with .httpSocketTimeout }}
2374 sasl_oauthbearer_http_socket_timeout: {{ . }}
2377 {{- else if eq $mechanism "AWS_MSK_IAM" }}
2379 {{- if not .existingSecret }}
2380 {{- with .accessKey }}
2381 sasl_msk_iam_access_key: {{ . | quote }}
2383 {{- with .secretKey }}
2384 sasl_msk_iam_secret_key: {{ . | quote }}
2386 {{- with .sessionToken }}
2387 sasl_msk_iam_session_token: {{ . | quote }}
2390 {{- with .userAgent }}
2391 sasl_msk_iam_user_agent: {{ . | quote }}
2393 {{- with .filePath }}
2394 sasl_msk_iam_file_path: {{ . | quote }}
2396 {{- with .httpSocketPath }}
2397 sasl_msk_iam_http_socket_path: {{ . | quote }}
2399 {{- with .httpSocketTimeout }}
2400 sasl_msk_iam_http_socket_timeout: {{ . }}
2404 {{- /* TLS is independent of the SASL mechanism and can be combined with any of them. */}}
2405 {{- with $.Values.ingest.kafka.tls }}
2408 {{- with .certPath }}
2409 tls_cert_path: {{ . | quote }}
2411 {{- with .keyPath }}
2412 tls_key_path: {{ . | quote }}
2415 tls_ca_path: {{ . | quote }}
2417 {{- with .serverName }}
2418 tls_server_name: {{ . | quote }}
2420 {{- with .minVersion }}
2421 tls_min_version: {{ . }}
2423 {{- if .insecureSkipVerify }}
2424 tls_insecure_skip_verify: true
2430 {{- with .Values.memberlist }}
2431 {{- toYaml . | nindent 2 }}
2434 - dns+{{ include "tempo.fullname" . }}-gossip-ring:{{ .Values.memberlist.bind_port }}
2436 {{- toYaml .Values.overrides | nindent 2 }}
2438 http_listen_port: {{ .Values.server.httpListenPort }}
2439 log_level: {{ .Values.server.logLevel }}
2440 log_format: {{ .Values.server.logFormat }}
2441 grpc_server_max_recv_msg_size: {{ .Values.server.grpc_server_max_recv_msg_size }}
2442 grpc_server_max_send_msg_size: {{ .Values.server.grpc_server_max_send_msg_size }}
2443 http_server_read_timeout: {{ .Values.server.http_server_read_timeout }}
2444 http_server_write_timeout: {{ .Values.server.http_server_write_timeout }}
2446 {{- include "tempo.cacheConfig" . | nindent 2}}
2449 {{- if .Values.storage.trace.block.version }}
2451 version: {{.Values.storage.trace.block.version}}
2452 {{- if .Values.storage.trace.block.dedicated_columns}}
2453 parquet_dedicated_columns:
2454 {{ .Values.storage.trace.block.dedicated_columns | toYaml | nindent 8}}
2458 max_workers: {{ .Values.storage.trace.pool.max_workers }}
2459 queue_depth: {{ .Values.storage.trace.pool.queue_depth }}
2460 backend: {{.Values.storage.trace.backend}}
2461 {{- if eq .Values.storage.trace.backend "s3"}}
2463 {{- toYaml .Values.storage.trace.s3 | nindent 6}}
2465 {{- if eq .Values.storage.trace.backend "gcs"}}
2467 {{- toYaml .Values.storage.trace.gcs | nindent 6}}
2469 {{- if eq .Values.storage.trace.backend "azure"}}
2471 {{- toYaml .Values.storage.trace.azure | nindent 6}}
2475 path: /var/tempo/traces
2477 path: /var/tempo/wal
2479 {{- toYaml .Values.storage.trace.search | nindent 6}}
2481 {{- if .Values.storage.trace.blocklist_poll }}
2482 blocklist_poll: {{ .Values.storage.trace.blocklist_poll }}
2484 {{- if .Values.storage.trace.blocklist_poll_concurrency }}
2485 blocklist_poll_concurrency: {{ .Values.storage.trace.blocklist_poll_concurrency }}
2487 {{- if .Values.storage.trace.blocklist_poll_fallback }}
2488 blocklist_poll_fallback: {{ .Values.storage.trace.blocklist_poll_fallback }}
2490 {{- if .Values.storage.trace.blocklist_poll_tenant_index_builders }}
2491 blocklist_poll_tenant_index_builders: {{ .Values.storage.trace.blocklist_poll_tenant_index_builders }}
2493 {{- if .Values.storage.trace.blocklist_poll_stale_tenant_index }}
2494 blocklist_poll_stale_tenant_index: {{ .Values.storage.trace.blocklist_poll_stale_tenant_index }}
2496 {{- if .Values.storage.trace.empty_tenant_deletion_age }}
2497 empty_tenant_deletion_age: {{ .Values.storage.trace.empty_tenant_deletion_age }}
2499 {{- if .Values.storage.trace.empty_tenant_deletion_enabled }}
2500 empty_tenant_deletion_enabled: {{ .Values.storage.trace.empty_tenant_deletion_enabled }}
2502# Set Tempo server configuration
2503# Refers to https://grafana.com/docs/tempo/latest/configuration/#server
2505 # -- HTTP server listen host
2506 httpListenPort: 3200
2507 # -- Log level. Can be set to debug, info (default), warn, error
2509 # -- Log format. Can be set to logfmt (default) or json.
2511 # -- Max gRPC message size that can be received
2512 grpc_server_max_recv_msg_size: 4194304
2513 # -- Max gRPC message size that can be sent
2514 grpc_server_max_send_msg_size: 4194304
2515 # -- Read timeout for HTTP server
2516 http_server_read_timeout: 30s
2517 # -- Write timeout for HTTP server
2518 http_server_write_timeout: 30s
2519# Use this block to configure caches available throughout the application.
2520# Multiple caches can be created and assigned roles which determine how they are used by Tempo.
2521# https://grafana.com/docs/tempo/latest/configuration/#cache
2522# When memcached.enabled is true (the default), the cache.caches list is auto-generated from the
2523# memcached and per-role memcached sections (memcachedBloom, memcachedParquetFooter, memcachedFrontendSearch).
2524# When memcached.enabled is false, this block is passed through verbatim to allow configuring external caches.
2528 host: '{{ include "tempo.fullname" . }}-memcached'
2529 service: memcached-client
2530 consistent_hash: true
2536# To configure a different storage backend instead of local storage:
2542# storage_account_name:
2543# storage_account_key:
2546 # Settings for the block storage backend and buckets.
2548 # -- The supported block versions are specified here https://grafana.com/docs/tempo/latest/configuration/parquet/
2550 # -- Lis with dedicated attribute columns (only for vParquet3 or later)
2551 dedicated_columns: []
2552 # -- The supported storage backends are gcs, s3 and azure, as specified in https://grafana.com/docs/tempo/latest/configuration/#storage
2554 # The worker pool is used primarily when finding traces by id, but is also used by others.
2556 # -- Total number of workers pulling jobs from the queue
2558 # -- Length of job queue. imporatant for querier as it queues a job for every block it has to search
2560 # The supported search are specified here https://grafana.com/docs/tempo/latest/configuration/#search-config
2562 # -- Number of traces to prefetch while scanning blocks. Increasing this value can improve trace search performance at the cost of memory.
2563 prefetch_trace_count: 1000
2564 # -- How often to repoll the backend for new blocks
2566 # -- Number of blocks to process in parallel during polling.
2567 blocklist_poll_concurrency: null
2568 # -- By default components will pull the blocklist from the tenant index. If that fails the component can
2569 # -- fallback to scanning the entire bucket. Set to false to disable this behavior.
2570 blocklist_poll_fallback: null
2571 # -- Maximum number of compactors that should build the tenant index. All other components will download the index.
2572 blocklist_poll_tenant_index_builders: null
2573 # -- The oldest allowable tenant index.
2574 blocklist_poll_stale_tenant_index: null
2575 # -- How fast the poller will delete a tenant if it is empty. Will need to be enabled in 'empty_tenant_deletion_enabled'.
2576 empty_tenant_deletion_age: null
2577 # -- Delete empty tenants.
2578 empty_tenant_deletion_enabled: null
2579 # Settings for the Admin client storage backend and buckets. Only valid is enterprise.enabled is true
2581 # -- The supported storage backends are gcs, s3 and azure, as specified in https://grafana.com/docs/enterprise-traces/latest/configure/reference/#admin_client_config
2583# -- The standard overrides configuration section. This can include a `defaults` object for applying to all tenants (not to be confused with the `global` property of the same name, which overrides `max_byte_per_trace` for all tenants). For an example on how to enable the metrics generator using the `overrides` object, see the 'Activate metrics generator' section below. Refer to [Standard overrides](https://grafana.com/docs/tempo/latest/configuration/#standard-overrides) for more details.
2585 # -- default config values for all tenants, can be overridden by per-tenant overrides. If a tenant's specific overrides are not found in the `per_tenant_overrides` block, the values in this `default` block will be used. Configs inside this block should follow the new overrides indentation format
2587 # -- Path to the per tenant override config file. The values of the `per_tenant_overrides` config below will be written to the default path which is `/runtime-config/overrides.yaml`. Users can set tenant-specific overrides settings in a separate file and point per_tenant_override_config to it if not using the per_tenant_overrides block below.
2588 per_tenant_override_config: /runtime-config/overrides.yaml
2589# -- The `per tenant` runtime overrides in place of the `per_tenant_override_config` file for Tempo (see `overrides` and the `per_tenant_override_config` property). This allows overriding the configs like `ingestion` and `global` values on a per-tenant basis. Note that *all* values must be given for each per-tenant configuration block. Refer to [Runtime overrides](https://grafana.com/docs/tempo/latest/configuration/#runtime-overrides) documentation for more details.
2590per_tenant_overrides:
2597# memcached is for all of the Tempo pieces to coordinate with each other.
2598# you can use your own self deployed memcached by setting `memcached.enabled` to false and `memcached.host` + `memcached.service`
2600 # -- Specified whether the memcached cachce should be enabled
2603 # -- The Docker registry for the Memcached image. Overrides `global.image.registry`
2605 # -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
2607 # -- Memcached Docker image repository
2608 repository: chainguard-private/memcached-fips
2609 # -- Memcached Docker image tag
2610 tag: 1.6.45-r5@sha256:775840a3e97eade858a7c64a6159f4c8c8bbe7e1891787e19d0d8cb2210333ed
2611 # -- Memcached Docker image pull policy
2612 pullPolicy: IfNotPresent
2614 # Number of replicas for memchached
2616 # -- Timeout for cache operations
2618 # -- Enable consistent hashing for cache
2619 consistentHash: true
2620 # -- Additional CLI args for memcached
2622 # -- Toleration for memcached pods
2624 # -- Environment variables to add to memcached pods
2626 # -- Environment variables from secrets or configmaps to add to memcached pods
2628 # -- Labels for memcached pods
2630 # -- Annotations for memcached pods
2632 # -- Resource requests and limits for memcached
2634 # -- topologySpread for memcached pods. Passed through `tpl` and, thus, to be configured as string
2635 # @default -- Defaults to allow skew no more than 1 node per AZ
2636 topologySpreadConstraints: |
2638 topologyKey: topology.kubernetes.io/zone
2639 whenUnsatisfiable: ScheduleAnyway
2642 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached") | nindent 6 }}
2643 # -- Affinity for memcached pods. Passed through `tpl` and, thus, to be configured as string
2644 # @default -- Hard node and soft zone anti-affinity
2647 requiredDuringSchedulingIgnoredDuringExecution:
2650 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached") | nindent 10 }}
2651 topologyKey: kubernetes.io/hostname
2652 preferredDuringSchedulingIgnoredDuringExecution:
2657 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached") | nindent 12 }}
2658 topologyKey: topology.kubernetes.io/zone
2659 # -- Pod Disruption Budget configuration
2660 podDisruptionBudget:
2661 # -- Enable PodDisruptionBudget for memcached
2663 # -- Set unhealthyPodEvictionPolicy for the memcached PodDisruptionBudget. Requires policy/v1.
2664 unhealthyPodEvictionPolicy: ""
2665 # -- Pod Disruption Budget maxUnavailable
2667 # -- Init containers for the memcached pod
2669 # -- Containers to add to the memcached pods
2671 # -- Extra volumes for memcached pods
2672 extraVolumeMounts: []
2673 # -- Extra volumes for memcached statefulSet
2676 # -- Annotations for memcached service
2678 # -- configuration for readiness probe for memcached statefulset
2682 initialDelaySeconds: 5
2687 # -- configuration for liveness probe for memcached statefulset
2689 initialDelaySeconds: 30
2695 # -- Specifies whether the Memcached Exporter should be enabled
2697 # -- hostAliases to add
2703 # -- The Docker registry for the Memcached Exporter image. Overrides `global.image.registry`
2705 # -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
2707 # -- Memcached Exporter Docker image repository
2708 repository: prom/memcached-exporter
2709 # -- Memcached Exporter Docker image tag
2711 # -- Memcached Exporter Docker image pull policy
2712 pullPolicy: IfNotPresent
2713 # -- Memcached Exporter resource requests and limits
2715 # -- Additional CLI args for the memcached exporter
2717# -- Configuration for a dedicated memcached cluster for the bloom cache role.
2718# When enabled, bloom cache is served by its own memcached StatefulSet.
2719# Image is shared with the main `memcached` section.
2721 # -- Enable a dedicated memcached cluster for the bloom cache role
2723 # -- Annotations for the memcached-bloom StatefulSet
2725 # -- Number of replicas for the bloom memcached StatefulSet
2727 # -- Timeout for bloom cache operations
2729 # -- Enable consistent hashing for bloom cache
2730 consistentHash: true
2731 # -- Additional CLI args for memcached
2733 # -- Tolerations for memcached-bloom pods
2735 # -- Environment variables to add to memcached-bloom pods
2737 # -- Environment variables from secrets or configmaps to add to memcached-bloom pods
2739 # -- Labels for memcached-bloom pods
2741 # -- Annotations for memcached-bloom pods
2743 # -- Resource requests and limits for memcached-bloom
2745 # -- topologySpread for memcached-bloom pods. Passed through `tpl` and, thus, to be configured as string
2746 # @default -- Defaults to allow skew no more than 1 node per AZ
2747 topologySpreadConstraints: |
2749 topologyKey: topology.kubernetes.io/zone
2750 whenUnsatisfiable: ScheduleAnyway
2753 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-bloom") | nindent 6 }}
2754 # -- Affinity for memcached-bloom pods. Passed through `tpl` and, thus, to be configured as string
2755 # @default -- Hard node and soft zone anti-affinity
2758 requiredDuringSchedulingIgnoredDuringExecution:
2761 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-bloom") | nindent 10 }}
2762 topologyKey: kubernetes.io/hostname
2763 preferredDuringSchedulingIgnoredDuringExecution:
2768 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-bloom") | nindent 12 }}
2769 topologyKey: topology.kubernetes.io/zone
2770 # -- Pod Disruption Budget configuration
2771 podDisruptionBudget:
2772 # -- Enable PodDisruptionBudget for memcached-bloom
2774 # -- Pod Disruption Budget maxUnavailable
2776 # -- Init containers for the memcached-bloom pod
2778 # -- Containers to add to the memcached-bloom pods
2780 # -- Extra volume mounts for memcached-bloom pods
2781 extraVolumeMounts: []
2782 # -- Extra volumes for memcached-bloom StatefulSet
2785 # -- Annotations for memcached-bloom service
2787 # -- configuration for readiness probe for memcached-bloom statefulset
2791 initialDelaySeconds: 5
2796 # -- configuration for liveness probe for memcached-bloom statefulset
2798 initialDelaySeconds: 30
2803# -- Configuration for a dedicated memcached cluster for the parquet-footer cache role.
2804# When enabled, parquet-footer cache is served by its own memcached StatefulSet.
2805# Image is shared with the main `memcached` section.
2806memcachedParquetFooter:
2807 # -- Enable a dedicated memcached cluster for the parquet-footer cache role
2809 # -- Annotations for the memcached-parquet-footer StatefulSet
2811 # -- Number of replicas for the parquet-footer memcached StatefulSet
2813 # -- Timeout for parquet-footer cache operations
2815 # -- Enable consistent hashing for parquet-footer cache
2816 consistentHash: true
2817 # -- Additional CLI args for memcached
2819 # -- Tolerations for memcached-parquet-footer pods
2821 # -- Environment variables to add to memcached-parquet-footer pods
2823 # -- Environment variables from secrets or configmaps to add to memcached-parquet-footer pods
2825 # -- Labels for memcached-parquet-footer pods
2827 # -- Annotations for memcached-parquet-footer pods
2829 # -- Resource requests and limits for memcached-parquet-footer
2831 # -- topologySpread for memcached-parquet-footer pods. Passed through `tpl` and, thus, to be configured as string
2832 # @default -- Defaults to allow skew no more than 1 node per AZ
2833 topologySpreadConstraints: |
2835 topologyKey: topology.kubernetes.io/zone
2836 whenUnsatisfiable: ScheduleAnyway
2839 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-parquet-footer") | nindent 6 }}
2840 # -- Affinity for memcached-parquet-footer pods. Passed through `tpl` and, thus, to be configured as string
2841 # @default -- Hard node and soft zone anti-affinity
2844 requiredDuringSchedulingIgnoredDuringExecution:
2847 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-parquet-footer") | nindent 10 }}
2848 topologyKey: kubernetes.io/hostname
2849 preferredDuringSchedulingIgnoredDuringExecution:
2854 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-parquet-footer") | nindent 12 }}
2855 topologyKey: topology.kubernetes.io/zone
2856 # -- Pod Disruption Budget configuration
2857 podDisruptionBudget:
2858 # -- Enable PodDisruptionBudget for memcached-parquet-footer
2860 # -- Pod Disruption Budget maxUnavailable
2862 # -- Init containers for the memcached-parquet-footer pod
2864 # -- Containers to add to the memcached-parquet-footer pods
2866 # -- Extra volume mounts for memcached-parquet-footer pods
2867 extraVolumeMounts: []
2868 # -- Extra volumes for memcached-parquet-footer StatefulSet
2871 # -- Annotations for memcached-parquet-footer service
2873 # -- configuration for readiness probe for memcached-parquet-footer statefulset
2877 initialDelaySeconds: 5
2882 # -- configuration for liveness probe for memcached-parquet-footer statefulset
2884 initialDelaySeconds: 30
2889# -- Configuration for a dedicated memcached cluster for the frontend-search cache role.
2890# When enabled, frontend-search cache is served by its own memcached StatefulSet.
2891# Image is shared with the main `memcached` section.
2892memcachedFrontendSearch:
2893 # -- Enable a dedicated memcached cluster for the frontend-search cache role
2895 # -- Annotations for the memcached-frontend-search StatefulSet
2897 # -- Number of replicas for the frontend-search memcached StatefulSet
2899 # -- Timeout for frontend-search cache operations
2901 # -- Enable consistent hashing for frontend-search cache
2902 consistentHash: true
2903 # -- Additional CLI args for memcached
2905 # -- Tolerations for memcached-frontend-search pods
2907 # -- Environment variables to add to memcached-frontend-search pods
2909 # -- Environment variables from secrets or configmaps to add to memcached-frontend-search pods
2911 # -- Labels for memcached-frontend-search pods
2913 # -- Annotations for memcached-frontend-search pods
2915 # -- Resource requests and limits for memcached-frontend-search
2917 # -- topologySpread for memcached-frontend-search pods. Passed through `tpl` and, thus, to be configured as string
2918 # @default -- Defaults to allow skew no more than 1 node per AZ
2919 topologySpreadConstraints: |
2921 topologyKey: topology.kubernetes.io/zone
2922 whenUnsatisfiable: ScheduleAnyway
2925 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-frontend-search") | nindent 6 }}
2926 # -- Affinity for memcached-frontend-search pods. Passed through `tpl` and, thus, to be configured as string
2927 # @default -- Hard node and soft zone anti-affinity
2930 requiredDuringSchedulingIgnoredDuringExecution:
2933 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-frontend-search") | nindent 10 }}
2934 topologyKey: kubernetes.io/hostname
2935 preferredDuringSchedulingIgnoredDuringExecution:
2940 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-frontend-search") | nindent 12 }}
2941 topologyKey: topology.kubernetes.io/zone
2942 # -- Pod Disruption Budget configuration
2943 podDisruptionBudget:
2944 # -- Enable PodDisruptionBudget for memcached-frontend-search
2946 # -- Pod Disruption Budget maxUnavailable
2948 # -- Init containers for the memcached-frontend-search pod
2950 # -- Containers to add to the memcached-frontend-search pods
2952 # -- Extra volume mounts for memcached-frontend-search pods
2953 extraVolumeMounts: []
2954 # -- Extra volumes for memcached-frontend-search StatefulSet
2957 # -- Annotations for memcached-frontend-search service
2959 # -- configuration for readiness probe for memcached-frontend-search statefulset
2963 initialDelaySeconds: 5
2968 # -- configuration for liveness probe for memcached-frontend-search statefulset
2970 initialDelaySeconds: 30
2976 # ServiceMonitor configuration
2978 # -- If enabled, ServiceMonitor resources for Prometheus Operator are created
2980 # -- Alternative namespace for ServiceMonitor resources
2982 # -- Namespace selector for ServiceMonitor resources
2983 namespaceSelector: {}
2984 # -- ServiceMonitor annotations
2986 # -- Additional ServiceMonitor labels
2988 # -- ServiceMonitor scrape interval
2990 # -- ServiceMonitor scrape timeout in Go duration format (e.g. 15s)
2992 # -- ServiceMonitor relabel configs to apply to samples before scraping
2993 # https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#relabelconfig
2995 # -- ServiceMonitor metric relabel configs to apply to samples before ingestion
2996 # https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#endpoint
2997 metricRelabelings: []
2998 # -- ServiceMonitor will use http by default, but you can pick https as well
3000 # -- ServiceMonitor will use these tlsConfig settings to make the health check requests
3002 # metaMonitoringAgent configures the built in Grafana Agent that can scrape metrics and logs and send them to a local or remote destination
3004 # -- Controls whether to create PodLogs, MetricsInstance, LogsInstance, and GrafanaAgent CRs to scrape the
3005 # ServiceMonitors of the chart and ship metrics and logs to the remote endpoints below.
3006 # Note that you need to configure serviceMonitor in order to have some metrics available.
3008 # -- Controls whether to install the Grafana Agent Operator and its CRDs.
3009 # Note that helm will not install CRDs if this flag is enabled during an upgrade.
3010 # In that case install the CRDs manually from https://github.com/grafana/agent/tree/main/production/operator/crds
3011 installOperator: false
3013 # -- Default destination for logs. The config here is translated to Promtail client
3014 # configuration to write logs to this Loki-compatible remote. Optional.
3016 # -- Full URL for Loki push endpoint. Usually ends in /loki/api/v1/push
3019 # -- Used to set X-Scope-OrgID header on requests. Usually not used in combination with username and password.
3021 # -- Basic authentication username. Optional.
3023 # -- The value under key passwordSecretKey in this secret will be used as the basic authentication password. Required only if passwordSecretKey is set.
3024 passwordSecretName: ''
3025 # -- The value under this key in passwordSecretName will be used as the basic authentication password. Required only if passwordSecretName is set.
3026 passwordSecretKey: ''
3027 # -- Client configurations for the LogsInstance that will scrape Mimir pods. Follows the format of .remote.
3028 additionalClientConfigs: []
3030 # -- Default destination for metrics. The config here is translated to remote_write
3031 # configuration to push metrics to this Prometheus-compatible remote. Optional.
3032 # Note that you need to configure serviceMonitor in order to have some metrics available.
3034 # -- Full URL for Prometheus remote-write. Usually ends in /push
3036 # -- Used to add HTTP headers to remote-write requests.
3039 # -- Basic authentication username. Optional.
3041 # -- The value under key passwordSecretKey in this secret will be used as the basic authentication password. Required only if passwordSecretKey is set.
3042 passwordSecretName: ''
3043 # -- The value under this key in passwordSecretName will be used as the basic authentication password. Required only if passwordSecretName is set.
3044 passwordSecretKey: ''
3045 # -- Additional remote-write for the MetricsInstance that will scrape Mimir pods. Follows the format of .remote.
3046 additionalRemoteWriteConfigs: []
3048 # -- When grafanaAgent.enabled and serviceMonitor.enabled, controls whether to create ServiceMonitors CRs
3049 # for cadvisor, kubelet, and kube-state-metrics. The scraped metrics are reduced to those pertaining to
3052 # -- Controls service discovery of kube-state-metrics.
3054 namespace: kube-system
3056 app.kubernetes.io/name: kube-state-metrics
3057 # -- Sets the namespace of the resources. Leave empty or unset to use the same namespace as the Helm release.
3059 # -- Labels to add to all monitoring.grafana.com custom resources.
3060 # Does not affect the ServiceMonitors for kubernetes metrics; use serviceMonitor.labels for that.
3062 # -- Annotations to add to all monitoring.grafana.com custom resources.
3063 # Does not affect the ServiceMonitors for kubernetes metrics; use serviceMonitor.annotations for that.
3065# Rules for the Prometheus Operator
3067 # -- If enabled, a PrometheusRule resource for Prometheus Operator is created
3069 # -- Alternative namespace for the PrometheusRule resource
3071 # -- PrometheusRule annotations
3073 # -- Additional PrometheusRule labels
3075 # -- Contents of Prometheus rules file
3077 # - name: loki-rules
3079 # - record: job:loki_request_duration_seconds_bucket:sum_rate
3080 # expr: sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, job)
3081 # - record: job_route:loki_request_duration_seconds_bucket:sum_rate
3082 # expr: sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, job, route)
3083 # - record: node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate
3084 # expr: sum(rate(container_cpu_usage_seconds_total[1m])) by (node, namespace, pod, container)
3085# Configuration for the gateway
3087 # -- Specifies whether the gateway should be enabled
3089 # -- Number of replicas for the gateway
3091 # -- hostAliases to add
3097 # -- Enable autoscaling for the gateway
3099 # -- Minimum autoscaling replicas for the gateway
3101 # -- Maximum autoscaling replicas for the gateway
3103 # -- Autoscaling behavior configuration for the gateway
3105 # -- Target CPU utilisation percentage for the gateway
3106 targetCPUUtilizationPercentage: 60
3107 # -- Target memory utilisation percentage for the gateway
3108 targetMemoryUtilizationPercentage:
3109 # -- Enable logging of 2xx and 3xx HTTP requests
3110 verboseLogging: true
3112 # -- The Docker registry for the gateway image. Overrides `global.image.registry`
3114 # -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
3116 # -- The gateway image repository
3117 repository: nginxinc/nginx-unprivileged
3118 # -- The gateway image tag
3120 # -- The gateway image pull policy
3121 pullPolicy: IfNotPresent
3122 # -- The name of the PriorityClass for gateway pods
3123 priorityClassName: null
3124 # -- Labels for gateway pods
3126 # -- Annotations for gateway deployment
3128 # -- Annotations for gateway pods
3130 # -- Additional CLI args for the gateway
3132 # -- Environment variables to add to the gateway pods
3134 # -- Environment variables from secrets or configmaps to add to the gateway pods
3136 # -- Volumes to add to the gateway pods
3138 # -- Volume mounts to add to the gateway pods
3139 extraVolumeMounts: []
3140 # -- Containers to add to the gateway pods
3142 # -- Resource requests and limits for the gateway
3144 # -- Grace period to allow the gateway to shutdown before it is killed
3145 terminationGracePeriodSeconds: 30
3146 # -- topologySpread for gateway pods. Passed through `tpl` and, thus, to be configured as string
3147 # @default -- Defaults to allow skew no more than 1 node per AZ
3148 topologySpreadConstraints: |
3150 topologyKey: topology.kubernetes.io/zone
3151 whenUnsatisfiable: ScheduleAnyway
3154 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "gateway") | nindent 6 }}
3155 # -- Affinity for gateway pods. Passed through `tpl` and, thus, to be configured as string
3156 # @default -- Hard node and soft zone anti-affinity
3159 requiredDuringSchedulingIgnoredDuringExecution:
3162 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "gateway") | nindent 10 }}
3163 topologyKey: kubernetes.io/hostname
3164 preferredDuringSchedulingIgnoredDuringExecution:
3169 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "gateway") | nindent 12 }}
3170 topologyKey: topology.kubernetes.io/zone
3171 # -- Pod Disruption Budget configuration
3172 podDisruptionBudget:
3173 # -- Enable PodDisruptionBudget for gateway
3175 # -- Set unhealthyPodEvictionPolicy for the gateway PodDisruptionBudget. Requires policy/v1.
3176 unhealthyPodEvictionPolicy: ""
3177 # -- Pod Disruption Budget maxUnavailable
3179 # -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
3181 # -- Node selector for gateway pods
3183 # -- Tolerations for gateway pods
3185 # Gateway service configuration
3187 # -- Port of the gateway service
3189 # -- Type of the gateway service
3191 # -- Traffic distribution for the gateway service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
3192 trafficDistribution: null
3193 # -- ClusterIP of the gateway service
3195 # -- Node port if service type is NodePort
3197 # -- Node port for the gRPC port if service type is NodePort
3199 # -- Load balancer IP address if service type is LoadBalancer
3200 loadBalancerIP: null
3201 # -- Annotations for the gateway service
3203 # -- Labels for gateway service
3205 # -- Additional ports to be opened on gateway service (e.g. for RPC connections)
3207 # Gateway ingress configuration
3209 # -- Specifies whether an ingress for the gateway should be created
3211 # -- Labels for the gateway ingress
3213 # -- Ingress Class Name. MAY be required for Kubernetes versions >= 1.18
3214 # ingressClassName: nginx
3215 # -- Annotations for the gateway ingress
3217 # -- Hosts configuration for the gateway ingress
3219 - host: gateway.tempo.example.com
3222 # -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
3224 # -- TLS configuration for the gateway ingress
3226 - secretName: tempo-gateway-tls
3228 - gateway.tempo.example.com
3229 # -- Gateway API route configuration for the gateway.
3230 # Multiple routes can be added by adding a dictionary key like the 'main' route.
3233 # -- Specifies whether a Gateway API route for the gateway should be created
3235 # -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1beta1
3236 # If not set, the latest available version will be auto-detected
3238 # -- Set the route kind
3239 # Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute
3241 # -- Route annotations
3245 # -- Hostnames for the route
3247 # - gateway.tempo.example.com
3248 # -- Parent references (gateway to attach to)
3250 # - name: my-gateway
3251 # namespace: gateway-namespace
3252 # -- Matches define conditions for matching incoming requests
3257 # -- Timeouts define the timeouts that can be configured for an HTTP request.
3258 # Ref. https://gateway-api.sigs.k8s.io/api-types/httproute/#timeouts-optional
3260 # -- Filters define the filters that are applied to requests that match this rule.
3262 # -- Additional custom rules that can be added to the route
3264 # Basic auth configuration
3266 # -- Enables basic authentication for the gateway
3268 # -- The basic auth username for the gateway
3270 # -- The basic auth password for the gateway
3272 # -- Uses the specified username and password to compute a htpasswd using Sprig's `htpasswd` function.
3273 # The value is templated using `tpl`. Override this to use a custom htpasswd, e.g. in case the default causes
3276 {{ htpasswd (required "'gateway.basicAuth.username' is required" .Values.gateway.basicAuth.username) (required "'gateway.basicAuth.password' is required" .Values.gateway.basicAuth.password) }}
3277 # -- Existing basic auth secret to use. Must contain '.htpasswd'
3278 existingSecret: null
3279 # Configures the liveness probe for the gateway
3284 initialDelaySeconds: 30
3286 # Configures the readiness probe for the gateway
3291 initialDelaySeconds: 15
3294 # -- NGINX log format
3296 main '$remote_addr - $remote_user [$time_local] $status '
3297 '"$request" $body_bytes_sent "$http_referer" '
3298 '"$http_user_agent" "$http_x_forwarded_for"';
3299 # -- Allows appending custom configuration to the main context
3301 # -- Allows appending custom configuration to the server block
3303 # -- Allows appending custom configuration to the http block
3305 # -- Whether ssl should be appended to the listen directive of the server block or not.
3307 # -- TLS secret name containing the certificate and key to be used if ssl is enabled. The secret must contain 'tls.crt' and 'tls.key'. Required if ssl is true.
3309 # -- Allows overriding the DNS resolver address nginx will use
3311 # -- Configures whether or not NGINX bind IPv6
3313 # -- Config file contents for Nginx. Passed through the `tpl` function to allow templating
3314 # @default -- See values.yaml
3316 worker_processes 5; ## Default: 1
3317 error_log /dev/stderr;
3319 worker_rlimit_nofile 8192;
3321 {{- with .Values.gateway.nginxConfig.mainSnippet }}
3326 worker_connections 4096; ## Default: 1024
3330 client_body_temp_path /tmp/client_temp;
3331 proxy_temp_path /tmp/proxy_temp_path;
3332 fastcgi_temp_path /tmp/fastcgi_temp;
3333 uwsgi_temp_path /tmp/uwsgi_temp;
3334 scgi_temp_path /tmp/scgi_temp;
3336 proxy_http_version 1.1;
3338 default_type application/octet-stream;
3339 log_format {{ .Values.gateway.nginxConfig.logFormat }}
3341 {{- if .Values.gateway.verboseLogging }}
3342 access_log /dev/stderr main;
3345 map $status $loggable {
3349 access_log /dev/stderr main if=$loggable;
3354 {{- if .Values.gateway.nginxConfig.resolver }}
3355 resolver {{ .Values.gateway.nginxConfig.resolver }};
3357 resolver {{ .Values.global.dnsService }}.{{ .Values.global.dnsNamespace }}.svc.{{ .Values.global.clusterDomain }};
3360 {{- with .Values.gateway.nginxConfig.httpSnippet }}
3365 listen 8080 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3366 {{- if .Values.gateway.nginxConfig.enableIPv6 }}
3367 listen [::]:8080 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3370 {{- if .Values.streamOverHTTPEnabled }}
3372 location /tempopb.StreamingQuerier/ {
3373 set $query_frontend {{ include "tempo.resourceName" (dict "ctx" . "component" "query-frontend") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3374 grpc_pass grpc://$query_frontend:3200;
3378 {{- if .Values.gateway.basicAuth.enabled }}
3380 auth_basic_user_file /etc/nginx/secrets/.htpasswd;
3388 location = /jaeger/api/traces {
3389 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3390 proxy_pass http://$distributor:14268/api/traces;
3393 location = /zipkin/spans {
3394 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3395 proxy_pass http://$distributor:9411/spans;
3398 location = /v1/traces {
3399 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3400 proxy_pass http://$distributor:4318/v1/traces;
3403 location = /otlp/v1/traces {
3404 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3405 proxy_pass http://$distributor:4318/v1/traces;
3409 set $query_frontend {{ include "tempo.resourceName" (dict "ctx" . "component" "query-frontend") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3410 proxy_pass http://$query_frontend:3200$request_uri;
3414 set $ingester {{ include "tempo.resourceName" (dict "ctx" . "component" "ingester") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3415 proxy_pass http://$ingester:3200$request_uri;
3418 location = /shutdown {
3419 set $ingester {{ include "tempo.resourceName" (dict "ctx" . "component" "ingester") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3420 proxy_pass http://$ingester:3200$request_uri;
3423 location = /distributor/ring {
3424 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3425 proxy_pass http://$distributor:3200$request_uri;
3428 location = /ingester/ring {
3429 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3430 proxy_pass http://$distributor:3200$request_uri;
3433 location = /compactor/ring {
3434 set $compactor {{ include "tempo.resourceName" (dict "ctx" . "component" "compactor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3435 proxy_pass http://$compactor:3200$request_uri;
3438 {{- if .Values.backendScheduler.enabled }}
3439 location = /backend-worker/ring {
3440 set $backend_worker {{ include "tempo.resourceName" (dict "ctx" . "component" "backend-worker") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3441 proxy_pass http://$backend_worker:3200$request_uri;
3445 {{- if .Values.gateway.nginxConfig.ssl }}
3446 ssl_certificate /etc/nginx/ssl/tls.crt;
3447 ssl_certificate_key /etc/nginx/ssl/tls.key;
3450 {{- with .Values.gateway.nginxConfig.serverSnippet }}
3455 {{- if .Values.traces.otlp.grpc.enabled }}
3458 listen {{ .Values.traces.otlp.grpc.port }} http2 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3459 {{- if .Values.gateway.nginxConfig.enableIPv6 }}
3460 listen [::]:{{ .Values.traces.otlp.grpc.port }} http2 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3463 {{- if .Values.gateway.basicAuth.enabled }}
3465 auth_basic_user_file /etc/nginx/secrets/.htpasswd;
3468 location = /opentelemetry.proto.collector.trace.v1.TraceService/Export {
3469 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3470 grpc_pass grpc://$distributor:{{ .Values.traces.otlp.grpc.port }};
3473 location ~ /opentelemetry {
3474 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3475 grpc_pass grpc://$distributor:{{ .Values.traces.otlp.grpc.port }};
3478 {{- if .Values.gateway.nginxConfig.ssl }}
3479 ssl_certificate /etc/nginx/ssl/tls.crt;
3480 ssl_certificate_key /etc/nginx/ssl/tls.key;
3483 {{- with .Values.gateway.nginxConfig.serverSnippet }}
3490 # -- If you enable this, make sure to disable the gateway's ingress.
3492 # ingressClassName: nginx
3498 - path: /distributor/ring
3499 # -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
3501 - path: /live-store/ring
3502 - path: /partition-ring
3503 - path: /metrics-generator/ring
3508 - path: /status/backendscheduler
3511# -- Gateway API route configuration.
3512# Multiple routes can be added by adding a dictionary key like the 'main' route.
3513# This is useful for creating both HTTPRoute and GRPCRoute resources (e.g. for OTLP HTTP + gRPC).
3516 # -- Specifies whether a Gateway API route should be created
3518 # -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1beta1
3519 # If not set, the latest available version will be auto-detected
3521 # -- Set the route kind
3522 # Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute
3524 # -- Route annotations
3528 # -- Hostnames for the route
3530 # - tempo.example.com
3531 # -- Parent references (gateway to attach to)
3533 # - name: my-gateway
3534 # namespace: gateway-namespace
3535 # -- Paths to route to backend services. Each key is a service name suffix, and the value is a list of path matches.
3539 # -- pathType for the match (e.g. PathPrefix, Exact)
3540 pathType: PathPrefix
3541 # -- OTLP HTTP receiver port. This path is only rendered when traces.otlp.http.enabled is true.
3543 - path: /distributor/ring
3544 pathType: PathPrefix
3545 - path: /live-store/ring
3546 pathType: PathPrefix
3547 - path: /partition-ring
3548 pathType: PathPrefix
3549 - path: /metrics-generator/ring
3550 pathType: PathPrefix
3552 pathType: PathPrefix
3555 pathType: PathPrefix
3557 - path: /status/backendscheduler
3558 pathType: PathPrefix
3559##############################################################################
3560# The values in and after the `enterprise:` key configure the enterprise features
3562 # Enable enterprise features. License must be provided, nginx gateway is not installed, instead
3563 # the enterprise gateway is used.
3566 # -- Grafana Enterprise Traces container image repository. Note: for Grafana Tempo use the value 'image.repository'
3567 repository: grafana/enterprise-traces
3568 # -- Grafana Enterprise Traces container image tag. Note: for Grafana Tempo use the value 'image.tag'
3570 # Note: pullPolicy and optional pullSecrets are set in toplevel 'image' section, not here
3571# In order to use Grafana Enterprise Traces features, you will need to provide the contents of your Grafana Enterprise Traces
3572# license, either by providing the contents of the license.jwt, or the name Kubernetes Secret that contains your license.jwt.
3573# To set the license contents, use the flag `--set-file 'license.contents=./license.jwt'`
3574# To use your own Kubernetes Secret, `--set license.external=true`.
3576 contents: 'NOTAVALIDLICENSE'
3578 secretName: '{{ include "tempo.resourceName" (dict "ctx" . "component" "license") }}'
3579# Settings for the initial admin(istrator) token generator job. Can only be enabled if
3580# enterprise.enabled is true - requires license.
3583 # -- hostAliases to add
3592 storeTokenInSecret: false
3593 # -- Name of the secret to store the admin token. If not specified, defaults to "<release-name>-admin-token"
3594 adminTokenSecret: "admin-token"
3596 # -- The Docker registry for the tokengenJob image. Overrides `tempo.image.registry`
3598 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
3600 # -- Docker image repository for the tokengenJob image. Overrides `tempo.image.repository`
3602 # -- Docker image tag for the tokengenJob image. Overrides `tempo.image.tag`
3605 # -- The SecurityContext for tokenjobgen containers
3606 containerSecurityContext:
3607 readOnlyRootFilesystem: true
3609 # -- Whether the job should be part of the deployment
3611 # -- Name of the secret to store provisioned tokens in
3612 provisionedSecretPrefix: null
3613 # -- Hook type(s) to customize when the job runs. defaults to post-install
3614 hookType: "post-install"
3615 # -- URL for the admin API service. Must be set to a valid URL.
3616 # Example: "http://tempo-admin-api.namespace.svc:3100"
3618 # -- Additional tenants to be created. Each tenant will get a read and write policy
3619 # and associated token. Tenant must have a name and a namespace for the secret containing
3620 # the token to be created in. For example
3621 # additionalTenants:
3623 # secretNamespace: grafana
3624 additionalTenants: []
3625 # -- Additional arguments for the provisioner command
3627 # -- Additional Kubernetes environment
3629 # -- Additional labels for the `provisioner` Job
3631 # -- Additional annotations for the `provisioner` Job
3633 # -- Affinity for tokengen Pods
3635 # -- Node selector for tokengen Pods
3637 # -- Tolerations for tokengen Pods
3639 # -- The name of the PriorityClass for provisioner Job
3640 priorityClassName: null
3641 # -- Run containers as nonroot user (uid=10001)`
3646 # -- Provisioner image to Utilize
3648 # -- The Docker registry
3649 registry: us-docker.pkg.dev
3650 # -- Docker image repository
3651 repository: grafanalabs-global/docker-enterprise-provisioner-prod/enterprise-provisioner
3652 # -- Overrides the image tag whose default is the chart's appVersion
3654 # -- Overrides the image tag with an image digest
3656 # -- Docker image pull policy
3657 pullPolicy: IfNotPresent
3658 # -- Volume mounts to add to the provisioner pods
3659 extraVolumeMounts: []
3660 # -- Volumes to add to the provisioner pods
3663 repository: alpine/kubectl
3665 pullPolicy: IfNotPresent
3666# Settings for the admin_api service providing authentication and authorization service.
3667# Can only be enabled if enterprise.enabled is true - requires license.
3670 # -- hostAliases to add
3681 # -- The Docker registry for the adminApi image. Overrides `tempo.image.registry`
3683 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
3685 # -- Docker image repository for the adminApi image. Overrides `tempo.image.repository`
3687 # -- Docker image tag for the adminApi image. Overrides `tempo.image.tag`
3698 # -- topologySpread for admin-api pods. Passed through `tpl` and, thus, to be configured as string
3699 # @default -- Defaults to allow skew no more than 1 node per AZ
3700 topologySpreadConstraints: |
3702 topologyKey: topology.kubernetes.io/zone
3703 whenUnsatisfiable: ScheduleAnyway
3706 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "admin-api") | nindent 6 }}
3707 # -- Affinity for admin-api pods. Passed through `tpl` and, thus, to be configured as string
3708 # @default -- Soft node and soft zone anti-affinity
3711 preferredDuringSchedulingIgnoredDuringExecution:
3716 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "admin-api") | nindent 12 }}
3717 topologyKey: kubernetes.io/hostname
3722 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "admin-api") | nindent 12 }}
3723 topologyKey: topology.kubernetes.io/zone
3724 # Pod Disruption Budget
3725 podDisruptionBudget: {}
3727 # -- The SecurityContext for admin_api containers
3728 containerSecurityContext:
3729 readOnlyRootFilesystem: true
3737 initialDelaySeconds: 45
3742 terminationGracePeriodSeconds: 60
3746 extraVolumeMounts: []
3749# Settings for the gateway service providing authentication and authorization via the admin_api.
3750# Can only be enabled if enterprise.enabled is true - requires license.
3752 # -- If you want to use your own proxy URLs, set this to false.
3753 useDefaultProxyURLs: true
3754 # -- Proxy URLs defined in this object will be used if useDefaultProxyURLs is set to false.
3757 # -- hostAliases to add
3764 # -- The Docker registry for the enterpriseGateway image. Overrides `tempo.image.registry`
3766 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
3768 # -- Docker image repository for the enterpriseGateway image. Overrides `tempo.image.repository`
3770 # -- Docker image tag for the enterpriseGateway image. Overrides `tempo.image.tag`
3774 # -- Port of the enterprise gateway service; if left undefined, the service will listen on the same port as the pod
3776 # -- Type of the enterprise gateway service
3778 # -- ClusterIP of the enterprise gateway service
3780 # -- Load balancer IP address if service type is LoadBalancer for enterprise gateway service
3781 loadBalancerIP: null
3782 # -- Annotations for the enterprise gateway service
3784 # -- Labels for enterprise gateway service
3793 # Pod Disruption Budget
3794 podDisruptionBudget: {}
3796 # -- topologySpread for enterprise-gateway pods. Passed through `tpl` and, thus, to be configured as string
3797 # @default -- Defaults to allow skew no more than 1 node per AZ
3798 topologySpreadConstraints: |
3800 topologyKey: topology.kubernetes.io/zone
3801 whenUnsatisfiable: ScheduleAnyway
3804 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "enterprise-gateway") | nindent 6 }}
3805 # -- Affinity for enterprise-gateway pods. Passed through `tpl` and, thus, to be configured as string
3806 # @default -- Soft node and soft zone anti-affinity
3809 preferredDuringSchedulingIgnoredDuringExecution:
3814 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "enterprise-gateway") | nindent 12 }}
3815 topologyKey: kubernetes.io/hostname
3820 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "enterprise-gateway") | nindent 12 }}
3821 topologyKey: topology.kubernetes.io/zone
3823 # -- The SecurityContext for enterprise-gateway containers
3824 containerSecurityContext:
3825 readOnlyRootFilesystem: true
3834 initialDelaySeconds: 45
3839 terminationGracePeriodSeconds: 60
3843 extraVolumeMounts: []
3846 # Ingress configuration
3848 # -- Specifies whether an ingress for the enterprise-gateway should be created
3850 # -- Ingress Class Name. MAY be required for Kubernetes versions >= 1.18
3851 # ingressClassName: gateway
3852 # -- Annotations for the enterprise-gateway ingress
3854 # -- Hosts configuration for the enterprise-gateway ingress
3856 - host: gateway.get.example.com
3859 # -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
3861 # -- TLS configuration for the enterprise-gateway ingress
3863 - secretName: get-gateway-tls
3865 - gateway.get.example.com
3866# -- extraObjects could be utilized to add dynamic manifests via values
3870# - apiVersion: kubernetes-client.io/v1
3871# kind: ExternalSecret
3873# name: tempo-secrets-{{ .Release.Name }}
3877# - key: secret-access-key
3879# Alternatively, you can use strings, which lets you use additional templating features:
3882# apiVersion: kubernetes-client.io/v1
3883# kind: ExternalSecret
3885# name: tempo-secrets-{{ .Release.Name }}
3889# - key: secret-access-key
3890# name: {{ include "some-other-template" }}
3894 # -- Enable helm test hooks that run a BATS trace roundtrip against the live cluster.
3895 # WARNING: enabling this and running `helm test` ingests real trace data into object storage.
3896 # Traces age out via retention; Tempo has no delete API.