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-r1@sha256:d2c6ed1028f2e0a9dfd755b67aca1f3f2bc4e27c93f3c8eaf7352da7bf027579
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`.
188 statefulSetRecreateJob:
190 # -- Registry for the StatefulSet recreate hook Job image. `global.image.registry` does not apply to this image.
191 registry: registry.k8s.io
192 # -- Repository for the StatefulSet recreate hook Job image
194 # -- Image tag for the StatefulSet recreate hook Job. Defaults to the cluster version as `vMAJOR.MINOR.PATCH`, with vendor suffixes such as `-eks-...` removed
197 # -- Specifies whether a ServiceAccount should be created
199 # -- The name of the ServiceAccount to use.
200 # If not set and create is true, a name is generated using the fullname template
202 # -- Image pull secrets for the service account
204 # -- Labels for the service account
206 # -- Annotations for the service account
208 automountServiceAccountToken: false
210 # -- Specifies whether RBAC manifests should be created
212# Configuration for the metrics-generator
214 # -- Specifies whether a metrics-generator should be deployed
216 # -- Kind of deployment [StatefulSet/Deployment]
218 # -- Annotations for the metrics-generator StatefulSet
220 # -- Number of replicas for the metrics-generator
222 # -- hostAliases to add
227 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
229 # -- Init containers for the metrics generator pod
232 # -- The Docker registry for the metrics-generator image. Overrides `tempo.image.registry`
234 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
236 # -- Docker image repository for the metrics-generator image. Overrides `tempo.image.repository`
238 # -- Docker image tag for the metrics-generator image. Overrides `tempo.image.tag`
240 # -- The name of the PriorityClass for metrics-generator pods
241 priorityClassName: null
242 # -- Labels for metrics-generator pods
244 # -- Annotations for metrics-generator pods
246 # -- Additional CLI args for the metrics-generator
248 # -- Environment variables to add to the metrics-generator pods
250 # -- Environment variables from secrets or configmaps to add to the metrics-generator pods
252 # -- Startup probe for metrics-generator pods. Deep-merged over `tempo.startupProbe`.
254 # -- Resource requests and limits for the metrics-generator
256 # -- Grace period to allow the metrics-generator to shutdown before it is killed. Especially for the ingestor,
257 # this must be increased. It must be long enough so metrics-generators can be gracefully shutdown flushing/transferring
258 # all data and to successfully leave the member ring on shutdown.
259 terminationGracePeriodSeconds: 300
260 # -- topologySpread for metrics-generator pods. Passed through `tpl` and, thus, to be configured as string
261 # @default -- Defaults to allow skew no more then 1 node per AZ
262 topologySpreadConstraints: |
264 topologyKey: topology.kubernetes.io/zone
265 whenUnsatisfiable: ScheduleAnyway
268 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "metrics-generator") | nindent 6 }}
269 # -- Affinity for metrics-generator pods. Passed through `tpl` and, thus, to be configured as string
270 # @default -- Hard node and soft zone anti-affinity
273 requiredDuringSchedulingIgnoredDuringExecution:
276 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "metrics-generator") | nindent 10 }}
277 topologyKey: kubernetes.io/hostname
278 preferredDuringSchedulingIgnoredDuringExecution:
283 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "metrics-generator") | nindent 12 }}
284 topologyKey: topology.kubernetes.io/zone
285 # -- Pod Disruption Budget configuration
287 # -- Enable PodDisruptionBudget for metrics-generator
289 # -- Set unhealthyPodEvictionPolicy for the metrics-generator PodDisruptionBudget. Requires policy/v1.
290 unhealthyPodEvictionPolicy: ""
291 # -- Pod Disruption Budget maxUnavailable
293 # -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
295 # -- Node selector for metrics-generator pods
297 # -- Tolerations for metrics-generator pods
299 # -- Persistence configuration for metrics-generator
301 # -- Enable creating PVCs if you have kind set to StatefulSet. This disables using local disk or memory configured in walEmptyDir
303 # -- Enable StatefulSetRecreation for changes to PVC size.
304 # This means that the StatefulSet will be deleted, recreated (with the same name) and rolled when a change to the
305 # PVC size is detected. That way the PVC can be resized without manual intervention.
306 enableStatefulSetRecreationForSizeChange: false
308 # -- Storage class to be used.
309 # If defined, storageClassName: <storageClass>.
310 # If set to "-", storageClassName: "", which disables dynamic provisioning.
311 # If empty or set to null, no storageClassName spec is
312 # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack).
314 # -- Annotations for metrics generator PVCs
316 # -- Labels for metrics generator PVCs
318 # -- The EmptyDir location where the /var/tempo will be mounted on. Defaults to local disk, can be set to memory.
320 ## Here shows how to configure 1Gi memory as emptyDir.
321 ## Ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#emptydirvolumesource-v1-core
324 # -- Extra volumes for metrics-generator pods
325 extraVolumeMounts: []
326 # -- Extra volumes for metrics-generator deployment
328 # -- Containers to add to the metrics-generator pods
330 persistentVolumeClaimRetentionPolicy:
331 # -- Enable Persistent volume retention policy for StatefulSet
333 # -- Volume retention behavior when the replica count of the StatefulSet is reduced
335 # -- Volume retention behavior that applies when the StatefulSet is deleted
342 - name: http-memberlist
348 # -- More information on configuration: https://grafana.com/docs/tempo/latest/configuration/#metrics-generator
351 collection_interval: 15s
355 # -- 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]`.
357 # -- Additional dimensions to add to the metrics along with the default dimensions.
358 # -- The resource and span attributes to be added to the service graph metrics, if present.
360 histogram_buckets: [0.1, 0.2, 0.4, 0.8, 1.6, 3.2, 6.4, 12.8]
365 # -- Additional dimensions to add to the metrics along with the default dimensions.
366 # -- The resource and span attributes to be added to the span metrics, if present.
368 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]
372 remote_write_flush_deadline: 1m
373 # Whether to add X-Scope-OrgID header in remote write requests
374 remote_write_add_org_id_header: true
375 # -- A list of remote write endpoints.
376 # -- https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
378 # -- Used by the local blocks processor to store a wal for traces.
379 metrics_ingestion_time_range_slack: 30s
381 # -- Annotations for Metrics Generator service
383 # -- Traffic distribution for the Metrics Generator service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
384 trafficDistribution: null
386 # -- Annotations for Metrics Generator discovery service
388 # -- Adds the appProtocol field to the metricsGenerator service. This allows metricsGenerator to work with istio protocol selection.
390 # -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
392# Configuration for the distributor
394 # -- Number of replicas for the distributor
396 # -- Annotations for distributor deployment
398 # -- hostAliases to add
403 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
406 # -- Enable autoscaling for the distributor
408 # -- Minimum autoscaling replicas for the distributor
410 # -- Maximum autoscaling replicas for the distributor
412 # -- Autoscaling behavior configuration for the distributor
414 # -- Target CPU utilisation percentage for the distributor
415 targetCPUUtilizationPercentage: 60
416 # -- Target memory utilisation percentage for the distributor
417 targetMemoryUtilizationPercentage:
419 # -- The Docker registry for the distributor image. Overrides `tempo.image.registry`
421 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
423 # -- Docker image repository for the distributor image. Overrides `tempo.image.repository`
425 # -- Docker image tag for the distributor image. Overrides `tempo.image.tag`
428 # -- Annotations for distributor service
430 # -- Labels for distributor service
432 # -- Type of service for the distributor
434 # -- If type is LoadBalancer you can assign the IP to the LoadBalancer
436 # -- If type is LoadBalancer limit incoming traffic from IPs.
437 loadBalancerSourceRanges: []
438 # -- 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)
439 externalTrafficPolicy: null
440 # -- https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/
441 internalTrafficPolicy: Cluster
442 # -- Traffic distribution for the distributor service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
443 trafficDistribution: null
445 # -- Annotations for distributorDiscovery service
447 # -- Labels for distributorDiscovery service
449 # -- The name of the PriorityClass for distributor pods
450 priorityClassName: null
451 # -- Labels for distributor pods
453 # -- Annotations for distributor pods
455 # -- Additional CLI args for the distributor
457 # -- Environment variables to add to the distributor pods
459 # -- Environment variables from secrets or configmaps to add to the distributor pods
461 # -- Init containers to add to the distributor pods
463 # -- Containers to add to the distributor pod
465 # -- Additional ports to expose on the distributor container (e.g. trace receiver ports).
466 # Standard ports (http-metrics, http-memberlist) are always added automatically.
468 # -- Liveness probe for distributor pods. Deep-merged over `tempo.livenessProbe`.
470 # -- Readiness probe for distributor pods. Deep-merged over `tempo.readinessProbe`.
472 # -- Startup probe for distributor pods. Deep-merged over `tempo.startupProbe`.
474 # -- Resource requests and limits for the distributor
476 # -- On SIGTERM, report not-ready and wait this long before shutdown so the LB drains the pod before connections are cut.
477 # "0s" (default) disables. When enabling, keep terminationGracePeriodSeconds above shutdownDelay + server.graceful_shutdown_timeout.
479 # -- Grace period to allow the distributor to shutdown before it is killed
480 terminationGracePeriodSeconds: 30
481 # -- Container lifecycle hooks for the distributor
483 # -- topologySpread for distributor pods. Passed through `tpl` and, thus, to be configured as string
484 # @default -- Defaults to allow skew no more then 1 node per AZ
485 topologySpreadConstraints: |
487 topologyKey: topology.kubernetes.io/zone
488 whenUnsatisfiable: ScheduleAnyway
491 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "distributor") | nindent 6 }}
492 # -- Affinity for distributor pods. Passed through `tpl` and, thus, to be configured as string
493 # @default -- Soft node and soft zone anti-affinity
496 preferredDuringSchedulingIgnoredDuringExecution:
501 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "distributor") | nindent 12 }}
502 topologyKey: kubernetes.io/hostname
507 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "distributor") | nindent 12 }}
508 topologyKey: topology.kubernetes.io/zone
509 # Strategy of updating pods
514 # -- Pod Disruption Budget configuration
516 # -- Enable PodDisruptionBudget for distributor
518 # -- Set unhealthyPodEvictionPolicy for the distributor PodDisruptionBudget. Requires policy/v1.
519 unhealthyPodEvictionPolicy: ""
520 # -- Pod Disruption Budget maxUnavailable
522 # -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
524 # -- Node selector for distributor pods
526 # -- Tolerations for distributor pods
528 # -- Extra volumes for distributor pods
529 extraVolumeMounts: []
530 # -- Extra volumes for distributor deployment
533 # -- Enable to log every received trace id to help debug ingestion
534 # -- WARNING: Deprecated. Use log_received_spans instead.
535 log_received_traces: null
536 # -- Enable to log every received span to help debug ingestion or calculate span error distributions using the logs
539 include_all_attributes: false
540 filter_by_status_error: false
543 include_all_attributes: false
544 filter_by_status_error: false
545 # -- Disables write extension with inactive ingesters
547 # -- 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.
548 max_attribute_bytes: null
549 # Configures usage trackers in the distributor which expose metrics of ingested traffic grouped by configurable
550 # attributes exposed on /usage_metrics.
552 # -- Enables the "cost-attribution" usage tracker. Per-tenant attributes are configured in overrides.
554 # -- Maximum number of series per tenant.
555 max_cardinality: 10000
556 # -- Interval after which a series is considered stale and will be deleted from the registry.
557 # -- Once a metrics series is deleted, it won't be emitted anymore, keeping active series low.
558 stale_duration: 15m0s
559 # -- Adds the appProtocol field to the distributor service. This allows distributor to work with istio protocol selection.
561 # -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
563# -- EXPERIMENTAL Feature, disabled by default
564# Configuration for the backend-scheduler
566 # -- Specifies whether a backend-scheduler and backend-worker
567 # -- should be deployed.
569 # -- Annotations for backend-scheduler StatefulSet
571 # -- Labels for the backend-scheduler StatefulSet
573 # -- hostAliases to add
578 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
580 # -- Init containers to add to the backend-scheduler pod
583 # -- The Docker registry for the backend-scheduler image. Overrides `tempo.image.registry`
585 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
587 # -- Docker image repository for the backend-scheduler image. Overrides `tempo.image.repository`
589 # -- Docker image tag for the backend-scheduler image. Overrides `tempo.image.tag`
591 # -- The name of the PriorityClass for backend-scheduler pod
592 priorityClassName: null
593 # -- Labels for backend-scheduler pod
595 # -- Annotations for backend-scheduler pod
597 # -- Additional CLI args for the backend-scheduler
599 # -- Environment variables to add to the backend-scheduler pod
601 # -- Environment variables from secrets or configmaps to add to the backend-scheduler pod
603 # -- Additional ports to expose on the backend-scheduler container
604 # Standard ports (grpc, http-metrics, http-memberlist) are always added automatically.
606 # -- Liveness probe for backend-scheduler pod. Deep-merged over `tempo.livenessProbe`.
608 # -- Readiness probe for backend-scheduler pod. Deep-merged over `tempo.readinessProbe`.
610 # -- Startup probe for backend-scheduler pod. Deep-merged over `tempo.startupProbe`.
612 # -- Resource requests and limits for the backend-scheduler
614 # -- Grace period to allow the backend-scheduler to shutdown before it is killed
615 terminationGracePeriodSeconds: 30
616 # -- topologySpread for backend-scheduler pods. Passed through `tpl` and, thus, to be configured as string
617 # @default -- Defaults to allow skew no more then 1 node per AZ
618 topologySpreadConstraints: |
620 topologyKey: topology.kubernetes.io/zone
621 whenUnsatisfiable: ScheduleAnyway
624 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-scheduler") | nindent 6 }}
625 # -- Affinity for backend-scheduler pods. Passed through `tpl` and, thus, to be configured as string
626 # @default -- Soft node and soft zone anti-affinity
629 preferredDuringSchedulingIgnoredDuringExecution:
634 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-scheduler") | nindent 12 }}
635 topologyKey: kubernetes.io/hostname
640 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-scheduler") | nindent 12 }}
641 topologyKey: topology.kubernetes.io/zone
642 # -- Node selector for backend-scheduler pod
644 # -- Tolerations for backend-scheduler pod
646 # -- Extra volumes for backend-scheduler pod
647 extraVolumeMounts: []
648 # -- Extra volumes for backend-scheduler StatefulSet
650 # -- Containers to add to the backend-scheduler pods
652 # -- Persistence configuration for backend-scheduler
654 # -- Enable creating a PVC for the backend-scheduler data volume, so its local
655 # work path survives a pod restart instead of being lost with the emptyDir.
657 # -- Enable StatefulSetRecreation for changes to PVC size
658 enableStatefulSetRecreationForSizeChange: false
659 # -- use emptyDir with ramdisk instead of PVC. **Please note that all data in backend-scheduler will be lost on pod restart**
661 # -- Size of persistent or memory disk
663 # -- Storage class to be used.
664 # If defined, storageClassName: <storageClass>.
665 # If set to "-", storageClassName: "", which disables dynamic provisioning.
666 # If empty or set to null, no storageClassName spec is
667 # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack).
669 # -- Annotations for backend-scheduler's persist volume claim
671 # -- Labels for backend-scheduler's persist volume claim
673 # -- Spec for the `data` volume when persistence is disabled. By default an
674 # empty `emptyDir: {}`; set e.g. `sizeLimit` or `medium: Memory` as needed.
676 # -- updateStrategy of the backend-scheduler statefulset.
680 persistentVolumeClaimRetentionPolicy:
681 # -- Enable Persistent volume retention policy for StatefulSet
683 # -- Volume retention behavior when the replica count of the StatefulSet is reduced
685 # -- Volume retention behavior that applies when the StatefulSet is deleted
688 # -- How often to flush the work cache to backend storage
689 backend_flush_interval: 1m
690 # -- How long to wait for a worker to complete a job before timing out internally
692 # -- Path to store local work cache files
693 local_work_path: /var/tempo
694 # -- How often to perform maintenance tasks (pruning old jobs, checking for dead jobs, etc.)
695 maintenance_interval: 1m
696 # -- Provider configuration for job generation
698 # -- Compaction job configuration
700 # -- Compaction configuration
702 # -- Duration to keep blocks
704 # Duration to keep blocks that have been compacted elsewhere
705 compacted_block_retention: 1h
706 # -- The time between compaction cycles
707 compaction_cycle: 30s
708 # -- Blocks in this time window will be compacted together
709 compaction_window: 1h
710 # -- Maximum size of a compacted block in bytes
711 # -- This should be set to a lower value, ideally 5GB or less
712 # -- 100GB is a legacy default for v2 storage format which is
713 # -- no longer even available as of Tempo 2.1.x
714 # -- https://github.com/grafana/tempo/discussions/5301
715 max_block_bytes: 107374182400
716 # -- Maximum number of traces in a compacted block. WARNING: Deprecated. Use max_block_bytes instead.
717 max_compaction_objects: 6000000
718 # -- The maximum amount of time to spend compacting a single tenant before moving to the next
719 max_time_per_tenant: 5m
720 # -- Number of tenants to process in parallel during retention
721 retention_concurrency: 10
722 # -- Maximum number of compaction jobs to create per tenant
723 max_compaction_level: 0
724 # -- Maximum number of blocks to compact together
726 # -- Maximum compaction level (0 means no limit)
727 max_jobs_per_tenant: 1000
728 # -- How often to measure tenant block lists and create new compaction jobs
730 # -- Minimum time between compaction cycles for a tenant
731 min_cycle_interval: 30s
732 # -- Minimum number of blocks required for compaction
734 # -- Retention job configuration
736 # -- How often to check for blocks that need to be deleted due to retention
738 # -- Work cache configuration
740 # -- After this duration, jobs that have not been updated are considered dead and will be reassigned.
741 dead_job_timeout: 24h
742 # -- How long to keep completed or failed jobs in the work cache before pruning them.
745 # -- Annotations for backend-scheduler service
747# Configuration for the backend-worker
749 # -- Number of replicas for the backend-worker
751 # -- Autoscaling configurations
753 # -- Enable autoscaling for the backend-worker
755 # -- Minimum autoscaling replicas for the backend-worker
757 # -- Maximum autoscaling replicas for the backend-worker
759 # -- Autoscaling via HPA object
762 # -- Autoscaling behavior configuration for the backend-worker
764 # -- Target CPU utilisation percentage for the backend-worker
765 targetCPUUtilizationPercentage: 100
766 # -- Target memory utilisation percentage for the backend-worker
767 targetMemoryUtilizationPercentage:
768 # -- Autoscaling via keda/ScaledObject
770 # requires https://keda.sh/
773 # scaledobject.keda.sh/transfer-hpa-ownership: "true" # Use to transfer an existing HPA ownership to this ScaledObject
774 # validations.keda.sh/hpa-ownership: "true" # Use to disable HPA ownership validation on this ScaledObject
775 # autoscaling.keda.sh/paused: "true" # Use to pause autoscaling of objects explicitly
776 pollingInterval: null # Optional. Default: 30 seconds
777 cooldownPeriod: null # Optional. Default: 300 seconds
778 initialCooldownPeriod: null # Optional. Default: 0 seconds
779 # Optional. Section to specify advanced options
781 # # Optional. Section to specify advanced options
782 # horizontalPodAutoscalerConfig:
783 # # Optional. Default: keda-hpa-{scaled-object-name}
785 # # Optional. Use to modify HPA's scaling behavior
788 # # stabilizationWindowSeconds: 300
789 # # Optional. Section to specify scaling modifiers
791 # target: null # Mandatory. New target if metrics are anyhow composed together
792 # activationTarget: null # Optional. New activation target if metrics are anyhow composed together
793 # metricType: null # Optional. Metric type to be used if metrics are anyhow composed together
794 # formula: null # Mandatory. Formula for calculation
796 # failureThreshold: null # Mandatory if fallback section is included
797 # replicas: null # Mandatory if fallback section is included
798 # behavior: null # Optional. Default: "static"
799 # -- List of autoscaling triggers for the compactor
801 # - name: tempo-outstanding-compaction-blocks
802 ## https://keda.sh/docs/2.19/concepts/authentication/
803 ## authenticationRef:
804 ## name: {trigger-authentication-name} or {cluster-trigger-authentication-name}
805 ## kind: TriggerAuthentication or ClusterTriggerAuthentication
808 # serverAddress: "http://<prometheus-host>:9090"
811 # sum by (cluster, namespace, tenant) (
812 # tempodb_compaction_outstanding_blocks{container="backend-scheduler", namespace=~".*"}
814 # ignoring(tenant) group_left count by (cluster, namespace)(
815 # tempo_build_info{container="backend-worker", namespace=~".*"}
817 # customHeaders: X-Scope-OrgID=<tenant-id>
818 # -- Annotations for backend-worker StatefulSet
820 # -- Labels for the backend-worker StatefulSet
822 # -- hostAliases to add
827 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
829 # -- Init containers to add to the backend-worker pods
832 # -- The Docker registry for the backend-worker image. Overrides `tempo.image.registry`
834 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
836 # -- Docker image repository for the backend-worker image. Overrides `tempo.image.repository`
838 # -- Docker image tag for the backend-worker image. Overrides `tempo.image.tag`
840 # -- The name of the PriorityClass for backend-worker pods
841 priorityClassName: null
842 # -- Labels for backend-worker pods
844 # -- Annotations for backend-worker pods
846 # -- Additional CLI args for the backend-worker
848 # -- Environment variables to add to the backend-worker pods
850 # -- Environment variables from secrets or configmaps to add to the backend-worker pods
852 # -- Liveness probe for backend-worker pods. Deep-merged over `tempo.livenessProbe`.
854 # -- Readiness probe for backend-worker pods. Deep-merged over `tempo.readinessProbe`.
856 # -- Startup probe for backend-worker pods. Deep-merged over `tempo.startupProbe`.
858 # -- Resource requests and limits for the backend-worker
860 # -- Grace period to allow the backend-worker to shutdown before it is killed
861 terminationGracePeriodSeconds: 30
862 # -- topologySpread for backend-worker pods. Passed through `tpl` and, thus, to be configured as string
863 # @default -- Defaults to allow skew no more then 1 node per AZ
864 topologySpreadConstraints: |
866 topologyKey: topology.kubernetes.io/zone
867 whenUnsatisfiable: ScheduleAnyway
870 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-worker") | nindent 6 }}
871 # -- Affinity for backend-worker pods. Passed through `tpl` and, thus, to be configured as string
872 # @default -- Soft node and soft zone anti-affinity
875 preferredDuringSchedulingIgnoredDuringExecution:
880 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-worker") | nindent 12 }}
881 topologyKey: kubernetes.io/hostname
886 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-worker") | nindent 12 }}
887 topologyKey: topology.kubernetes.io/zone
888 # -- Node selector for backend-worker pods
890 # -- Tolerations for backend-worker pods
892 # -- Extra volumes for backend-worker pods
893 extraVolumeMounts: []
894 # -- Extra volumes for backend-worker StatefulSet
896 # -- Containers to add to the backend-worker pods
898 # -- updateStrategy of the backend-worker statefulset.
902 persistentVolumeClaimRetentionPolicy:
903 # -- Enable Persistent volume retention policy for StatefulSet
905 # -- Volume retention behavior when the replica count of the StatefulSet is reduced
907 # -- Volume retention behavior that applies when the StatefulSet is deleted
910 backend_scheduler_client:
911 # -- gRPC client configuration
912 grpc_client_config: {}
913 # -- Backoff configuration for retrying failed jobs
918 # -- Compaction settings
919 # -- .Values.backendScheduler.compaction.compaction will be used
921 # -- Timeout for finishing the current job before shutting down the worker
922 finish_on_shutdown_timeout: 30s
924 # -- Annotations for backend-worker service
926# -- Ingest configuration. Sets the top-level `ingest:` block in tempo.yaml.
927# Required for Tempo 3.0 microservices mode. Distributors write spans to Kafka;
928# block-builders and live-stores consume from it.
929# The number of block-builder and live-store replicas must equal the Kafka partition count.
932 # -- Kafka broker address (e.g. "kafka.kafka-namespace.svc.cluster.local:9092")
934 # -- Kafka topic name for trace data
936 # -- Automatically create the topic if it does not exist
937 auto_create_topic_enabled: true
938 # -- Number of partitions for the auto-created topic.
939 # Block-builder and live-store replica count must match this value.
940 auto_create_topic_default_partitions: 3
941 # SASL authentication for the Kafka client. When `mechanism` is empty it
942 # defaults to PLAIN, which — with no username/password — leaves SASL disabled
943 # (the unauthenticated default). Set a mechanism to enable authentication.
945 # -- SASL mechanism. Must be one of PLAIN, SCRAM-SHA-256, SCRAM-SHA-512,
946 # OAUTHBEARER, AWS_MSK_IAM. Empty defaults to PLAIN.
948 # -- Username for PLAIN and SCRAM-SHA-* mechanisms. Can be combined with
949 # `existingSecret` when only the password is stored in the Secret (e.g.
950 # Strimzi KafkaUser Secrets); `usernameKey` is then ignored.
952 # -- Password for PLAIN and SCRAM-SHA-* mechanisms. Mutually exclusive
953 # with `existingSecret`. Prefer `existingSecret` in production so the
954 # value is never inlined into tempo.yaml.
956 # -- Name of an existing Secret containing `passwordKey` (and `usernameKey`
957 # when `username` is not set above). The credentials are injected as env
958 # vars and passed to tempo as `-ingest.sasl-username`/`-ingest.sasl-password`
959 # CLI flags instead of being inlined into tempo.yaml. Recommended over
960 # setting `password` directly.
962 # -- Key in `existingSecret` containing the username. Ignored when
964 usernameKey: username
965 # -- Key in `existingSecret` containing the password.
966 passwordKey: password
967 # OAUTHBEARER options (used when mechanism is OAUTHBEARER). Provide exactly
968 # one credential source: token, filePath, httpSocketPath, or existingSecret.
970 # -- Static OAuth token. Ignored if `existingSecret` is set. Prefer
971 # `existingSecret` in production so the value is never inlined into
974 # -- Name of an existing Secret containing `tokenKey`. When set,
975 # `token` above is ignored and the credential is injected as an env var
976 # and passed to tempo as the `-ingest.sasl-oauthbearer-token` CLI flag
977 # instead of being inlined into tempo.yaml. Recommended over setting
980 # -- Key in `existingSecret` containing the token.
982 # -- Optional authorization ID.
984 # -- Optional map of additional OAuth extensions (string -> string).
986 # -- Path to a file containing a (rotating) OAuth token in JSON format.
988 # -- Path to a Unix domain socket that serves the OAuth token over HTTP.
990 # -- Timeout for fetching the token from httpSocketPath (e.g. "10s").
991 httpSocketTimeout: ""
992 # AWS_MSK_IAM options (used when mechanism is AWS_MSK_IAM). Provide exactly
993 # one credential source: static keys, filePath, httpSocketPath, or existingSecret.
994 # Tempo does not fall back to the AWS default credential chain (e.g. IRSA).
996 # -- AWS access key ID. Ignored if `existingSecret` is set. Prefer
997 # `existingSecret` in production so the value is never inlined into
1000 # -- AWS secret access key. Ignored if `existingSecret` is set. Prefer
1001 # `existingSecret` in production so the value is never inlined into
1004 # -- Optional AWS session token for temporary credentials. Ignored if
1005 # `existingSecret` is set.
1007 # -- Name of an existing Secret containing `accessKeyKey`/`secretKeyKey`
1008 # and, optionally, `sessionTokenKey`. When set, `accessKey`/`secretKey`/
1009 # `sessionToken` above are ignored and the credentials are injected as
1010 # env vars and passed to tempo as `-ingest.sasl-msk-iam-*` CLI flags
1011 # instead of being inlined into tempo.yaml. Recommended over setting
1012 # the static keys directly.
1014 # -- Key in `existingSecret` containing the AWS access key ID.
1015 accessKeyKey: access-key
1016 # -- Key in `existingSecret` containing the AWS secret access key.
1017 secretKeyKey: secret-key
1018 # -- Key in `existingSecret` containing the AWS session token. Empty
1019 # by default (session token is optional); set this only when
1020 # `existingSecret` contains this key, otherwise pods fail to start.
1022 # -- Optional user agent string.
1024 # -- Path to a file containing AWS credentials in JSON format.
1026 # -- Path to a Unix domain socket that serves AWS credentials over HTTP.
1028 # -- Timeout for fetching credentials from httpSocketPath (e.g. "10s").
1029 httpSocketTimeout: ""
1030 # TLS for the Kafka client connection. Independent of the SASL mechanism and
1031 # can be combined with any of them (e.g. PLAIN over TLS).
1033 # -- Enable TLS for the Kafka connection.
1035 # -- Path to the client certificate (for mTLS).
1037 # -- Path to the client key (for mTLS).
1039 # -- Path to the CA certificate used to verify the broker.
1041 # -- Override the server name / SNI used during verification.
1043 # -- Minimum TLS version (e.g. "VersionTLS12", "VersionTLS13").
1045 # -- Skip broker certificate verification. Avoid in production.
1046 insecureSkipVerify: false
1047# Configuration for the block-builder (Tempo 3.0+)
1048# Consumes spans from Kafka and writes blocks to object storage.
1049# One replica per Kafka partition — replica count must equal ingest.kafka.auto_create_topic_default_partitions.
1051 # -- Enable the block-builder. Requires ingest.kafka.address to be set.
1053 # -- Number of replicas. Must equal the Kafka partition count.
1055 # -- Annotations for the block-builder StatefulSet
1057 # -- Labels for the block-builder StatefulSet
1059 # -- hostAliases to add
1061 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1063 # -- Init containers to add to the block-builder pod
1066 # -- The Docker registry for the block-builder image. Overrides `tempo.image.registry`
1068 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1070 # -- Docker image repository for the block-builder image. Overrides `tempo.image.repository`
1072 # -- Docker image tag for the block-builder image. Overrides `tempo.image.tag`
1074 # -- The name of the PriorityClass for block-builder pods
1075 priorityClassName: null
1076 # -- Labels for block-builder pods
1078 # -- Annotations for block-builder pods
1080 # -- Additional CLI args for the block-builder
1082 # -- Environment variables to add to the block-builder pods
1084 # -- Environment variables from secrets or configmaps to add to the block-builder pods
1086 # -- Additional ports to expose on the block-builder container
1088 # -- Liveness probe for block-builder pods. Deep-merged over `tempo.livenessProbe`.
1090 # -- Readiness probe for block-builder pods. Deep-merged over `tempo.readinessProbe`.
1092 # -- Startup probe for block-builder pods. Deep-merged over `tempo.startupProbe`.
1094 # -- Resource requests and limits for the block-builder
1096 # -- Grace period to allow the block-builder to flush its WAL before being killed
1097 terminationGracePeriodSeconds: 300
1098 # -- topologySpread for block-builder pods. Passed through `tpl`.
1099 topologySpreadConstraints: |
1101 topologyKey: topology.kubernetes.io/zone
1102 whenUnsatisfiable: ScheduleAnyway
1105 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "block-builder") | nindent 6 }}
1106 # -- Affinity for block-builder pods. Passed through `tpl`.
1109 preferredDuringSchedulingIgnoredDuringExecution:
1114 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "block-builder") | nindent 12 }}
1115 topologyKey: kubernetes.io/hostname
1116 # -- Node selector for block-builder pods
1118 # -- Tolerations for block-builder pods
1120 # -- Extra volumes for block-builder pods
1121 extraVolumeMounts: []
1122 # -- Extra volumes for block-builder StatefulSet
1124 # -- Containers to add to the block-builder pods
1126 # -- updateStrategy of the block-builder StatefulSet
1130 # -- Pod Disruption Budget configuration
1131 podDisruptionBudget:
1132 # -- Enable PodDisruptionBudget for block-builder
1134 # -- Set unhealthyPodEvictionPolicy for the block-builder PodDisruptionBudget. Requires policy/v1.
1135 unhealthyPodEvictionPolicy: ""
1136 # -- Pod Disruption Budget maxUnavailable
1139 # -- Annotations for block-builder service
1142 # -- Number of Kafka partitions each block-builder instance consumes.
1143 # Each pod consumes this many partitions starting from its ordinal * partitions_per_instance.
1144 partitions_per_instance: 1
1145# Configuration for the live-store (Tempo 3.0+)
1146# Consumes spans from Kafka and serves recent-data queries (last ~30 minutes).
1147# One replica per Kafka partition — replica count must equal ingest.kafka.auto_create_topic_default_partitions.
1149 # -- Enable the live-store. Requires ingest.kafka.address to be set.
1151 # -- Number of replicas. Must equal the Kafka partition count.
1153 # -- Annotations for the live-store StatefulSet
1155 # -- Labels for the live-store StatefulSet
1157 # -- hostAliases to add
1159 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1161 # -- Init containers to add to the live-store pod
1164 # -- The Docker registry for the live-store image. Overrides `tempo.image.registry`
1166 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1168 # -- Docker image repository for the live-store image. Overrides `tempo.image.repository`
1170 # -- Docker image tag for the live-store image. Overrides `tempo.image.tag`
1172 # -- The name of the PriorityClass for live-store pods
1173 priorityClassName: null
1174 # -- Labels for live-store pods
1176 # -- Annotations for live-store pods
1178 # -- Additional CLI args for the live-store
1180 # -- Environment variables to add to the live-store pods
1182 # -- Environment variables from secrets or configmaps to add to the live-store pods
1184 # -- Additional ports to expose on the live-store container
1186 # -- Liveness probe for live-store pods. Deep-merged over `tempo.livenessProbe`.
1188 # -- Readiness probe for live-store pods. Deep-merged over `tempo.readinessProbe`.
1190 # -- Startup probe for live-store pods. Deep-merged over `tempo.startupProbe`.
1192 # -- Resource requests and limits for the live-store
1194 # -- Grace period to allow the live-store to shut down before being killed
1195 terminationGracePeriodSeconds: 60
1196 # -- topologySpread for live-store pods. Passed through `tpl`.
1197 topologySpreadConstraints: |
1199 topologyKey: topology.kubernetes.io/zone
1200 whenUnsatisfiable: ScheduleAnyway
1203 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "live-store") | nindent 6 }}
1204 # -- Affinity for live-store pods. Passed through `tpl`.
1207 preferredDuringSchedulingIgnoredDuringExecution:
1212 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "live-store") | nindent 12 }}
1213 topologyKey: kubernetes.io/hostname
1214 # -- Node selector for live-store pods
1216 # -- Tolerations for live-store pods
1218 # -- Extra volumes for live-store pods
1219 extraVolumeMounts: []
1220 # -- Extra volumes for live-store StatefulSet
1222 # -- Containers to add to the live-store pods
1224 # -- updateStrategy of the live-store StatefulSet
1228 # -- Persistence configuration for live-store
1230 # -- Enable creating PVCs for the live-store data volume. The WAL and local
1231 # blocks then survive a restart, so the live-store resumes from its committed
1232 # Kafka offset (never further back than 2 x complete_block_timeout) instead of
1233 # re-reading that whole window, as it must when it starts with no local data.
1235 # -- Enable StatefulSetRecreation for changes to PVC size
1236 enableStatefulSetRecreationForSizeChange: false
1237 # -- use emptyDir with ramdisk instead of PVC. **Please note that all data in live-store will be lost on pod restart**
1239 # -- Size of persistent or memory disk
1241 # -- Storage class to be used.
1242 # If defined, storageClassName: <storageClass>.
1243 # If set to "-", storageClassName: "", which disables dynamic provisioning.
1244 # If empty or set to null, no storageClassName spec is
1245 # set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack).
1247 # -- Annotations for live-store's persist volume claim
1249 # -- Labels for live-store's persist volume claim
1251 # -- Spec for the `data` volume when persistence is disabled. By default an
1252 # empty `emptyDir: {}`; set e.g. `sizeLimit` or `medium: Memory` as needed.
1254 # Note: the retained volume also holds the live-store's shutdown marker
1255 # (`/var/tempo/live-store/shutdown-marker`). It is removed on a graceful shutdown,
1256 # but if a pod is force-killed after the rollout-operator has called
1257 # `prepare-downscale` (grace period exceeded, OOMKill, node loss), a stale marker
1258 # is left on the volume. On scale-up that pod then starts with
1259 # `create-partition-on-startup=false` and its partition will not become ACTIVE, so
1260 # it takes no writes. If a scaled-up live-store never becomes ready, or its
1261 # partition stays INACTIVE, remove the shutdown marker from its PVC or call
1262 # `DELETE /live-store/prepare-downscale` on it.
1263 persistentVolumeClaimRetentionPolicy:
1264 # -- Enable Persistent volume retention policy for the live-store StatefulSet
1266 # -- Volume retention behaviour when the StatefulSet replica count is reduced
1268 # -- Volume retention behaviour when the StatefulSet is deleted
1270 # Zone-aware replication spreads the live-stores over failure domains such as
1271 # availability zones, racks or data centres. Every zone runs a full set of
1272 # live-stores, so each Kafka partition gets one owner per zone (RF equals the
1273 # number of zones). The read quorum is 1: a querier only needs an answer from
1274 # one zone, so recent-trace queries survive the loss of a zone.
1275 # Requires `rollout_operator.enabled: true`.
1276 zoneAwareReplication:
1277 # -- Enable zone-aware replication for the live-store
1279 # -- Set to true when a rollout-operator already runs in this namespace and is
1280 # not installed by this chart. Skips the `rollout_operator.enabled` check.
1281 rolloutOperatorManagedExternally: false
1282 # -- Topology key of the failure domain. When set, the live-stores of one zone
1283 # never share a domain with the live-stores of another zone. The cluster must
1284 # hold at least as many domains as there are zones, otherwise the extra zones
1285 # stay unschedulable. With neither this nor a `nodeSelector` on every zone,
1286 # the zones still give separate pods and one partition owner each, but two
1287 # zones can share a failure domain.
1289 # -- Maximum number of live-stores the rollout-operator restarts at the same
1290 # time inside one zone. The rollout-operator always moves one zone at a time.
1291 # A zone with fewer live-stores than this restarts as a whole, which the read
1292 # quorum of 1 covers, at the cost of the read capacity of that zone.
1294 # -- Reject every scale-down of the live-stores. The live-store count must
1295 # match the Kafka partition count, so an accidental scale-down drops the
1296 # recent-read tier of the partitions that go away. Needs the rollout-operator
1297 # webhooks. Cannot be combined with `prepareDownscale.enabled`.
1299 # Coordinated scale-down through the rollout-operator admission webhook. It
1300 # guards a lower `liveStore.replicas`, which retires the last Kafka
1301 # partitions. On such a scale-down the webhook calls `httpPath` on every
1302 # live-store that goes away, which moves its partition to INACTIVE and stops
1303 # the writes to it. The webhook then rejects the scale-down of a second zone
1304 # until `minTimeBetweenZonesDownscale` has passed, so the zones go down one
1305 # at a time. A rejected scale-down fails the `helm upgrade`: wait for the
1306 # window, then run the upgrade again.
1308 # The webhook is the only mechanism the chart uses, so a pod stops as soon
1309 # as its partition is INACTIVE. The remaining zones still own that partition
1310 # and still hold its recent traces, which is what keeps the read path whole
1311 # until the last zone goes down. Do not remove a zone from the `zones` list
1312 # in the same step: that deletes the StatefulSet, which the webhook never
1315 # -- Enable the coordinated scale-down
1317 # -- Minimum time between the scale-down of two zones. Must be longer than
1318 # the period a live-store still serves recent traces, because the last
1319 # zone to go down takes the last owner of the retired partitions with it.
1320 minTimeBetweenZonesDownscale: 12h
1321 # -- Endpoint the webhook calls on every live-store that goes away. Must
1322 # accept a POST while the partition is still ACTIVE.
1323 # `live-store/prepare-downscale` does not: it answers 409 until the
1324 # partition is INACTIVE, so it needs the delayed-downscale mechanism of
1325 # the rollout-operator, which this chart does not configure.
1326 httpPath: live-store/prepare-partition-downscale
1327 # Voluntary evictions of zone-aware live-stores, through the
1328 # ZoneAwarePodDisruptionBudget of the rollout-operator. A native
1329 # PodDisruptionBudget counts pods, so it cannot tell that the same pod
1330 # ordinal in two zones holds every owner of one partition. This one counts
1331 # per partition across zones and rejects an eviction that would take the
1332 # last owner, whatever the budget of a single zone allows.
1334 # Needs the ZoneAwarePodDisruptionBudget CRD and the pod eviction webhook of
1335 # the rollout-operator. The bundled subchart installs both. The webhook
1336 # rejects an eviction while the rollout-operator is unreachable, so this
1337 # never opens a window. While this is on, it replaces the
1338 # `liveStore.podDisruptionBudget` object.
1339 podDisruptionBudget:
1340 # -- Guard the evictions with a ZoneAwarePodDisruptionBudget. Set to false
1341 # to keep a single native PodDisruptionBudget over all zones instead.
1343 # -- Live-stores of one partition that may be unavailable at the same
1344 # time, counted over every zone. 1 keeps a partition served through any
1345 # single voluntary eviction. 0 rejects every voluntary eviction.
1347 # -- Regular expression that returns the partition of a live-store from
1348 # its pod name. The rollout-operator anchors it with `^` and `$`, so it
1349 # must match the whole name. The default reads the pod ordinal, which is
1350 # the Kafka partition, and holds for any zone name.
1351 podNamePartitionRegex: ".*-([0-9]+)"
1352 # -- Capture group of the partition. Only needed when
1353 # `podNamePartitionRegex` holds more than one group.
1354 podNameRegexGroup: null
1355 # -- Minimum time after a live-store becomes ready before another owner of
1356 # the same partition may be evicted. A Go duration, so days are not a
1357 # unit. Set this when the live-stores run with the default
1358 # `readiness-target-lag` of 0, because a live-store then reports ready
1359 # while it still replays its partition.
1360 crossZoneEvictionDelay: null
1361 # -- Zones to deploy. At least 2 zones are required. Every zone runs
1362 # `liveStore.replicas` live-stores. A zone name must be a DNS label: it
1363 # becomes a StatefulSet name suffix and the value of the zone label.
1366 # -- Node selector for the live-stores of this zone. Merged on top of
1367 # `liveStore.nodeSelector`, or of `defaults.nodeSelector`.
1369 # -- Extra affinity for the live-stores of this zone. Merged on top of
1370 # `liveStore.affinity`. The zone anti-affinity of `topologyKey`
1371 # overwrites a `podAntiAffinity` here.
1373 # -- Extra annotations for the StatefulSet of this zone
1375 # -- Extra annotations for the pods of this zone
1382 # -- Pod Disruption Budget configuration
1383 podDisruptionBudget:
1384 # -- Enable PodDisruptionBudget for live-store
1386 # -- Set unhealthyPodEvictionPolicy for the live-store PodDisruptionBudget. Requires policy/v1.
1387 unhealthyPodEvictionPolicy: ""
1388 # -- Annotations for the live-store PodDisruptionBudget, or for the
1389 # ZoneAwarePodDisruptionBudget when it takes over
1391 # -- Pod Disruption Budget maxUnavailable. With zone-aware replication the
1392 # budget covers the live-stores of every zone together, because the same pod
1393 # ordinal in two zones holds every owner of one partition.
1396 # -- Annotations for live-store service
1398 # -- Extra live-store configuration. Merged verbatim into the `live_store:` config block.
1399 # See https://grafana.com/docs/tempo/latest/configuration/#live-store for available fields.
1404# Configuration for the querier
1406 # -- Number of replicas for the querier
1408 # -- hostAliases to add
1413 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1415 # -- Annotations for querier deployment
1418 # -- Enable autoscaling for the querier
1420 # -- Minimum autoscaling replicas for the querier
1422 # -- Maximum autoscaling replicas for the querier
1424 # -- Autoscaling behavior configuration for the querier
1426 # -- Target CPU utilisation percentage for the querier
1427 targetCPUUtilizationPercentage: 60
1428 # -- Target memory utilisation percentage for the querier
1429 targetMemoryUtilizationPercentage:
1431 # -- The Docker registry for the querier image. Overrides `tempo.image.registry`
1433 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1435 # -- Docker image repository for the querier image. Overrides `tempo.image.repository`
1437 # -- Docker image tag for the querier image. Overrides `tempo.image.tag`
1439 # -- The name of the PriorityClass for querier pods
1440 priorityClassName: null
1441 # -- Labels for querier pods
1443 # -- Annotations for querier pods
1445 # -- Additional CLI args for the querier
1447 # -- Environment variables to add to the querier pods
1449 # -- Environment variables from secrets or configmaps to add to the querier pods
1451 # -- Liveness probe for querier pods. Deep-merged over `tempo.livenessProbe`.
1453 # -- Readiness probe for querier pods. Deep-merged over `tempo.readinessProbe`.
1455 # -- Startup probe for querier pods. Deep-merged over `tempo.startupProbe`.
1457 # -- Resource requests and limits for the querier
1459 # -- Grace period to allow the querier to shutdown before it is killed
1460 terminationGracePeriodSeconds: 30
1461 # -- topologySpread for querier pods. Passed through `tpl` and, thus, to be configured as string
1462 # @default -- Defaults to allow skew no more then 1 node per AZ
1463 topologySpreadConstraints: |
1465 topologyKey: topology.kubernetes.io/zone
1466 whenUnsatisfiable: ScheduleAnyway
1469 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "querier") | nindent 6 }}
1470 # -- Affinity for querier pods. Passed through `tpl` and, thus, to be configured as string
1471 # @default -- Soft node and soft zone anti-affinity
1474 preferredDuringSchedulingIgnoredDuringExecution:
1479 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "querier" "memberlist" true) | nindent 12 }}
1480 topologyKey: kubernetes.io/hostname
1485 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "querier" "memberlist" true) | nindent 12 }}
1486 topologyKey: topology.kubernetes.io/zone
1487 # -- Pod Disruption Budget configuration
1488 podDisruptionBudget:
1489 # -- Enable PodDisruptionBudget for querier
1491 # -- Set unhealthyPodEvictionPolicy for the querier PodDisruptionBudget. Requires policy/v1.
1492 unhealthyPodEvictionPolicy: ""
1493 # -- Pod Disruption Budget maxUnavailable
1495 # -- Max Surge for querier pods
1498 # -- Maximum number of Pods that can be unavailable during the update process
1500 # -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
1502 # -- Node selector for querier pods
1504 # -- Tolerations for querier pods
1506 # -- Init containers for the querier pod
1508 # -- Containers to add to the querier pods
1510 # -- Additional ports to expose on the querier container.
1511 # Standard ports (http-metrics, http-memberlist) are always added automatically.
1513 # -- Extra volumes for querier pods
1514 extraVolumeMounts: []
1515 # -- Extra volumes for querier deployment
1519 # -- gRPC client configuration
1520 grpc_client_config: {}
1522 # -- Timeout for trace lookup requests
1525 # -- Timeout for search requests
1527 # -- 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.
1528 max_concurrent_queries: 20
1530 # -- Annotations for querier service
1532 # -- Traffic distribution for the querier service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
1533 trafficDistribution: null
1534 # -- Adds the appProtocol field to the querier service. This allows querier to work with istio protocol selection.
1536 # -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
1538# Configuration for the query-frontend
1541 # -- Required for grafana version <7.5 for compatibility with jaeger-ui. Doesn't work on ARM arch
1544 # -- The Docker registry for the tempo-query image. Overrides `tempo.image.registry`
1546 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1548 # -- Docker image repository for the tempo-query image. Overrides `tempo.image.repository`
1549 repository: grafana/tempo-query
1550 # -- Docker image tag for the tempo-query image. Overrides `tempo.image.tag`
1552 # -- Resource requests and limits for the query
1554 # -- Additional CLI args for tempo-query pods
1556 # -- Environment variables to add to the tempo-query pods
1558 # -- Environment variables from secrets or configmaps to add to the tempo-query pods
1560 # -- Extra volumes for tempo-query pods
1561 extraVolumeMounts: []
1562 # -- Extra volumes for tempo-query deployment
1565 backend: 127.0.0.1:3200
1566 # -- Number of replicas for the query-frontend
1568 # -- Annotations for the query-frontend Deployment
1570 # -- hostAliases to add
1575 # -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1578 # -- Maximum number of outstanding requests per tenant per frontend; requests beyond this error with HTTP 429.
1579 max_outstanding_per_tenant: 2000
1580 # -- Number of times to retry a request sent to a querier
1583 # -- The number of concurrent jobs to execute when searching the backend
1584 concurrent_jobs: 1000
1585 # -- The target number of bytes for each job to handle when performing a backend search
1586 target_bytes_per_job: 104857600
1587 # -- The maximum allowed value of spans per span set. 0 disables this limit.
1588 max_spans_per_span_set: 100
1589 # -- The maximum allowed value for the limit parameter on search requests. 0 disables this limit.
1590 # max_result_limit: 262144 maximum number of results returned by search requests
1591 # -- Trace by ID lookup configuration
1593 # -- The number of shards to split a trace by ID query into.
1596 # -- The number of concurrent jobs to execute when querying the backend.
1597 concurrent_jobs: 1000
1598 # -- The target number of bytes for each job to handle when querying the backend.
1599 target_bytes_per_job: 104857600
1600 # -- The maximum allowed time range for a metrics query.
1601 # 0 disables this limit.
1603 # -- query_backend_after controls where the query-frontend searches for traces.
1604 # Time ranges newer than query_backend_after will be searched in the live-stores only.
1605 # Time ranges older than query_backend_after will be searched in the backend/object storage only.
1606 query_backend_after: 15m
1607 # -- The target length of time for each job to handle when querying the backend.
1609 # -- If set to a non-zero value, it's value will be used to decide if query is within SLO or not.
1610 # Query is within SLO if it returned 200 within duration_slo seconds OR processed throughput_slo bytes/s data.
1611 # NOTE: `duration_slo` and `throughput_bytes_slo` both must be configured for it to work
1613 # -- If set to a non-zero value, it's value will be used to decide if query is within SLO or not.
1614 # Query is within SLO if it returned 200 within duration_slo seconds OR processed throughput_slo bytes/s data.
1615 throughput_bytes_slo: 0
1617 # -- Enable autoscaling for the query-frontend
1619 # -- Minimum autoscaling replicas for the query-frontend
1621 # -- Maximum autoscaling replicas for the query-frontend
1623 # -- Autoscaling behavior configuration for the query-frontend
1625 # -- Target CPU utilisation percentage for the query-frontend
1626 targetCPUUtilizationPercentage: 60
1627 # -- Target memory utilisation percentage for the query-frontend
1628 targetMemoryUtilizationPercentage:
1630 # -- The Docker registry for the query-frontend image. Overrides `tempo.image.registry`
1632 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1634 # -- Docker image repository for the query-frontend image. Overrides `tempo.image.repository`
1636 # -- Docker image tag for the query-frontend image. Overrides `tempo.image.tag`
1639 # -- Port of the query-frontend service
1641 # -- http Metrics port of the query-frontend service
1642 httpMetricsPort: 3200
1643 # -- gRPC Port of the query-frontend service
1645 # -- Annotations for queryFrontend service
1647 # -- Labels for queryFrontend service
1649 # -- Type of service for the queryFrontend
1651 # -- Traffic distribution for the queryFrontend service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
1652 trafficDistribution: null
1653 # -- If type is LoadBalancer you can assign the IP to the LoadBalancer
1655 # -- If type is LoadBalancer limit incoming traffic from IPs.
1656 loadBalancerSourceRanges: []
1658 # -- Annotations for queryFrontendDiscovery service
1660 # -- Labels for queryFrontendDiscovery service
1663 # -- Specifies whether an ingress for the Jaeger should be created
1665 # -- Ingress Class Name. MAY be required for Kubernetes versions >= 1.18
1666 # ingressClassName: nginx
1667 # -- Annotations for the Jaeger ingress
1669 # -- Hosts configuration for the Jaeger ingress
1671 - host: query.tempo.example.com
1674 # -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
1676 # -- TLS configuration for the Jaeger ingress
1678 - secretName: tempo-query-tls
1680 - query.tempo.example.com
1681 # -- Gateway API route configuration for the query-frontend (Jaeger UI).
1682 # Multiple routes can be added by adding a dictionary key like the 'main' route.
1685 # -- Specifies whether a Gateway API route for the query-frontend should be created
1687 # -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1beta1
1688 # If not set, the latest available version will be auto-detected
1690 # -- Set the route kind
1691 # Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute
1693 # -- Route annotations
1697 # -- Hostnames for the route
1699 # - query.tempo.example.com
1700 # -- Parent references (gateway to attach to)
1702 # - name: my-gateway
1703 # namespace: gateway-namespace
1704 # -- Matches define conditions for matching incoming requests
1709 # -- Timeouts define the timeouts that can be configured for an HTTP request.
1710 # Ref. https://gateway-api.sigs.k8s.io/api-types/httproute/#timeouts-optional
1712 # -- Filters define the filters that are applied to requests that match this rule.
1714 # -- Additional custom rules that can be added to the route
1716 # -- The name of the PriorityClass for query-frontend pods
1717 priorityClassName: null
1718 # -- Labels for queryFrontend pods
1720 # -- Annotations for query-frontend pods
1722 # -- Additional CLI args for the query-frontend
1724 # -- Environment variables to add to the query-frontend pods
1726 # -- Environment variables from secrets or configmaps to add to the query-frontend pods
1728 # -- Liveness probe for query-frontend pods. Deep-merged over `tempo.livenessProbe`.
1730 # -- Readiness probe for query-frontend pods. Deep-merged over `tempo.readinessProbe`.
1732 # -- Startup probe for query-frontend pods. Deep-merged over `tempo.startupProbe`.
1734 # -- Resource requests and limits for the query-frontend
1736 # -- Grace period to allow the query-frontend to shutdown before it is killed
1737 terminationGracePeriodSeconds: 30
1738 # -- topologySpread for query-frontend pods. Passed through `tpl` and, thus, to be configured as string
1739 # @default -- Defaults to allow skew no more then 1 node per AZ
1740 topologySpreadConstraints: |
1742 topologyKey: topology.kubernetes.io/zone
1743 whenUnsatisfiable: ScheduleAnyway
1746 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "query-frontend") | nindent 6 }}
1747 # -- Affinity for query-frontend pods. Passed through `tpl` and, thus, to be configured as string
1748 # @default -- Soft node and soft zone anti-affinity
1751 preferredDuringSchedulingIgnoredDuringExecution:
1756 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "query-frontend") | nindent 12 }}
1757 topologyKey: kubernetes.io/hostname
1762 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "query-frontend") | nindent 12 }}
1763 topologyKey: topology.kubernetes.io/zone
1764 # -- Pod Disruption Budget configuration
1765 podDisruptionBudget:
1766 # -- Enable PodDisruptionBudget for query-frontend
1768 # -- Set unhealthyPodEvictionPolicy for the query-frontend PodDisruptionBudget. Requires policy/v1.
1769 unhealthyPodEvictionPolicy: ""
1770 # -- Pod Disruption Budget maxUnavailable
1772 # -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
1774 # -- Node selector for query-frontend pods
1776 # -- Tolerations for query-frontend pods
1778 # -- Init containers for the query-frontend pod
1780 # -- Containers to add to the query-frontend pods
1782 # -- Additional ports to expose on the query-frontend container.
1783 # The gRPC port is included by default. Standard ports (http-metrics, http-memberlist)
1784 # are always added automatically by the pod template.
1786 - containerPort: 9095
1789 # -- Extra volumes for query-frontend pods
1790 extraVolumeMounts: []
1791 # -- Extra volumes for query-frontend deployment
1793 # -- Adds the appProtocol field to the queryFrontend service. This allows queryFrontend to work with istio protocol selection.
1795 # -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
1797 # -- Set the optional HTTP service protocol. Ex: "http2" to let Grafana stream over the HTTP port through a service mesh. Requires streamOverHTTPEnabled: true, Tempo only serves HTTP/2 (h2c) on this port then
1800 # -- Enables Tempo MCP Server
1802# Configuration for the federation-frontend
1803# Can only be enabled if enterprise.enabled is true - requires license.
1804enterpriseFederationFrontend:
1805 # -- Specifies whether a federation-frontend should be deployed
1807 # -- Number of replicas for the federation-frontend
1809 # -- Annotations for the federation-frontend Deployment
1811 # -- hostAliases to add
1817 # - name: own-data-center
1818 # url: http://get/tempo
1819 # - name: grafana-cloud
1820 # url: https://tempo-us-central1.grafana.net/tempo
1822 # username: <instance-id>
1825 # -- Enable autoscaling for the federation-frontend
1827 # -- Minimum autoscaling replicas for the federation-frontend
1829 # -- Maximum autoscaling replicas for the federation-frontend
1831 # -- Target CPU utilisation percentage for the federation-frontend
1832 targetCPUUtilizationPercentage: 60
1833 # -- Target memory utilisation percentage for the federation-frontend
1834 targetMemoryUtilizationPercentage:
1836 # -- The Docker registry for the federation-frontend image. Overrides `tempo.image.registry`
1838 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1840 # -- Docker image repository for the federation-frontend image. Overrides `tempo.image.repository`
1842 # -- Docker image tag for the federation-frontend image. Overrides `tempo.image.tag`
1845 # -- Port of the federation-frontend service
1847 # -- Annotations for enterpriseFederationFrontend service
1849 # -- Type of service for the enterpriseFederationFrontend
1851 # -- If type is LoadBalancer you can assign the IP to the LoadBalancer
1853 # -- If type is LoadBalancer limit incoming traffic from IPs.
1854 loadBalancerSourceRanges: []
1855 # -- The name of the PriorityClass for federation-frontend pods
1856 priorityClassName: null
1857 # -- Labels for enterpriseFederationFrontend pods
1859 # -- Annotations for federation-frontend pods
1861 # -- Additional CLI args for the federation-frontend
1863 # -- Environment variables to add to the federation-frontend pods
1865 # -- Environment variables from secrets or configmaps to add to the federation-frontend pods
1867 # -- Resource requests and limits for the federation-frontend
1869 # -- Grace period to allow the federation-frontend to shutdown before it is killed
1870 terminationGracePeriodSeconds: 30
1871 # -- topologySpread for federation-frontend pods. Passed through `tpl` and, thus, to be configured as string
1872 # @default -- Defaults to allow skew no more then 1 node per AZ
1873 topologySpreadConstraints: |
1875 topologyKey: failure-domain.beta.kubernetes.io/zone
1876 whenUnsatisfiable: ScheduleAnyway
1879 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "federation-frontend") | nindent 6 }}
1880 # -- Affinity for federation-frontend pods. Passed through `tpl` and, thus, to be configured as string
1881 # @default -- Soft node and soft zone anti-affinity
1884 preferredDuringSchedulingIgnoredDuringExecution:
1889 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "federation-frontend") | nindent 12 }}
1890 topologyKey: kubernetes.io/hostname
1895 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "federation-frontend") | nindent 12 }}
1896 topologyKey: failure-domain.beta.kubernetes.io/zone
1897 # -- Pod Disruption Budget configuration
1898 podDisruptionBudget:
1899 # -- Enable PodDisruptionBudget for enterprise-federation-frontend
1901 # -- Pod Disruption Budget maxUnavailable
1903 # -- Node selector for federation-frontend pods
1905 # -- Tolerations for federation-frontend pods
1907 # -- Extra volumes for federation-frontend pods
1908 extraVolumeMounts: []
1909 # -- Extra volumes for federation-frontend deployment
1911multitenancyEnabled: false
1913 # -- Enable rollout-operator. It must be enabled when using Zone Aware Replication.
1921 type: RuntimeDefault
1922 # Set the container security context
1924 readOnlyRootFilesystem: true
1927 allowPrivilegeEscalation: false
1931 # -- Enable Tempo to ingest Jaeger gRPC traces
1933 # -- Jaeger gRPC receiver config
1936 # -- Enable Tempo to ingest Jaeger Thrift Binary traces
1938 # -- Jaeger Thrift Binary receiver config
1941 # -- Enable Tempo to ingest Jaeger Thrift Compact traces
1943 # -- Jaeger Thrift Compact receiver config
1946 # -- Enable Tempo to ingest Jaeger Thrift HTTP traces
1948 # -- Jaeger Thrift HTTP receiver config
1951 # -- Enable Tempo to ingest Zipkin traces
1953 # -- Zipkin receiver config
1957 # -- Enable Tempo to ingest Open Telemetry HTTP traces
1959 # -- HTTP receiver advanced config
1962 # -- Enable Tempo to ingest Open Telemetry gRPC traces
1964 # -- gRPC receiver advanced config
1966 # -- Default OTLP gRPC port
1968 # -- Enable Tempo to ingest traces from Kafka. Reference: https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/kafkareceiver
1970# -- Memberlist configuration. Please refer to https://grafana.com/docs/tempo/latest/configuration/#memberlist
1973 cluster_label: "{{ .Release.Name }}.{{ .Release.Namespace }}"
1974 randomize_node_name: true
1975 stream_timeout: "10s"
1976 retransmit_factor: 2
1977 pull_push_interval: "30s"
1978 gossip_interval: "1s"
1980 gossip_to_dead_nodes_time: "30s"
1981 min_join_backoff: "1s"
1982 max_join_backoff: "1m"
1983 max_join_retries: 10
1984 abort_if_cluster_join_fails: false
1985 rejoin_interval: "0s"
1986 left_ingesters_timeout: "5m"
1990 packet_dial_timeout: "5s"
1991 packet_write_timeout: "5s"
1992# -- Config file contents for Tempo distributed. Passed through the `tpl` function to allow templating
1994# @default -- See values.yaml
1996 multitenancy_enabled: {{ .Values.multitenancyEnabled }}
1998 stream_over_http_enabled: {{ .Values.streamOverHTTPEnabled }}
2001 reporting_enabled: {{ .Values.reportingEnabled }}
2003 {{- if .Values.enterprise.enabled }}
2005 path: "/license/license.jwt"
2017 http_api_prefix: {{get .Values.tempo.structuredConfig "http_api_prefix"}}
2021 backend: {{.Values.storage.admin.backend}}
2022 {{- if eq .Values.storage.admin.backend "s3"}}
2024 {{- toYaml .Values.storage.admin.s3 | nindent 6}}
2026 {{- if eq .Values.storage.admin.backend "gcs"}}
2028 {{- toYaml .Values.storage.admin.gcs | nindent 6}}
2030 {{- if eq .Values.storage.admin.backend "azure"}}
2032 {{- toYaml .Values.storage.admin.azure | nindent 6}}
2034 {{- if eq .Values.storage.admin.backend "swift"}}
2036 {{- toYaml .Values.storage.admin.swift | nindent 6}}
2038 {{- if eq .Values.storage.admin.backend "filesystem"}}
2040 {{- toYaml .Values.storage.admin.filesystem | nindent 6}}
2044 {{- if and .Values.enterprise.enabled .Values.enterpriseGateway.useDefaultProxyURLs }}
2048 url: http://{{ template "tempo.fullname" . }}-admin-api.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2049 {{- if .Values.backendScheduler.enabled }}
2051 url: http://{{ template "tempo.fullname" . }}-backend-worker.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2054 url: http://{{ template "tempo.fullname" . }}-admin-api.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2056 url: http://{{ template "tempo.fullname" . }}-distributor.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2058 url: h2c://{{ template "tempo.fullname" . }}-distributor.{{ .Release.Namespace }}.svc:4317
2060 url: http://{{ template "tempo.fullname" . }}-distributor.{{ .Release.Namespace }}.svc:4318
2062 url: http://{{ template "tempo.fullname" . }}-querier.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2064 url: http://{{ template "tempo.fullname" . }}-query-frontend.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}{{get .Values.tempo.structuredConfig "http_api_prefix"}}
2066 {{- if and .Values.enterprise.enabled .Values.enterpriseGateway.proxy }}
2068 proxy: {{- toYaml .Values.enterpriseGateway.proxy | nindent 6 }}
2072 {{- if .Values.backendScheduler.enabled }}
2075 prune_age: {{ .Values.backendScheduler.config.work.prune_age }}
2076 dead_job_timeout: {{ .Values.backendScheduler.config.work.dead_job_timeout }}
2077 maintenance_interval: {{ .Values.backendScheduler.config.maintenance_interval }}
2078 backend_flush_interval: {{ .Values.backendScheduler.config.backend_flush_interval }}
2081 interval: {{ .Values.backendScheduler.config.provider.retention.interval }}
2084 block_retention: {{ .Values.backendScheduler.config.provider.compaction.compaction.block_retention }}
2085 compacted_block_retention: {{ .Values.backendScheduler.config.provider.compaction.compaction.compacted_block_retention }}
2086 compaction_cycle: {{ .Values.backendScheduler.config.provider.compaction.compaction.compaction_cycle }}
2087 compaction_window: {{ .Values.backendScheduler.config.provider.compaction.compaction.compaction_window }}
2088 max_block_bytes: {{ .Values.backendScheduler.config.provider.compaction.compaction.max_block_bytes }}
2089 max_compaction_objects: {{ .Values.backendScheduler.config.provider.compaction.compaction.max_compaction_objects }}
2090 max_time_per_tenant: {{ .Values.backendScheduler.config.provider.compaction.compaction.max_time_per_tenant }}
2091 retention_concurrency: {{ .Values.backendScheduler.config.provider.compaction.compaction.retention_concurrency }}
2092 max_jobs_per_tenant: {{ .Values.backendScheduler.config.provider.compaction.max_jobs_per_tenant }}
2093 min_input_blocks: {{ .Values.backendScheduler.config.provider.compaction.min_input_blocks }}
2094 max_input_blocks: {{ .Values.backendScheduler.config.provider.compaction.max_input_blocks }}
2095 max_compaction_level: {{ .Values.backendScheduler.config.provider.compaction.max_compaction_level }}
2096 min_cycle_interval: {{ .Values.backendScheduler.config.provider.compaction.min_cycle_interval }}
2097 job_timeout: {{ .Values.backendScheduler.config.job_timeout }}
2098 local_work_path: {{ .Values.backendScheduler.config.local_work_path }}
2100 {{- with .Values.backendWorker.config.backend_scheduler_client.grpc_client_config }}
2101 backend_scheduler_client:
2103 {{- toYaml . | nindent 6 }}
2107 backend_scheduler_addr: {{ include "tempo.resourceName" (dict "ctx" . "component" "backend-scheduler") }}:9095
2109 min_period: {{ .Values.backendWorker.config.backoff.min_period }}
2110 max_period: {{ .Values.backendWorker.config.backoff.max_period }}
2111 max_retries: {{ .Values.backendWorker.config.backoff.max_retries }}
2112 {{- $compaction_default := .Values.backendScheduler.config.provider.compaction.compaction }}
2113 {{- $worker_overrides := .Values.backendWorker.config.compaction }}
2114 {{- $compaction := mergeOverwrite (deepCopy $compaction_default) $worker_overrides }}
2116 {{- toYaml $compaction | nindent 6 }}
2117 finish_on_shutdown_timeout: {{ .Values.backendWorker.config.finish_on_shutdown_timeout }}
2122 {{- if .Values.blockBuilder.enabled }}
2124 partitions_per_instance: {{ .Values.blockBuilder.config.partitions_per_instance }}
2126 {{- if .Values.liveStore.enabled }}
2128 {{- with .Values.liveStore.config }}
2129 {{- toYaml . | nindent 4 }}
2132 {{- if and .Values.enterprise.enabled .Values.enterpriseFederationFrontend.enabled }}
2135 {{- toYaml .Values.enterpriseFederationFrontend.proxy_targets | nindent 6 }}
2137 {{- if .Values.metricsGenerator.enabled }}
2143 {{- toYaml .Values.metricsGenerator.config.processor | nindent 6 }}
2145 {{- toYaml .Values.metricsGenerator.config.storage | nindent 6 }}
2147 {{- toYaml .Values.metricsGenerator.config.registry | nindent 6 }}
2148 metrics_ingestion_time_range_slack: {{ .Values.metricsGenerator.config.metrics_ingestion_time_range_slack }}
2151 {{- if .Values.distributor.config.cost_attribution.enabled }}
2154 enabled: {{ .Values.distributor.config.cost_attribution.enabled }}
2155 max_cardinality: {{ .Values.distributor.config.cost_attribution.max_cardinality }}
2156 stale_duration: {{ .Values.distributor.config.cost_attribution.stale_duration }}
2162 {{- if or (.Values.traces.jaeger.thriftCompact.enabled) (.Values.traces.jaeger.thriftBinary.enabled) (.Values.traces.jaeger.thriftHttp.enabled) (.Values.traces.jaeger.grpc.enabled) }}
2165 {{- if .Values.traces.jaeger.thriftCompact.enabled }}
2167 {{- $mergedJaegerThriftCompactConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:6831") .Values.traces.jaeger.thriftCompact.receiverConfig }}
2168 {{- toYaml $mergedJaegerThriftCompactConfig | nindent 10 }}
2170 {{- if .Values.traces.jaeger.thriftBinary.enabled }}
2172 {{- $mergedJaegerThriftBinaryConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:6832") .Values.traces.jaeger.thriftBinary.receiverConfig }}
2173 {{- toYaml $mergedJaegerThriftBinaryConfig | nindent 10 }}
2175 {{- if .Values.traces.jaeger.thriftHttp.enabled }}
2177 {{- $mergedJaegerThriftHttpConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:14268") .Values.traces.jaeger.thriftHttp.receiverConfig }}
2178 {{- toYaml $mergedJaegerThriftHttpConfig | nindent 10 }}
2180 {{- if .Values.traces.jaeger.grpc.enabled }}
2182 {{- $mergedJaegerGrpcConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:14250") .Values.traces.jaeger.grpc.receiverConfig }}
2183 {{- toYaml $mergedJaegerGrpcConfig | nindent 10 }}
2186 {{- if .Values.traces.zipkin.enabled }}
2188 {{- $mergedZipkinReceiverConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:9411") .Values.traces.zipkin.receiverConfig }}
2189 {{- toYaml $mergedZipkinReceiverConfig | nindent 6 }}
2191 {{- if or (.Values.traces.otlp.http.enabled) (.Values.traces.otlp.grpc.enabled) }}
2194 {{- if .Values.traces.otlp.http.enabled }}
2196 {{- $mergedOtlpHttpReceiverConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:4318") .Values.traces.otlp.http.receiverConfig }}
2197 {{- toYaml $mergedOtlpHttpReceiverConfig | nindent 10 }}
2199 {{- if .Values.traces.otlp.grpc.enabled }}
2201 {{- $mergedOtlpGrpcReceiverConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:4317") .Values.traces.otlp.grpc.receiverConfig }}
2202 {{- toYaml $mergedOtlpGrpcReceiverConfig | nindent 10 }}
2205 {{- if .Values.traces.kafka }}
2207 {{- toYaml .Values.traces.kafka | nindent 6 }}
2209 {{- if .Values.distributor.config.log_discarded_spans.enabled }}
2210 log_discarded_spans:
2211 enabled: {{ .Values.distributor.config.log_discarded_spans.enabled }}
2212 include_all_attributes: {{ .Values.distributor.config.log_discarded_spans.include_all_attributes }}
2213 filter_by_status_error: {{ .Values.distributor.config.log_discarded_spans.filter_by_status_error }}
2215 {{- if or .Values.distributor.config.log_received_traces .Values.distributor.config.log_received_spans.enabled }}
2217 enabled: {{ or .Values.distributor.config.log_received_traces .Values.distributor.config.log_received_spans.enabled }}
2218 include_all_attributes: {{ .Values.distributor.config.log_received_spans.include_all_attributes }}
2219 filter_by_status_error: {{ .Values.distributor.config.log_received_spans.filter_by_status_error }}
2221 {{- if .Values.distributor.config.extend_writes }}
2222 extend_writes: {{ .Values.distributor.config.extend_writes }}
2224 {{- if not (eq .Values.distributor.config.max_attribute_bytes nil) }}
2225 max_attribute_bytes: {{ .Values.distributor.config.max_attribute_bytes }}
2229 frontend_address: {{ include "tempo.resourceName" (dict "ctx" . "component" "query-frontend-discovery") }}:9095
2230 {{- if .Values.querier.config.frontend_worker.grpc_client_config }}
2232 {{- toYaml .Values.querier.config.frontend_worker.grpc_client_config | nindent 6 }}
2235 query_timeout: {{ .Values.querier.config.trace_by_id.query_timeout }}
2237 query_timeout: {{ .Values.querier.config.search.query_timeout }}
2238 max_concurrent_queries: {{ .Values.querier.config.max_concurrent_queries }}
2240 {{- if not .Values.enterprise.enabled }}
2242 enabled: {{ .Values.queryFrontend.mcp_server.enabled }}
2244 max_outstanding_per_tenant: {{ .Values.queryFrontend.config.max_outstanding_per_tenant }}
2245 max_retries: {{ .Values.queryFrontend.config.max_retries }}
2247 target_bytes_per_job: {{ .Values.queryFrontend.config.search.target_bytes_per_job }}
2248 concurrent_jobs: {{ .Values.queryFrontend.config.search.concurrent_jobs }}
2249 max_spans_per_span_set: {{ .Values.queryFrontend.config.search.max_spans_per_span_set }}
2250 {{- with .Values.queryFrontend.config.search.max_result_limit }}
2251 max_result_limit: {{ . }}
2254 query_shards: {{ .Values.queryFrontend.config.trace_by_id.query_shards }}
2256 concurrent_jobs: {{ .Values.queryFrontend.config.metrics.concurrent_jobs }}
2257 target_bytes_per_job: {{ .Values.queryFrontend.config.metrics.target_bytes_per_job }}
2258 max_duration: {{ .Values.queryFrontend.config.metrics.max_duration }}
2259 query_backend_after: {{ .Values.queryFrontend.config.metrics.query_backend_after }}
2260 interval: {{ .Values.queryFrontend.config.metrics.interval }}
2261 duration_slo: {{ .Values.queryFrontend.config.metrics.duration_slo }}
2262 throughput_bytes_slo: {{ .Values.queryFrontend.config.metrics.throughput_bytes_slo }}
2263 {{- with .Values.ingest.kafka.address }}
2267 topic: {{ $.Values.ingest.kafka.topic }}
2268 auto_create_topic_enabled: {{ $.Values.ingest.kafka.auto_create_topic_enabled }}
2269 auto_create_topic_default_partitions: {{ $.Values.ingest.kafka.auto_create_topic_default_partitions }}
2271 SASL authentication. Tempo's Kafka client accepts a fixed set of
2272 sasl_mechanism values; anything else fails at startup. An empty mechanism
2273 means PLAIN, Tempo's default, which with no username/password leaves SASL
2274 disabled. sasl_mechanism is only rendered when set explicitly; the options
2275 that apply to the effective mechanism are rendered either way.
2277 {{- $sasl := $.Values.ingest.kafka.sasl | default dict }}
2278 {{- $mechanism := $sasl.mechanism | default "PLAIN" }}
2279 {{- $allowedMechanisms := list "PLAIN" "SCRAM-SHA-256" "SCRAM-SHA-512" "OAUTHBEARER" "AWS_MSK_IAM" }}
2280 {{- if not (has $mechanism $allowedMechanisms) }}
2281 {{- fail (printf "ingest.kafka.sasl.mechanism %q is invalid, must be one of: %s" $mechanism (join ", " $allowedMechanisms)) }}
2283 {{- $oauthbearer := $sasl.oauthbearer | default dict }}
2284 {{- $mskIam := $sasl.mskIam | default dict }}
2285 {{- /* Credentials for a mechanism other than the effective one would be silently ignored. */}}
2286 {{- $userPassMechanisms := list "PLAIN" "SCRAM-SHA-256" "SCRAM-SHA-512" }}
2287 {{- if and (not (has $mechanism $userPassMechanisms)) (or $sasl.existingSecret $sasl.username $sasl.password) }}
2288 {{- fail (printf "ingest.kafka.sasl.existingSecret/username/password only apply to PLAIN and SCRAM-SHA-*, but mechanism is %s" $mechanism) }}
2290 {{- if and (ne $mechanism "OAUTHBEARER") (or $oauthbearer.existingSecret $oauthbearer.token $oauthbearer.filePath $oauthbearer.httpSocketPath) }}
2291 {{- fail (printf "ingest.kafka.sasl.oauthbearer is configured, but mechanism is %s; set ingest.kafka.sasl.mechanism=OAUTHBEARER" $mechanism) }}
2293 {{- if and (ne $mechanism "AWS_MSK_IAM") (or $mskIam.existingSecret $mskIam.accessKey $mskIam.secretKey $mskIam.sessionToken $mskIam.filePath $mskIam.httpSocketPath) }}
2294 {{- fail (printf "ingest.kafka.sasl.mskIam is configured, but mechanism is %s; set ingest.kafka.sasl.mechanism=AWS_MSK_IAM" $mechanism) }}
2297 Mirror Tempo's startup validation so misconfigurations fail at install
2298 time instead of crash-looping: SCRAM-SHA-* needs credentials, PLAIN
2299 needs both or neither of username/password (neither disables SASL), and
2300 OAUTHBEARER/AWS_MSK_IAM need exactly one credential source. An
2301 existingSecret counts as the static credential source.
2303 {{- if or (eq $mechanism "PLAIN") (eq $mechanism "SCRAM-SHA-256") (eq $mechanism "SCRAM-SHA-512") }}
2304 {{- if and $sasl.existingSecret $sasl.password }}
2305 {{- fail "ingest.kafka.sasl: set either password or existingSecret, not both" }}
2307 {{- if not $sasl.existingSecret }}
2308 {{- if and $sasl.username (not $sasl.password) }}
2309 {{- fail "ingest.kafka.sasl: username needs password or existingSecret" }}
2311 {{- if and $sasl.password (not $sasl.username) }}
2312 {{- fail "ingest.kafka.sasl: password needs username" }}
2314 {{- if and (ne $mechanism "PLAIN") (not $sasl.username) }}
2315 {{- fail (printf "ingest.kafka.sasl.mechanism %s requires credentials: set ingest.kafka.sasl.existingSecret or username/password" $mechanism) }}
2318 {{- else if eq $mechanism "OAUTHBEARER" }}
2319 {{- $sources := list }}
2320 {{- if or $oauthbearer.existingSecret $oauthbearer.token }}{{ $sources = append $sources "existingSecret/token" }}{{ end }}
2321 {{- if $oauthbearer.filePath }}{{ $sources = append $sources "filePath" }}{{ end }}
2322 {{- if $oauthbearer.httpSocketPath }}{{ $sources = append $sources "httpSocketPath" }}{{ end }}
2323 {{- if ne (len $sources) 1 }}
2324 {{- fail (printf "ingest.kafka.sasl.oauthbearer: exactly one of existingSecret/token, filePath or httpSocketPath must be set (got: %s)" (join ", " $sources | default "none")) }}
2326 {{- else if eq $mechanism "AWS_MSK_IAM" }}
2327 {{- if and (not $mskIam.existingSecret) (or (and $mskIam.accessKey (not $mskIam.secretKey)) (and $mskIam.secretKey (not $mskIam.accessKey))) }}
2328 {{- fail "ingest.kafka.sasl.mskIam: accessKey and secretKey must both be set" }}
2330 {{- $sources := list }}
2331 {{- if or $mskIam.existingSecret $mskIam.accessKey }}{{ $sources = append $sources "existingSecret/accessKey+secretKey" }}{{ end }}
2332 {{- if $mskIam.filePath }}{{ $sources = append $sources "filePath" }}{{ end }}
2333 {{- if $mskIam.httpSocketPath }}{{ $sources = append $sources "httpSocketPath" }}{{ end }}
2334 {{- if ne (len $sources) 1 }}
2335 {{- 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)." "")) }}
2339 Secret credentials (password, oauthbearer.token, mskIam.accessKey/secretKey)
2340 are inlined into tempo.yaml only when no existingSecret is configured for
2341 the active mechanism; in that case the value ends up in plaintext in the
2342 rendered ConfigMap/Secret, so require configStorageType=Secret as a safety
2343 net. When existingSecret is set, the secret is injected via secretKeyRef on
2344 the pod spec and passed to tempo as a CLI flag (see tempo.podTemplate), so
2345 configStorageType can remain ConfigMap (even when sasl.username is set inline).
2347 {{- $inlinesCredential := false }}
2348 {{- if or (eq $mechanism "PLAIN") (eq $mechanism "SCRAM-SHA-256") (eq $mechanism "SCRAM-SHA-512") }}
2349 {{- if and (not $sasl.existingSecret) $sasl.password }}
2350 {{- $inlinesCredential = true }}
2352 {{- else if eq $mechanism "OAUTHBEARER" }}
2353 {{- if and (not $oauthbearer.existingSecret) $oauthbearer.token }}
2354 {{- $inlinesCredential = true }}
2356 {{- else if eq $mechanism "AWS_MSK_IAM" }}
2357 {{- if and (not $mskIam.existingSecret) (or $mskIam.accessKey $mskIam.secretKey) }}
2358 {{- $inlinesCredential = true }}
2361 {{- if and $inlinesCredential (not (eq $.Values.configStorageType "Secret")) }}
2362 {{- 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." }}
2364 {{- with $sasl.mechanism }}
2365 sasl_mechanism: {{ . }}
2367 {{- if or (eq $mechanism "PLAIN") (eq $mechanism "SCRAM-SHA-256") (eq $mechanism "SCRAM-SHA-512") }}
2368 {{- with $sasl.username }}
2369 sasl_username: {{ . | quote }}
2371 {{- if not $sasl.existingSecret }}
2372 {{- with $sasl.password }}
2373 sasl_password: {{ . | quote }}
2376 {{- else if eq $mechanism "OAUTHBEARER" }}
2377 {{- with $oauthbearer }}
2378 {{- if not .existingSecret }}
2380 sasl_oauthbearer_token: {{ . | quote }}
2384 sasl_oauthbearer_zid: {{ . | quote }}
2386 {{- with .extensions }}
2387 sasl_oauthbearer_extensions:
2388 {{- toYaml . | nindent 8 }}
2390 {{- with .filePath }}
2391 sasl_oauthbearer_file_path: {{ . | quote }}
2393 {{- with .httpSocketPath }}
2394 sasl_oauthbearer_http_socket_path: {{ . | quote }}
2396 {{- with .httpSocketTimeout }}
2397 sasl_oauthbearer_http_socket_timeout: {{ . }}
2400 {{- else if eq $mechanism "AWS_MSK_IAM" }}
2402 {{- if not .existingSecret }}
2403 {{- with .accessKey }}
2404 sasl_msk_iam_access_key: {{ . | quote }}
2406 {{- with .secretKey }}
2407 sasl_msk_iam_secret_key: {{ . | quote }}
2409 {{- with .sessionToken }}
2410 sasl_msk_iam_session_token: {{ . | quote }}
2413 {{- with .userAgent }}
2414 sasl_msk_iam_user_agent: {{ . | quote }}
2416 {{- with .filePath }}
2417 sasl_msk_iam_file_path: {{ . | quote }}
2419 {{- with .httpSocketPath }}
2420 sasl_msk_iam_http_socket_path: {{ . | quote }}
2422 {{- with .httpSocketTimeout }}
2423 sasl_msk_iam_http_socket_timeout: {{ . }}
2427 {{- /* TLS is independent of the SASL mechanism and can be combined with any of them. */}}
2428 {{- with $.Values.ingest.kafka.tls }}
2431 {{- with .certPath }}
2432 tls_cert_path: {{ . | quote }}
2434 {{- with .keyPath }}
2435 tls_key_path: {{ . | quote }}
2438 tls_ca_path: {{ . | quote }}
2440 {{- with .serverName }}
2441 tls_server_name: {{ . | quote }}
2443 {{- with .minVersion }}
2444 tls_min_version: {{ . }}
2446 {{- if .insecureSkipVerify }}
2447 tls_insecure_skip_verify: true
2453 {{- with .Values.memberlist }}
2454 {{- toYaml . | nindent 2 }}
2457 - dns+{{ include "tempo.fullname" . }}-gossip-ring:{{ .Values.memberlist.bind_port }}
2459 {{- toYaml .Values.overrides | nindent 2 }}
2461 http_listen_port: {{ .Values.server.httpListenPort }}
2462 log_level: {{ .Values.server.logLevel }}
2463 log_format: {{ .Values.server.logFormat }}
2464 grpc_server_max_recv_msg_size: {{ .Values.server.grpc_server_max_recv_msg_size }}
2465 grpc_server_max_send_msg_size: {{ .Values.server.grpc_server_max_send_msg_size }}
2466 http_server_read_timeout: {{ .Values.server.http_server_read_timeout }}
2467 http_server_write_timeout: {{ .Values.server.http_server_write_timeout }}
2469 {{- include "tempo.cacheConfig" . | nindent 2}}
2472 {{- if .Values.storage.trace.block.version }}
2474 version: {{.Values.storage.trace.block.version}}
2475 {{- if .Values.storage.trace.block.dedicated_columns}}
2476 parquet_dedicated_columns:
2477 {{ .Values.storage.trace.block.dedicated_columns | toYaml | nindent 8}}
2481 max_workers: {{ .Values.storage.trace.pool.max_workers }}
2482 queue_depth: {{ .Values.storage.trace.pool.queue_depth }}
2483 backend: {{.Values.storage.trace.backend}}
2484 {{- if eq .Values.storage.trace.backend "s3"}}
2486 {{- toYaml .Values.storage.trace.s3 | nindent 6}}
2488 {{- if eq .Values.storage.trace.backend "gcs"}}
2490 {{- toYaml .Values.storage.trace.gcs | nindent 6}}
2492 {{- if eq .Values.storage.trace.backend "azure"}}
2494 {{- toYaml .Values.storage.trace.azure | nindent 6}}
2498 path: /var/tempo/traces
2500 path: /var/tempo/wal
2502 {{- toYaml .Values.storage.trace.search | nindent 6}}
2504 {{- if .Values.storage.trace.blocklist_poll }}
2505 blocklist_poll: {{ .Values.storage.trace.blocklist_poll }}
2507 {{- if .Values.storage.trace.blocklist_poll_concurrency }}
2508 blocklist_poll_concurrency: {{ .Values.storage.trace.blocklist_poll_concurrency }}
2510 {{- if .Values.storage.trace.blocklist_poll_fallback }}
2511 blocklist_poll_fallback: {{ .Values.storage.trace.blocklist_poll_fallback }}
2513 {{- if .Values.storage.trace.blocklist_poll_tenant_index_builders }}
2514 blocklist_poll_tenant_index_builders: {{ .Values.storage.trace.blocklist_poll_tenant_index_builders }}
2516 {{- if .Values.storage.trace.blocklist_poll_stale_tenant_index }}
2517 blocklist_poll_stale_tenant_index: {{ .Values.storage.trace.blocklist_poll_stale_tenant_index }}
2519 {{- if .Values.storage.trace.empty_tenant_deletion_age }}
2520 empty_tenant_deletion_age: {{ .Values.storage.trace.empty_tenant_deletion_age }}
2522 {{- if .Values.storage.trace.empty_tenant_deletion_enabled }}
2523 empty_tenant_deletion_enabled: {{ .Values.storage.trace.empty_tenant_deletion_enabled }}
2525# Set Tempo server configuration
2526# Refers to https://grafana.com/docs/tempo/latest/configuration/#server
2528 # -- HTTP server listen host
2529 httpListenPort: 3200
2530 # -- Log level. Can be set to debug, info (default), warn, error
2532 # -- Log format. Can be set to logfmt (default) or json.
2534 # -- Max gRPC message size that can be received
2535 grpc_server_max_recv_msg_size: 4194304
2536 # -- Max gRPC message size that can be sent
2537 grpc_server_max_send_msg_size: 4194304
2538 # -- Read timeout for HTTP server
2539 http_server_read_timeout: 30s
2540 # -- Write timeout for HTTP server
2541 http_server_write_timeout: 30s
2542# Use this block to configure caches available throughout the application.
2543# Multiple caches can be created and assigned roles which determine how they are used by Tempo.
2544# https://grafana.com/docs/tempo/latest/configuration/#cache
2545# When memcached.enabled is true (the default), the cache.caches list is auto-generated from the
2546# memcached and per-role memcached sections (memcachedBloom, memcachedParquetFooter, memcachedFrontendSearch).
2547# When memcached.enabled is false, this block is passed through verbatim to allow configuring external caches.
2551 host: '{{ include "tempo.fullname" . }}-memcached'
2552 service: memcached-client
2553 consistent_hash: true
2559# To configure a different storage backend instead of local storage:
2565# storage_account_name:
2566# storage_account_key:
2569 # Settings for the block storage backend and buckets.
2571 # -- The supported block versions are specified here https://grafana.com/docs/tempo/latest/configuration/parquet/
2573 # -- Lis with dedicated attribute columns (only for vParquet3 or later)
2574 dedicated_columns: []
2575 # -- The supported storage backends are gcs, s3 and azure, as specified in https://grafana.com/docs/tempo/latest/configuration/#storage
2577 # The worker pool is used primarily when finding traces by id, but is also used by others.
2579 # -- Total number of workers pulling jobs from the queue
2581 # -- Length of job queue. imporatant for querier as it queues a job for every block it has to search
2583 # The supported search are specified here https://grafana.com/docs/tempo/latest/configuration/#search-config
2585 # -- Number of traces to prefetch while scanning blocks. Increasing this value can improve trace search performance at the cost of memory.
2586 prefetch_trace_count: 1000
2587 # -- How often to repoll the backend for new blocks
2589 # -- Number of blocks to process in parallel during polling.
2590 blocklist_poll_concurrency: null
2591 # -- By default components will pull the blocklist from the tenant index. If that fails the component can
2592 # -- fallback to scanning the entire bucket. Set to false to disable this behavior.
2593 blocklist_poll_fallback: null
2594 # -- Maximum number of compactors that should build the tenant index. All other components will download the index.
2595 blocklist_poll_tenant_index_builders: null
2596 # -- The oldest allowable tenant index.
2597 blocklist_poll_stale_tenant_index: null
2598 # -- How fast the poller will delete a tenant if it is empty. Will need to be enabled in 'empty_tenant_deletion_enabled'.
2599 empty_tenant_deletion_age: null
2600 # -- Delete empty tenants.
2601 empty_tenant_deletion_enabled: null
2602 # Settings for the Admin client storage backend and buckets. Only valid is enterprise.enabled is true
2604 # -- The supported storage backends are gcs, s3 and azure, as specified in https://grafana.com/docs/enterprise-traces/latest/configure/reference/#admin_client_config
2606# -- 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.
2608 # -- 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
2610 # -- 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.
2611 per_tenant_override_config: /runtime-config/overrides.yaml
2612# -- 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.
2613per_tenant_overrides:
2620# memcached is for all of the Tempo pieces to coordinate with each other.
2621# you can use your own self deployed memcached by setting `memcached.enabled` to false and `memcached.host` + `memcached.service`
2623 # -- Specified whether the memcached cachce should be enabled
2626 # -- The Docker registry for the Memcached image. Overrides `global.image.registry`
2628 # -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
2630 # -- Memcached Docker image repository
2631 repository: chainguard-private/memcached-fips
2632 # -- Memcached Docker image tag
2633 tag: 1.6.45-r5@sha256:a847a3023f9a754bb8f6d0dac77a99a3a1dced91934916e554d944ad096c99a0
2634 # -- Memcached Docker image pull policy
2635 pullPolicy: IfNotPresent
2637 # Number of replicas for memchached
2639 # -- Timeout for cache operations
2641 # -- Enable consistent hashing for cache
2642 consistentHash: true
2643 # -- Additional CLI args for memcached
2645 # -- Toleration for memcached pods
2647 # -- Environment variables to add to memcached pods
2649 # -- Environment variables from secrets or configmaps to add to memcached pods
2651 # -- Labels for memcached pods
2653 # -- Annotations for memcached pods
2655 # -- Resource requests and limits for memcached
2657 # -- topologySpread for memcached pods. Passed through `tpl` and, thus, to be configured as string
2658 # @default -- Defaults to allow skew no more than 1 node per AZ
2659 topologySpreadConstraints: |
2661 topologyKey: topology.kubernetes.io/zone
2662 whenUnsatisfiable: ScheduleAnyway
2665 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached") | nindent 6 }}
2666 # -- Affinity for memcached pods. Passed through `tpl` and, thus, to be configured as string
2667 # @default -- Hard node and soft zone anti-affinity
2670 requiredDuringSchedulingIgnoredDuringExecution:
2673 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached") | nindent 10 }}
2674 topologyKey: kubernetes.io/hostname
2675 preferredDuringSchedulingIgnoredDuringExecution:
2680 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached") | nindent 12 }}
2681 topologyKey: topology.kubernetes.io/zone
2682 # -- Pod Disruption Budget configuration
2683 podDisruptionBudget:
2684 # -- Enable PodDisruptionBudget for memcached
2686 # -- Set unhealthyPodEvictionPolicy for the memcached PodDisruptionBudget. Requires policy/v1.
2687 unhealthyPodEvictionPolicy: ""
2688 # -- Pod Disruption Budget maxUnavailable
2690 # -- Init containers for the memcached pod
2692 # -- Containers to add to the memcached pods
2694 # -- Extra volumes for memcached pods
2695 extraVolumeMounts: []
2696 # -- Extra volumes for memcached statefulSet
2699 # -- Annotations for memcached service
2701 # -- configuration for readiness probe for memcached statefulset
2705 initialDelaySeconds: 5
2710 # -- configuration for liveness probe for memcached statefulset
2712 initialDelaySeconds: 30
2718 # -- Specifies whether the Memcached Exporter should be enabled
2720 # -- hostAliases to add
2726 # -- The Docker registry for the Memcached Exporter image. Overrides `global.image.registry`
2728 # -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
2730 # -- Memcached Exporter Docker image repository
2731 repository: prom/memcached-exporter
2732 # -- Memcached Exporter Docker image tag
2734 # -- Memcached Exporter Docker image pull policy
2735 pullPolicy: IfNotPresent
2736 # -- Memcached Exporter resource requests and limits
2738 # -- Additional CLI args for the memcached exporter
2740# -- Configuration for a dedicated memcached cluster for the bloom cache role.
2741# When enabled, bloom cache is served by its own memcached StatefulSet.
2742# Image is shared with the main `memcached` section.
2744 # -- Enable a dedicated memcached cluster for the bloom cache role
2746 # -- Annotations for the memcached-bloom StatefulSet
2748 # -- Number of replicas for the bloom memcached StatefulSet
2750 # -- Timeout for bloom cache operations
2752 # -- Enable consistent hashing for bloom cache
2753 consistentHash: true
2754 # -- Additional CLI args for memcached
2756 # -- Tolerations for memcached-bloom pods
2758 # -- Environment variables to add to memcached-bloom pods
2760 # -- Environment variables from secrets or configmaps to add to memcached-bloom pods
2762 # -- Labels for memcached-bloom pods
2764 # -- Annotations for memcached-bloom pods
2766 # -- Resource requests and limits for memcached-bloom
2768 # -- topologySpread for memcached-bloom pods. Passed through `tpl` and, thus, to be configured as string
2769 # @default -- Defaults to allow skew no more than 1 node per AZ
2770 topologySpreadConstraints: |
2772 topologyKey: topology.kubernetes.io/zone
2773 whenUnsatisfiable: ScheduleAnyway
2776 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-bloom") | nindent 6 }}
2777 # -- Affinity for memcached-bloom pods. Passed through `tpl` and, thus, to be configured as string
2778 # @default -- Hard node and soft zone anti-affinity
2781 requiredDuringSchedulingIgnoredDuringExecution:
2784 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-bloom") | nindent 10 }}
2785 topologyKey: kubernetes.io/hostname
2786 preferredDuringSchedulingIgnoredDuringExecution:
2791 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-bloom") | nindent 12 }}
2792 topologyKey: topology.kubernetes.io/zone
2793 # -- Pod Disruption Budget configuration
2794 podDisruptionBudget:
2795 # -- Enable PodDisruptionBudget for memcached-bloom
2797 # -- Pod Disruption Budget maxUnavailable
2799 # -- Init containers for the memcached-bloom pod
2801 # -- Containers to add to the memcached-bloom pods
2803 # -- Extra volume mounts for memcached-bloom pods
2804 extraVolumeMounts: []
2805 # -- Extra volumes for memcached-bloom StatefulSet
2808 # -- Annotations for memcached-bloom service
2810 # -- configuration for readiness probe for memcached-bloom statefulset
2814 initialDelaySeconds: 5
2819 # -- configuration for liveness probe for memcached-bloom statefulset
2821 initialDelaySeconds: 30
2826# -- Configuration for a dedicated memcached cluster for the parquet-footer cache role.
2827# When enabled, parquet-footer cache is served by its own memcached StatefulSet.
2828# Image is shared with the main `memcached` section.
2829memcachedParquetFooter:
2830 # -- Enable a dedicated memcached cluster for the parquet-footer cache role
2832 # -- Annotations for the memcached-parquet-footer StatefulSet
2834 # -- Number of replicas for the parquet-footer memcached StatefulSet
2836 # -- Timeout for parquet-footer cache operations
2838 # -- Enable consistent hashing for parquet-footer cache
2839 consistentHash: true
2840 # -- Additional CLI args for memcached
2842 # -- Tolerations for memcached-parquet-footer pods
2844 # -- Environment variables to add to memcached-parquet-footer pods
2846 # -- Environment variables from secrets or configmaps to add to memcached-parquet-footer pods
2848 # -- Labels for memcached-parquet-footer pods
2850 # -- Annotations for memcached-parquet-footer pods
2852 # -- Resource requests and limits for memcached-parquet-footer
2854 # -- topologySpread for memcached-parquet-footer pods. Passed through `tpl` and, thus, to be configured as string
2855 # @default -- Defaults to allow skew no more than 1 node per AZ
2856 topologySpreadConstraints: |
2858 topologyKey: topology.kubernetes.io/zone
2859 whenUnsatisfiable: ScheduleAnyway
2862 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-parquet-footer") | nindent 6 }}
2863 # -- Affinity for memcached-parquet-footer pods. Passed through `tpl` and, thus, to be configured as string
2864 # @default -- Hard node and soft zone anti-affinity
2867 requiredDuringSchedulingIgnoredDuringExecution:
2870 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-parquet-footer") | nindent 10 }}
2871 topologyKey: kubernetes.io/hostname
2872 preferredDuringSchedulingIgnoredDuringExecution:
2877 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-parquet-footer") | nindent 12 }}
2878 topologyKey: topology.kubernetes.io/zone
2879 # -- Pod Disruption Budget configuration
2880 podDisruptionBudget:
2881 # -- Enable PodDisruptionBudget for memcached-parquet-footer
2883 # -- Pod Disruption Budget maxUnavailable
2885 # -- Init containers for the memcached-parquet-footer pod
2887 # -- Containers to add to the memcached-parquet-footer pods
2889 # -- Extra volume mounts for memcached-parquet-footer pods
2890 extraVolumeMounts: []
2891 # -- Extra volumes for memcached-parquet-footer StatefulSet
2894 # -- Annotations for memcached-parquet-footer service
2896 # -- configuration for readiness probe for memcached-parquet-footer statefulset
2900 initialDelaySeconds: 5
2905 # -- configuration for liveness probe for memcached-parquet-footer statefulset
2907 initialDelaySeconds: 30
2912# -- Configuration for a dedicated memcached cluster for the frontend-search cache role.
2913# When enabled, frontend-search cache is served by its own memcached StatefulSet.
2914# Image is shared with the main `memcached` section.
2915memcachedFrontendSearch:
2916 # -- Enable a dedicated memcached cluster for the frontend-search cache role
2918 # -- Annotations for the memcached-frontend-search StatefulSet
2920 # -- Number of replicas for the frontend-search memcached StatefulSet
2922 # -- Timeout for frontend-search cache operations
2924 # -- Enable consistent hashing for frontend-search cache
2925 consistentHash: true
2926 # -- Additional CLI args for memcached
2928 # -- Tolerations for memcached-frontend-search pods
2930 # -- Environment variables to add to memcached-frontend-search pods
2932 # -- Environment variables from secrets or configmaps to add to memcached-frontend-search pods
2934 # -- Labels for memcached-frontend-search pods
2936 # -- Annotations for memcached-frontend-search pods
2938 # -- Resource requests and limits for memcached-frontend-search
2940 # -- topologySpread for memcached-frontend-search pods. Passed through `tpl` and, thus, to be configured as string
2941 # @default -- Defaults to allow skew no more than 1 node per AZ
2942 topologySpreadConstraints: |
2944 topologyKey: topology.kubernetes.io/zone
2945 whenUnsatisfiable: ScheduleAnyway
2948 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-frontend-search") | nindent 6 }}
2949 # -- Affinity for memcached-frontend-search pods. Passed through `tpl` and, thus, to be configured as string
2950 # @default -- Hard node and soft zone anti-affinity
2953 requiredDuringSchedulingIgnoredDuringExecution:
2956 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-frontend-search") | nindent 10 }}
2957 topologyKey: kubernetes.io/hostname
2958 preferredDuringSchedulingIgnoredDuringExecution:
2963 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-frontend-search") | nindent 12 }}
2964 topologyKey: topology.kubernetes.io/zone
2965 # -- Pod Disruption Budget configuration
2966 podDisruptionBudget:
2967 # -- Enable PodDisruptionBudget for memcached-frontend-search
2969 # -- Pod Disruption Budget maxUnavailable
2971 # -- Init containers for the memcached-frontend-search pod
2973 # -- Containers to add to the memcached-frontend-search pods
2975 # -- Extra volume mounts for memcached-frontend-search pods
2976 extraVolumeMounts: []
2977 # -- Extra volumes for memcached-frontend-search StatefulSet
2980 # -- Annotations for memcached-frontend-search service
2982 # -- configuration for readiness probe for memcached-frontend-search statefulset
2986 initialDelaySeconds: 5
2991 # -- configuration for liveness probe for memcached-frontend-search statefulset
2993 initialDelaySeconds: 30
2999 # ServiceMonitor configuration
3001 # -- If enabled, ServiceMonitor resources for Prometheus Operator are created
3003 # -- Alternative namespace for ServiceMonitor resources
3005 # -- Namespace selector for ServiceMonitor resources
3006 namespaceSelector: {}
3007 # -- ServiceMonitor annotations
3009 # -- Additional ServiceMonitor labels
3011 # -- ServiceMonitor scrape interval
3013 # -- ServiceMonitor scrape timeout in Go duration format (e.g. 15s)
3015 # -- ServiceMonitor relabel configs to apply to samples before scraping
3016 # https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#relabelconfig
3018 # -- ServiceMonitor metric relabel configs to apply to samples before ingestion
3019 # https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#endpoint
3020 metricRelabelings: []
3021 # -- ServiceMonitor will use http by default, but you can pick https as well
3023 # -- ServiceMonitor will use these tlsConfig settings to make the health check requests
3025 # metaMonitoringAgent configures the built in Grafana Agent that can scrape metrics and logs and send them to a local or remote destination
3027 # -- Controls whether to create PodLogs, MetricsInstance, LogsInstance, and GrafanaAgent CRs to scrape the
3028 # ServiceMonitors of the chart and ship metrics and logs to the remote endpoints below.
3029 # Note that you need to configure serviceMonitor in order to have some metrics available.
3031 # -- Controls whether to install the Grafana Agent Operator and its CRDs.
3032 # Note that helm will not install CRDs if this flag is enabled during an upgrade.
3033 # In that case install the CRDs manually from https://github.com/grafana/agent/tree/main/production/operator/crds
3034 installOperator: false
3036 # -- Default destination for logs. The config here is translated to Promtail client
3037 # configuration to write logs to this Loki-compatible remote. Optional.
3039 # -- Full URL for Loki push endpoint. Usually ends in /loki/api/v1/push
3042 # -- Used to set X-Scope-OrgID header on requests. Usually not used in combination with username and password.
3044 # -- Basic authentication username. Optional.
3046 # -- The value under key passwordSecretKey in this secret will be used as the basic authentication password. Required only if passwordSecretKey is set.
3047 passwordSecretName: ''
3048 # -- The value under this key in passwordSecretName will be used as the basic authentication password. Required only if passwordSecretName is set.
3049 passwordSecretKey: ''
3050 # -- Client configurations for the LogsInstance that will scrape Mimir pods. Follows the format of .remote.
3051 additionalClientConfigs: []
3053 # -- Default destination for metrics. The config here is translated to remote_write
3054 # configuration to push metrics to this Prometheus-compatible remote. Optional.
3055 # Note that you need to configure serviceMonitor in order to have some metrics available.
3057 # -- Full URL for Prometheus remote-write. Usually ends in /push
3059 # -- Used to add HTTP headers to remote-write requests.
3062 # -- Basic authentication username. Optional.
3064 # -- The value under key passwordSecretKey in this secret will be used as the basic authentication password. Required only if passwordSecretKey is set.
3065 passwordSecretName: ''
3066 # -- The value under this key in passwordSecretName will be used as the basic authentication password. Required only if passwordSecretName is set.
3067 passwordSecretKey: ''
3068 # -- Additional remote-write for the MetricsInstance that will scrape Mimir pods. Follows the format of .remote.
3069 additionalRemoteWriteConfigs: []
3071 # -- When grafanaAgent.enabled and serviceMonitor.enabled, controls whether to create ServiceMonitors CRs
3072 # for cadvisor, kubelet, and kube-state-metrics. The scraped metrics are reduced to those pertaining to
3075 # -- Controls service discovery of kube-state-metrics.
3077 namespace: kube-system
3079 app.kubernetes.io/name: kube-state-metrics
3080 # -- Sets the namespace of the resources. Leave empty or unset to use the same namespace as the Helm release.
3082 # -- Labels to add to all monitoring.grafana.com custom resources.
3083 # Does not affect the ServiceMonitors for kubernetes metrics; use serviceMonitor.labels for that.
3085 # -- Annotations to add to all monitoring.grafana.com custom resources.
3086 # Does not affect the ServiceMonitors for kubernetes metrics; use serviceMonitor.annotations for that.
3088# Rules for the Prometheus Operator
3090 # -- If enabled, a PrometheusRule resource for Prometheus Operator is created
3092 # -- Alternative namespace for the PrometheusRule resource
3094 # -- PrometheusRule annotations
3096 # -- Additional PrometheusRule labels
3098 # -- Contents of Prometheus rules file
3100 # - name: loki-rules
3102 # - record: job:loki_request_duration_seconds_bucket:sum_rate
3103 # expr: sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, job)
3104 # - record: job_route:loki_request_duration_seconds_bucket:sum_rate
3105 # expr: sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, job, route)
3106 # - record: node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate
3107 # expr: sum(rate(container_cpu_usage_seconds_total[1m])) by (node, namespace, pod, container)
3108# Configuration for the gateway
3110 # -- Specifies whether the gateway should be enabled
3112 # -- Number of replicas for the gateway
3114 # -- hostAliases to add
3120 # -- Enable autoscaling for the gateway
3122 # -- Minimum autoscaling replicas for the gateway
3124 # -- Maximum autoscaling replicas for the gateway
3126 # -- Autoscaling behavior configuration for the gateway
3128 # -- Target CPU utilisation percentage for the gateway
3129 targetCPUUtilizationPercentage: 60
3130 # -- Target memory utilisation percentage for the gateway
3131 targetMemoryUtilizationPercentage:
3132 # -- Enable logging of 2xx and 3xx HTTP requests
3133 verboseLogging: true
3135 # -- The Docker registry for the gateway image. Overrides `global.image.registry`
3137 # -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
3139 # -- The gateway image repository
3140 repository: nginxinc/nginx-unprivileged
3141 # -- The gateway image tag
3143 # -- The gateway image pull policy
3144 pullPolicy: IfNotPresent
3145 # -- The name of the PriorityClass for gateway pods
3146 priorityClassName: null
3147 # -- Labels for gateway pods
3149 # -- Annotations for gateway deployment
3151 # -- Annotations for gateway pods
3153 # -- Additional CLI args for the gateway
3155 # -- Environment variables to add to the gateway pods
3157 # -- Environment variables from secrets or configmaps to add to the gateway pods
3159 # -- Volumes to add to the gateway pods
3161 # -- Volume mounts to add to the gateway pods
3162 extraVolumeMounts: []
3163 # -- Containers to add to the gateway pods
3165 # -- Resource requests and limits for the gateway
3167 # -- Grace period to allow the gateway to shutdown before it is killed
3168 terminationGracePeriodSeconds: 30
3169 # -- Container lifecycle hooks for the gateway
3171 # -- Strategy of updating the gateway pods
3173 # -- topologySpread for gateway pods. Passed through `tpl` and, thus, to be configured as string
3174 # @default -- Defaults to allow skew no more than 1 node per AZ
3175 topologySpreadConstraints: |
3177 topologyKey: topology.kubernetes.io/zone
3178 whenUnsatisfiable: ScheduleAnyway
3181 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "gateway") | nindent 6 }}
3182 # -- Affinity for gateway pods. Passed through `tpl` and, thus, to be configured as string
3183 # @default -- Soft node and soft zone anti-affinity
3186 preferredDuringSchedulingIgnoredDuringExecution:
3191 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "gateway") | nindent 12 }}
3192 topologyKey: kubernetes.io/hostname
3197 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "gateway") | nindent 12 }}
3198 topologyKey: topology.kubernetes.io/zone
3199 # -- Pod Disruption Budget configuration
3200 podDisruptionBudget:
3201 # -- Enable PodDisruptionBudget for gateway
3203 # -- Set unhealthyPodEvictionPolicy for the gateway PodDisruptionBudget. Requires policy/v1.
3204 unhealthyPodEvictionPolicy: ""
3205 # -- Pod Disruption Budget maxUnavailable
3207 # -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
3209 # -- Node selector for gateway pods
3211 # -- Tolerations for gateway pods
3213 # Gateway service configuration
3215 # -- Port of the gateway service
3217 # -- Type of the gateway service
3219 # -- Traffic distribution for the gateway service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
3220 trafficDistribution: null
3221 # -- ClusterIP of the gateway service
3223 # -- Node port if service type is NodePort
3225 # -- Node port for the gRPC port if service type is NodePort
3227 # -- Load balancer IP address if service type is LoadBalancer
3228 loadBalancerIP: null
3229 # -- Annotations for the gateway service
3231 # -- Labels for gateway service
3233 # -- Additional ports to be opened on gateway service (e.g. for RPC connections)
3235 # Gateway ingress configuration
3237 # -- Specifies whether an ingress for the gateway should be created
3239 # -- Labels for the gateway ingress
3241 # -- Ingress Class Name. MAY be required for Kubernetes versions >= 1.18
3242 # ingressClassName: nginx
3243 # -- Annotations for the gateway ingress
3245 # -- Hosts configuration for the gateway ingress
3247 - host: gateway.tempo.example.com
3250 # -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
3252 # -- TLS configuration for the gateway ingress
3254 - secretName: tempo-gateway-tls
3256 - gateway.tempo.example.com
3257 # -- Gateway API route configuration for the gateway.
3258 # Multiple routes can be added by adding a dictionary key like the 'main' route.
3261 # -- Specifies whether a Gateway API route for the gateway should be created
3263 # -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1beta1
3264 # If not set, the latest available version will be auto-detected
3266 # -- Set the route kind
3267 # Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute
3269 # -- Route annotations
3273 # -- Hostnames for the route
3275 # - gateway.tempo.example.com
3276 # -- Parent references (gateway to attach to)
3278 # - name: my-gateway
3279 # namespace: gateway-namespace
3280 # -- Matches define conditions for matching incoming requests
3285 # -- Timeouts define the timeouts that can be configured for an HTTP request.
3286 # Ref. https://gateway-api.sigs.k8s.io/api-types/httproute/#timeouts-optional
3288 # -- Filters define the filters that are applied to requests that match this rule.
3290 # -- Additional custom rules that can be added to the route
3292 # Basic auth configuration
3294 # -- Enables basic authentication for the gateway
3296 # -- The basic auth username for the gateway
3298 # -- The basic auth password for the gateway
3300 # -- Uses the specified username and password to compute a htpasswd using Sprig's `htpasswd` function.
3301 # The value is templated using `tpl`. Override this to use a custom htpasswd, e.g. in case the default causes
3304 {{ htpasswd (required "'gateway.basicAuth.username' is required" .Values.gateway.basicAuth.username) (required "'gateway.basicAuth.password' is required" .Values.gateway.basicAuth.password) }}
3305 # -- Existing basic auth secret to use. Must contain '.htpasswd'
3306 existingSecret: null
3307 # Configures the liveness probe for the gateway
3312 initialDelaySeconds: 30
3314 # Configures the readiness probe for the gateway
3319 initialDelaySeconds: 15
3322 # -- NGINX log format
3324 main '$remote_addr - $remote_user [$time_local] $status '
3325 '"$request" $body_bytes_sent "$http_referer" '
3326 '"$http_user_agent" "$http_x_forwarded_for"';
3327 # -- Allows appending custom configuration to the main context
3329 # -- Allows appending custom configuration to the server block
3331 # -- Allows appending custom configuration to the http block
3333 # -- Whether ssl should be appended to the listen directive of the server block or not.
3335 # -- 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.
3337 # -- Allows overriding the DNS resolver address nginx will use
3339 # -- Configures whether or not NGINX bind IPv6
3341 # -- Config file contents for Nginx. Passed through the `tpl` function to allow templating
3342 # @default -- See values.yaml
3344 worker_processes 5; ## Default: 1
3345 error_log /dev/stderr;
3347 worker_rlimit_nofile 8192;
3349 {{- with .Values.gateway.nginxConfig.mainSnippet }}
3354 worker_connections 4096; ## Default: 1024
3358 client_body_temp_path /tmp/client_temp;
3359 proxy_temp_path /tmp/proxy_temp_path;
3360 fastcgi_temp_path /tmp/fastcgi_temp;
3361 uwsgi_temp_path /tmp/uwsgi_temp;
3362 scgi_temp_path /tmp/scgi_temp;
3364 proxy_http_version 1.1;
3366 default_type application/octet-stream;
3367 log_format {{ .Values.gateway.nginxConfig.logFormat }}
3369 {{- if .Values.gateway.verboseLogging }}
3370 access_log /dev/stderr main;
3373 map $status $loggable {
3377 access_log /dev/stderr main if=$loggable;
3382 {{- if .Values.gateway.nginxConfig.resolver }}
3383 resolver {{ .Values.gateway.nginxConfig.resolver }};
3385 resolver {{ .Values.global.dnsService }}.{{ .Values.global.dnsNamespace }}.svc.{{ .Values.global.clusterDomain }};
3388 {{- with .Values.gateway.nginxConfig.httpSnippet }}
3393 listen 8080 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3394 {{- if .Values.gateway.nginxConfig.enableIPv6 }}
3395 listen [::]:8080 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3398 {{- if .Values.streamOverHTTPEnabled }}
3400 location /tempopb.StreamingQuerier/ {
3401 set $query_frontend {{ include "tempo.resourceName" (dict "ctx" . "component" "query-frontend") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3402 grpc_pass grpc://$query_frontend:3200;
3406 {{- if .Values.gateway.basicAuth.enabled }}
3408 auth_basic_user_file /etc/nginx/secrets/.htpasswd;
3416 location = /jaeger/api/traces {
3417 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3418 proxy_pass http://$distributor:14268/api/traces;
3421 location = /zipkin/spans {
3422 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3423 proxy_pass http://$distributor:9411/spans;
3426 location = /v1/traces {
3427 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3428 proxy_pass http://$distributor:4318/v1/traces;
3431 location = /otlp/v1/traces {
3432 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3433 proxy_pass http://$distributor:4318/v1/traces;
3437 set $query_frontend {{ include "tempo.resourceName" (dict "ctx" . "component" "query-frontend") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3438 proxy_pass http://$query_frontend:3200$request_uri;
3442 set $ingester {{ include "tempo.resourceName" (dict "ctx" . "component" "ingester") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3443 proxy_pass http://$ingester:3200$request_uri;
3446 location = /shutdown {
3447 set $ingester {{ include "tempo.resourceName" (dict "ctx" . "component" "ingester") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3448 proxy_pass http://$ingester:3200$request_uri;
3451 location = /distributor/ring {
3452 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3453 proxy_pass http://$distributor:3200$request_uri;
3456 location = /ingester/ring {
3457 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3458 proxy_pass http://$distributor:3200$request_uri;
3461 location = /compactor/ring {
3462 set $compactor {{ include "tempo.resourceName" (dict "ctx" . "component" "compactor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3463 proxy_pass http://$compactor:3200$request_uri;
3466 {{- if .Values.backendScheduler.enabled }}
3467 location = /backend-worker/ring {
3468 set $backend_worker {{ include "tempo.resourceName" (dict "ctx" . "component" "backend-worker") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3469 proxy_pass http://$backend_worker:3200$request_uri;
3473 {{- if .Values.gateway.nginxConfig.ssl }}
3474 ssl_certificate /etc/nginx/ssl/tls.crt;
3475 ssl_certificate_key /etc/nginx/ssl/tls.key;
3478 {{- with .Values.gateway.nginxConfig.serverSnippet }}
3483 {{- if .Values.traces.otlp.grpc.enabled }}
3486 listen {{ .Values.traces.otlp.grpc.port }} http2 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3487 {{- if .Values.gateway.nginxConfig.enableIPv6 }}
3488 listen [::]:{{ .Values.traces.otlp.grpc.port }} http2 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3491 {{- if .Values.gateway.basicAuth.enabled }}
3493 auth_basic_user_file /etc/nginx/secrets/.htpasswd;
3496 location = /opentelemetry.proto.collector.trace.v1.TraceService/Export {
3497 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3498 grpc_pass grpc://$distributor:{{ .Values.traces.otlp.grpc.port }};
3501 location ~ /opentelemetry {
3502 set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3503 grpc_pass grpc://$distributor:{{ .Values.traces.otlp.grpc.port }};
3506 {{- if .Values.gateway.nginxConfig.ssl }}
3507 ssl_certificate /etc/nginx/ssl/tls.crt;
3508 ssl_certificate_key /etc/nginx/ssl/tls.key;
3511 {{- with .Values.gateway.nginxConfig.serverSnippet }}
3518 # -- If you enable this, make sure to disable the gateway's ingress.
3520 # ingressClassName: nginx
3526 - path: /distributor/ring
3527 # -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
3529 - path: /live-store/ring
3530 - path: /partition-ring
3531 - path: /metrics-generator/ring
3536 - path: /status/backendscheduler
3539# -- Gateway API route configuration.
3540# Multiple routes can be added by adding a dictionary key like the 'main' route.
3541# This is useful for creating both HTTPRoute and GRPCRoute resources (e.g. for OTLP HTTP + gRPC).
3544 # -- Specifies whether a Gateway API route should be created
3546 # -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1beta1
3547 # If not set, the latest available version will be auto-detected
3549 # -- Set the route kind
3550 # Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute
3552 # -- Route annotations
3556 # -- Hostnames for the route
3558 # - tempo.example.com
3559 # -- Parent references (gateway to attach to)
3561 # - name: my-gateway
3562 # namespace: gateway-namespace
3563 # -- Paths to route to backend services. Each key is a service name suffix, and the value is a list of path matches.
3567 # -- pathType for the match (e.g. PathPrefix, Exact)
3568 pathType: PathPrefix
3569 # -- OTLP HTTP receiver port. This path is only rendered when traces.otlp.http.enabled is true.
3571 - path: /distributor/ring
3572 pathType: PathPrefix
3573 - path: /live-store/ring
3574 pathType: PathPrefix
3575 - path: /partition-ring
3576 pathType: PathPrefix
3577 - path: /metrics-generator/ring
3578 pathType: PathPrefix
3580 pathType: PathPrefix
3583 pathType: PathPrefix
3585 - path: /status/backendscheduler
3586 pathType: PathPrefix
3587##############################################################################
3588# The values in and after the `enterprise:` key configure the enterprise features
3590 # Enable enterprise features. License must be provided, nginx gateway is not installed, instead
3591 # the enterprise gateway is used.
3594 # -- Grafana Enterprise Traces container image repository. Note: for Grafana Tempo use the value 'image.repository'
3595 repository: grafana/enterprise-traces
3596 # -- Grafana Enterprise Traces container image tag. Note: for Grafana Tempo use the value 'image.tag'
3598 # Note: pullPolicy and optional pullSecrets are set in toplevel 'image' section, not here
3599# In order to use Grafana Enterprise Traces features, you will need to provide the contents of your Grafana Enterprise Traces
3600# license, either by providing the contents of the license.jwt, or the name Kubernetes Secret that contains your license.jwt.
3601# To set the license contents, use the flag `--set-file 'license.contents=./license.jwt'`
3602# To use your own Kubernetes Secret, `--set license.external=true`.
3604 contents: 'NOTAVALIDLICENSE'
3606 secretName: '{{ include "tempo.resourceName" (dict "ctx" . "component" "license") }}'
3607# Settings for the initial admin(istrator) token generator job. Can only be enabled if
3608# enterprise.enabled is true - requires license.
3611 # -- hostAliases to add
3620 storeTokenInSecret: false
3621 # -- Name of the secret to store the admin token. If not specified, defaults to "<release-name>-admin-token"
3622 adminTokenSecret: "admin-token"
3624 # -- The Docker registry for the tokengenJob image. Overrides `tempo.image.registry`
3626 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
3628 # -- Docker image repository for the tokengenJob image. Overrides `tempo.image.repository`
3630 # -- Docker image tag for the tokengenJob image. Overrides `tempo.image.tag`
3633 # -- The SecurityContext for tokenjobgen containers
3634 containerSecurityContext:
3635 readOnlyRootFilesystem: true
3637 # -- Whether the job should be part of the deployment
3639 # -- Name of the secret to store provisioned tokens in
3640 provisionedSecretPrefix: null
3641 # -- Hook type(s) to customize when the job runs. defaults to post-install
3642 hookType: "post-install"
3643 # -- URL for the admin API service. Must be set to a valid URL.
3644 # Example: "http://tempo-admin-api.namespace.svc:3100"
3646 # -- Additional tenants to be created. Each tenant will get a read and write policy
3647 # and associated token. Tenant must have a name and a namespace for the secret containing
3648 # the token to be created in. For example
3649 # additionalTenants:
3651 # secretNamespace: grafana
3652 additionalTenants: []
3653 # -- Additional arguments for the provisioner command
3655 # -- Additional Kubernetes environment
3657 # -- Additional labels for the `provisioner` Job
3659 # -- Additional annotations for the `provisioner` Job
3661 # -- Affinity for tokengen Pods
3663 # -- Node selector for tokengen Pods
3665 # -- Tolerations for tokengen Pods
3667 # -- The name of the PriorityClass for provisioner Job
3668 priorityClassName: null
3669 # -- Run containers as nonroot user (uid=10001)`
3674 # -- Provisioner image to Utilize
3676 # -- The Docker registry
3677 registry: us-docker.pkg.dev
3678 # -- Docker image repository
3679 repository: grafanalabs-global/docker-enterprise-provisioner-prod/enterprise-provisioner
3680 # -- Overrides the image tag whose default is the chart's appVersion
3682 # -- Overrides the image tag with an image digest
3684 # -- Docker image pull policy
3685 pullPolicy: IfNotPresent
3686 # -- Volume mounts to add to the provisioner pods
3687 extraVolumeMounts: []
3688 # -- Volumes to add to the provisioner pods
3691 repository: alpine/kubectl
3693 pullPolicy: IfNotPresent
3694# Settings for the admin_api service providing authentication and authorization service.
3695# Can only be enabled if enterprise.enabled is true - requires license.
3698 # -- hostAliases to add
3709 # -- The Docker registry for the adminApi image. Overrides `tempo.image.registry`
3711 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
3713 # -- Docker image repository for the adminApi image. Overrides `tempo.image.repository`
3715 # -- Docker image tag for the adminApi image. Overrides `tempo.image.tag`
3726 # -- topologySpread for admin-api pods. Passed through `tpl` and, thus, to be configured as string
3727 # @default -- Defaults to allow skew no more than 1 node per AZ
3728 topologySpreadConstraints: |
3730 topologyKey: topology.kubernetes.io/zone
3731 whenUnsatisfiable: ScheduleAnyway
3734 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "admin-api") | nindent 6 }}
3735 # -- Affinity for admin-api pods. Passed through `tpl` and, thus, to be configured as string
3736 # @default -- Soft node and soft zone anti-affinity
3739 preferredDuringSchedulingIgnoredDuringExecution:
3744 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "admin-api") | nindent 12 }}
3745 topologyKey: kubernetes.io/hostname
3750 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "admin-api") | nindent 12 }}
3751 topologyKey: topology.kubernetes.io/zone
3752 # Pod Disruption Budget
3753 podDisruptionBudget: {}
3755 # -- The SecurityContext for admin_api containers
3756 containerSecurityContext:
3757 readOnlyRootFilesystem: true
3765 initialDelaySeconds: 45
3770 terminationGracePeriodSeconds: 60
3774 extraVolumeMounts: []
3777# Settings for the gateway service providing authentication and authorization via the admin_api.
3778# Can only be enabled if enterprise.enabled is true - requires license.
3780 # -- If you want to use your own proxy URLs, set this to false.
3781 useDefaultProxyURLs: true
3782 # -- Proxy URLs defined in this object will be used if useDefaultProxyURLs is set to false.
3785 # -- hostAliases to add
3792 # -- The Docker registry for the enterpriseGateway image. Overrides `tempo.image.registry`
3794 # -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
3796 # -- Docker image repository for the enterpriseGateway image. Overrides `tempo.image.repository`
3798 # -- Docker image tag for the enterpriseGateway image. Overrides `tempo.image.tag`
3802 # -- Port of the enterprise gateway service; if left undefined, the service will listen on the same port as the pod
3804 # -- Type of the enterprise gateway service
3806 # -- ClusterIP of the enterprise gateway service
3808 # -- Load balancer IP address if service type is LoadBalancer for enterprise gateway service
3809 loadBalancerIP: null
3810 # -- Annotations for the enterprise gateway service
3812 # -- Labels for enterprise gateway service
3821 # Pod Disruption Budget
3822 podDisruptionBudget: {}
3824 # -- topologySpread for enterprise-gateway pods. Passed through `tpl` and, thus, to be configured as string
3825 # @default -- Defaults to allow skew no more than 1 node per AZ
3826 topologySpreadConstraints: |
3828 topologyKey: topology.kubernetes.io/zone
3829 whenUnsatisfiable: ScheduleAnyway
3832 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "enterprise-gateway") | nindent 6 }}
3833 # -- Affinity for enterprise-gateway pods. Passed through `tpl` and, thus, to be configured as string
3834 # @default -- Soft node and soft zone anti-affinity
3837 preferredDuringSchedulingIgnoredDuringExecution:
3842 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "enterprise-gateway") | nindent 12 }}
3843 topologyKey: kubernetes.io/hostname
3848 {{- include "tempo.selectorLabels" (dict "ctx" . "component" "enterprise-gateway") | nindent 12 }}
3849 topologyKey: topology.kubernetes.io/zone
3851 # -- The SecurityContext for enterprise-gateway containers
3852 containerSecurityContext:
3853 readOnlyRootFilesystem: true
3862 initialDelaySeconds: 45
3867 terminationGracePeriodSeconds: 60
3871 extraVolumeMounts: []
3874 # Ingress configuration
3876 # -- Specifies whether an ingress for the enterprise-gateway should be created
3878 # -- Ingress Class Name. MAY be required for Kubernetes versions >= 1.18
3879 # ingressClassName: gateway
3880 # -- Annotations for the enterprise-gateway ingress
3882 # -- Hosts configuration for the enterprise-gateway ingress
3884 - host: gateway.get.example.com
3887 # -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
3889 # -- TLS configuration for the enterprise-gateway ingress
3891 - secretName: get-gateway-tls
3893 - gateway.get.example.com
3894# -- extraObjects could be utilized to add dynamic manifests via values
3898# - apiVersion: kubernetes-client.io/v1
3899# kind: ExternalSecret
3901# name: tempo-secrets-{{ .Release.Name }}
3905# - key: secret-access-key
3907# Alternatively, you can use strings, which lets you use additional templating features:
3910# apiVersion: kubernetes-client.io/v1
3911# kind: ExternalSecret
3913# name: tempo-secrets-{{ .Release.Name }}
3917# - key: secret-access-key
3918# name: {{ include "some-other-template" }}
3922 # -- Enable helm test hooks that run a BATS trace roundtrip against the live cluster.
3923 # WARNING: enabling this and running `helm test` ingests real trace data into object storage.
3924 # Traces age out via retention; Tempo has no delete API.