DirectorySecurity AdvisoriesPricing
Sign in
Directory
tempo-distributed logoHELM

tempo-distributed

Helm chart
Last changed
Request a free trial

Contact our team to test out this Helm chart and related images for free. Please also indicate any other images you would like to evaluate.

Overview
Chart tags
Default values
Chart metadata
Images

Tag:
Compare:

1
global:
2
image:
3
# -- Overrides the Docker registry globally for all images, excluding enterprise.
4
registry: docker.io
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
8
# Example:
9
# pullSecrets: [ my-dockerconfigjson-secret ]
10
pullSecrets: []
11
# -- Adding common labels to all K8S resources including pods
12
commonLabels: {}
13
# -- Adding labels to K8S resources (excluding pods)
14
labels: {}
15
# -- Adding labels to all pods
16
podLabels: {}
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'
25
goSettings:
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.
32
gogc: 80
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
35
extraEnv: []
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
38
extraEnvFrom: []
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
41
extraArgs: []
42
# -- Global storage class to be used for persisted components
43
storageClass: null
44
fullnameOverride: ''
45
# fullnameOverride: tempo
46
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.
51
useExternalConfig: 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).
55
configStorageType: ConfigMap
56
# -- Name of the Secret or ConfigMap that contains the configuration (used for naming even if config is internal).
57
externalConfigSecretName: '{{ 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).
59
externalRuntimeConfigName: '{{ 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.
61
externalConfigVersion: '0'
62
# -- If true, Tempo will report anonymous usage data about the shape of a deployment to Grafana Labs
63
reportingEnabled: true
64
# -- Enable streaming over HTTP for tempo and Tempo gateway(nginx)
65
streamOverHTTPEnabled: false
66
tempo:
67
# -- Pod DNS config applied to all components. Override per component with `<component>.dnsConfig` or `defaults.dnsConfig`.
68
dnsConfig: {}
69
image:
70
# -- The Docker registry. Overrides `global.image.registry`
71
registry: cgr.dev
72
# -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
73
pullSecrets: []
74
# -- Docker image repository
75
repository: chainguard-private/tempo-fips
76
# -- Overrides the image tag whose default is the chart's appVersion
77
tag: 3.0.5-r0@sha256:af38ddaa0278d1c8deecdc84c2b6a397b56ba35a596616e911fc27f903ecfbdc
78
pullPolicy: IfNotPresent
79
# -- Liveness probe for all Tempo binary pods. Deep-merged over `defaults.livenessProbe`.
80
livenessProbe: {}
81
# -- Readiness probe for all Tempo binary pods. Deep-merged over `defaults.readinessProbe`.
82
readinessProbe: {}
83
# -- Startup probe for all Tempo binary pods. Deep-merged over `defaults.startupProbe`.
84
startupProbe: {}
85
# -- Global labels for all tempo pods
86
podLabels: {}
87
# -- Common annotations for all pods
88
podAnnotations: {}
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
92
securityContext:
93
runAsNonRoot: true
94
runAsUser: 1000
95
runAsGroup: 1000
96
allowPrivilegeEscalation: false
97
capabilities:
98
drop:
99
- ALL
100
readOnlyRootFilesystem: true
101
# -- podSecurityContext holds pod-level security attributes and common container settings
102
podSecurityContext:
103
fsGroup: 1000
104
# -- Structured tempo configuration
105
structuredConfig: {}
106
# -- Memberlist service configuration.
107
memberlist:
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".
109
appProtocol: null
110
# -- Adds the service field to the memberlist service
111
service:
112
# -- Sets optional annotations to the service field of the memberlist service.
113
annotations: {}
114
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
117
ipFamilies:
118
- 'IPv4'
119
# - 'IPv6'
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.
138
defaults:
139
# -- Default pod DNS config for all pods. Overridden per component by `<component>.dnsConfig`; falls back to `tempo.dnsConfig`.
140
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
146
podAnnotations: {}
147
# -- Default labels for all pods
148
podLabels: {}
149
# -- Default node selector for all pods
150
nodeSelector: {}
151
# -- Default tolerations for all pods
152
tolerations: []
153
# -- Default affinity for all pods
154
affinity: {}
155
# -- Default priority class name for all pods
156
priorityClassName: ""
157
# -- Default resource requests and limits for all pods
158
resources: {}
159
# -- Default extra CLI args for all Tempo binary pods
160
extraArgs: []
161
# -- Default extra environment variables for all pods
162
extraEnv: []
163
# -- Default extra environment variables from ConfigMaps or Secrets for all pods
164
extraEnvFrom: []
165
# -- Default extra volume mounts for all pods
166
extraVolumeMounts: []
167
# -- Default extra volumes for all pods
168
extraVolumes: []
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.
173
livenessProbe:
174
httpGet:
175
path: /ready
176
port: http-metrics
177
initialDelaySeconds: 60
178
timeoutSeconds: 5
179
# -- Default readiness probe for all Tempo binary pods. Merged like `defaults.livenessProbe`.
180
readinessProbe:
181
httpGet:
182
path: /ready
183
port: http-metrics
184
initialDelaySeconds: 30
185
timeoutSeconds: 1
186
# -- Default startup probe for all Tempo binary pods. Disabled by default. Merged like `defaults.livenessProbe`.
187
startupProbe: {}
188
serviceAccount:
189
# -- Specifies whether a ServiceAccount should be created
190
create: true
191
# -- The name of the ServiceAccount to use.
192
# If not set and create is true, a name is generated using the fullname template
193
name: null
194
# -- Image pull secrets for the service account
195
imagePullSecrets: []
196
# -- Labels for the service account
197
labels: {}
198
# -- Annotations for the service account
199
annotations: {}
200
automountServiceAccountToken: false
201
rbac:
202
# -- Specifies whether RBAC manifests should be created
203
create: false
204
# Configuration for the metrics-generator
205
metricsGenerator:
206
# -- Specifies whether a metrics-generator should be deployed
207
enabled: false
208
# -- Kind of deployment [StatefulSet/Deployment]
209
kind: Deployment
210
# -- Annotations for the metrics-generator StatefulSet
211
annotations: {}
212
# -- Number of replicas for the metrics-generator
213
replicas: 1
214
# -- hostAliases to add
215
hostAliases: []
216
# - ip: 1.2.3.4
217
# hostnames:
218
# - domain.tld
219
# -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
220
dnsConfig: {}
221
# -- Init containers for the metrics generator pod
222
initContainers: []
223
image:
224
# -- The Docker registry for the metrics-generator image. Overrides `tempo.image.registry`
225
registry: null
226
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
227
pullSecrets: []
228
# -- Docker image repository for the metrics-generator image. Overrides `tempo.image.repository`
229
repository: null
230
# -- Docker image tag for the metrics-generator image. Overrides `tempo.image.tag`
231
tag: null
232
# -- The name of the PriorityClass for metrics-generator pods
233
priorityClassName: null
234
# -- Labels for metrics-generator pods
235
podLabels: {}
236
# -- Annotations for metrics-generator pods
237
podAnnotations: {}
238
# -- Additional CLI args for the metrics-generator
239
extraArgs: []
240
# -- Environment variables to add to the metrics-generator pods
241
extraEnv: []
242
# -- Environment variables from secrets or configmaps to add to the metrics-generator pods
243
extraEnvFrom: []
244
# -- Startup probe for metrics-generator pods. Deep-merged over `tempo.startupProbe`.
245
startupProbe: {}
246
# -- Resource requests and limits for the metrics-generator
247
resources: {}
248
# -- Grace period to allow the metrics-generator to shutdown before it is killed. Especially for the ingestor,
249
# this must be increased. It must be long enough so metrics-generators can be gracefully shutdown flushing/transferring
250
# all data and to successfully leave the member ring on shutdown.
251
terminationGracePeriodSeconds: 300
252
# -- topologySpread for metrics-generator pods. Passed through `tpl` and, thus, to be configured as string
253
# @default -- Defaults to allow skew no more then 1 node per AZ
254
topologySpreadConstraints: |
255
- maxSkew: 1
256
topologyKey: topology.kubernetes.io/zone
257
whenUnsatisfiable: ScheduleAnyway
258
labelSelector:
259
matchLabels:
260
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "metrics-generator") | nindent 6 }}
261
# -- Affinity for metrics-generator pods. Passed through `tpl` and, thus, to be configured as string
262
# @default -- Hard node and soft zone anti-affinity
263
affinity: |
264
podAntiAffinity:
265
requiredDuringSchedulingIgnoredDuringExecution:
266
- labelSelector:
267
matchLabels:
268
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "metrics-generator") | nindent 10 }}
269
topologyKey: kubernetes.io/hostname
270
preferredDuringSchedulingIgnoredDuringExecution:
271
- weight: 100
272
podAffinityTerm:
273
labelSelector:
274
matchLabels:
275
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "metrics-generator") | nindent 12 }}
276
topologyKey: topology.kubernetes.io/zone
277
# -- Pod Disruption Budget configuration
278
podDisruptionBudget:
279
# -- Enable PodDisruptionBudget for metrics-generator
280
enabled: true
281
# -- Set unhealthyPodEvictionPolicy for the metrics-generator PodDisruptionBudget. Requires policy/v1.
282
unhealthyPodEvictionPolicy: ""
283
# -- Pod Disruption Budget maxUnavailable
284
maxUnavailable: 1
285
# -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
286
minReadySeconds: 10
287
# -- Node selector for metrics-generator pods
288
nodeSelector: {}
289
# -- Tolerations for metrics-generator pods
290
tolerations: []
291
# -- Persistence configuration for metrics-generator
292
persistence:
293
# -- Enable creating PVCs if you have kind set to StatefulSet. This disables using local disk or memory configured in walEmptyDir
294
enabled: false
295
# -- Enable StatefulSetRecreation for changes to PVC size.
296
# This means that the StatefulSet will be deleted, recreated (with the same name) and rolled when a change to the
297
# PVC size is detected. That way the PVC can be resized without manual intervention.
298
enableStatefulSetRecreationForSizeChange: false
299
size: 10Gi
300
# -- Storage class to be used.
301
# If defined, storageClassName: <storageClass>.
302
# If set to "-", storageClassName: "", which disables dynamic provisioning.
303
# If empty or set to null, no storageClassName spec is
304
# set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack).
305
storageClass: null
306
# -- Annotations for metrics generator PVCs
307
annotations: {}
308
# -- Labels for metrics generator PVCs
309
labels: {}
310
# -- The EmptyDir location where the /var/tempo will be mounted on. Defaults to local disk, can be set to memory.
311
walEmptyDir: {}
312
## Here shows how to configure 1Gi memory as emptyDir.
313
## Ref: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#emptydirvolumesource-v1-core
314
# medium: "Memory"
315
# sizeLimit: 1Gi
316
# -- Extra volumes for metrics-generator pods
317
extraVolumeMounts: []
318
# -- Extra volumes for metrics-generator deployment
319
extraVolumes: []
320
# -- Containers to add to the metrics-generator pods
321
extraContainers: []
322
persistentVolumeClaimRetentionPolicy:
323
# -- Enable Persistent volume retention policy for StatefulSet
324
enabled: false
325
# -- Volume retention behavior when the replica count of the StatefulSet is reduced
326
whenScaled: Retain
327
# -- Volume retention behavior that applies when the StatefulSet is deleted
328
whenDeleted: Retain
329
# -- Default ports
330
ports:
331
- name: grpc
332
port: 9095
333
service: true
334
- name: http-memberlist
335
port: 7946
336
service: false
337
- name: http-metrics
338
port: 3200
339
service: true
340
# -- More information on configuration: https://grafana.com/docs/tempo/latest/configuration/#metrics-generator
341
config:
342
registry:
343
collection_interval: 15s
344
external_labels: {}
345
stale_duration: 15m
346
processor:
347
# -- For processors to be enabled and generate metrics, pass the names of the processors to `overrides.defaults.metrics_generator.processors` value like `[service-graphs, span-metrics]`.
348
service_graphs:
349
# -- Additional dimensions to add to the metrics along with the default dimensions.
350
# -- The resource and span attributes to be added to the service graph metrics, if present.
351
dimensions: []
352
histogram_buckets: [0.1, 0.2, 0.4, 0.8, 1.6, 3.2, 6.4, 12.8]
353
max_items: 10000
354
wait: 10s
355
workers: 10
356
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 span metrics, if present.
359
dimensions: []
360
histogram_buckets: [0.002, 0.004, 0.008, 0.016, 0.032, 0.064, 0.128, 0.256, 0.512, 1.02, 2.05, 4.10]
361
storage:
362
path: /var/tempo/wal
363
wal:
364
remote_write_flush_deadline: 1m
365
# Whether to add X-Scope-OrgID header in remote write requests
366
remote_write_add_org_id_header: true
367
# -- A list of remote write endpoints.
368
# -- https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
369
remote_write: []
370
# -- Used by the local blocks processor to store a wal for traces.
371
metrics_ingestion_time_range_slack: 30s
372
service:
373
# -- Annotations for Metrics Generator service
374
annotations: {}
375
# -- Traffic distribution for the Metrics Generator service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
376
trafficDistribution: null
377
serviceDiscovery:
378
# -- Annotations for Metrics Generator discovery service
379
annotations: {}
380
# -- Adds the appProtocol field to the metricsGenerator service. This allows metricsGenerator to work with istio protocol selection.
381
appProtocol:
382
# -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
383
grpc: null
384
# Configuration for the distributor
385
distributor:
386
# -- Number of replicas for the distributor
387
replicas: 1
388
# -- Annotations for distributor deployment
389
annotations: {}
390
# -- hostAliases to add
391
hostAliases: []
392
# - ip: 1.2.3.4
393
# hostnames:
394
# - domain.tld
395
# -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
396
dnsConfig: {}
397
autoscaling:
398
# -- Enable autoscaling for the distributor
399
enabled: false
400
# -- Minimum autoscaling replicas for the distributor
401
minReplicas: 1
402
# -- Maximum autoscaling replicas for the distributor
403
maxReplicas: 3
404
# -- Autoscaling behavior configuration for the distributor
405
behavior: {}
406
# -- Target CPU utilisation percentage for the distributor
407
targetCPUUtilizationPercentage: 60
408
# -- Target memory utilisation percentage for the distributor
409
targetMemoryUtilizationPercentage:
410
image:
411
# -- The Docker registry for the distributor image. Overrides `tempo.image.registry`
412
registry: null
413
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
414
pullSecrets: []
415
# -- Docker image repository for the distributor image. Overrides `tempo.image.repository`
416
repository: null
417
# -- Docker image tag for the distributor image. Overrides `tempo.image.tag`
418
tag: null
419
service:
420
# -- Annotations for distributor service
421
annotations: {}
422
# -- Labels for distributor service
423
labels: {}
424
# -- Type of service for the distributor
425
type: ClusterIP
426
# -- If type is LoadBalancer you can assign the IP to the LoadBalancer
427
loadBalancerIP: ''
428
# -- If type is LoadBalancer limit incoming traffic from IPs.
429
loadBalancerSourceRanges: []
430
# -- If type is LoadBalancer you can set it to 'Local' [preserve the client source IP](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip)
431
externalTrafficPolicy: null
432
# -- https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/
433
internalTrafficPolicy: Cluster
434
# -- Traffic distribution for the distributor service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
435
trafficDistribution: null
436
serviceDiscovery:
437
# -- Annotations for distributorDiscovery service
438
annotations: {}
439
# -- Labels for distributorDiscovery service
440
labels: {}
441
# -- The name of the PriorityClass for distributor pods
442
priorityClassName: null
443
# -- Labels for distributor pods
444
podLabels: {}
445
# -- Annotations for distributor pods
446
podAnnotations: {}
447
# -- Additional CLI args for the distributor
448
extraArgs: []
449
# -- Environment variables to add to the distributor pods
450
extraEnv: []
451
# -- Environment variables from secrets or configmaps to add to the distributor pods
452
extraEnvFrom: []
453
# -- Init containers to add to the distributor pods
454
initContainers: []
455
# -- Containers to add to the distributor pod
456
extraContainers: []
457
# -- Additional ports to expose on the distributor container (e.g. trace receiver ports).
458
# Standard ports (http-metrics, http-memberlist) are always added automatically.
459
extraPorts: []
460
# -- Liveness probe for distributor pods. Deep-merged over `tempo.livenessProbe`.
461
livenessProbe: {}
462
# -- Readiness probe for distributor pods. Deep-merged over `tempo.readinessProbe`.
463
readinessProbe: {}
464
# -- Startup probe for distributor pods. Deep-merged over `tempo.startupProbe`.
465
startupProbe: {}
466
# -- Resource requests and limits for the distributor
467
resources: {}
468
# -- On SIGTERM, report not-ready and wait this long before shutdown so the LB drains the pod before connections are cut.
469
# "0s" (default) disables. When enabling, keep terminationGracePeriodSeconds above shutdownDelay + server.graceful_shutdown_timeout.
470
shutdownDelay: 0s
471
# -- Grace period to allow the distributor to shutdown before it is killed
472
terminationGracePeriodSeconds: 30
473
# -- Container lifecycle hooks for the distributor
474
lifecycle: {}
475
# -- topologySpread for distributor pods. Passed through `tpl` and, thus, to be configured as string
476
# @default -- Defaults to allow skew no more then 1 node per AZ
477
topologySpreadConstraints: |
478
- maxSkew: 1
479
topologyKey: topology.kubernetes.io/zone
480
whenUnsatisfiable: ScheduleAnyway
481
labelSelector:
482
matchLabels:
483
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "distributor") | nindent 6 }}
484
# -- Affinity for distributor pods. Passed through `tpl` and, thus, to be configured as string
485
# @default -- Hard node and soft zone anti-affinity
486
affinity: |
487
podAntiAffinity:
488
requiredDuringSchedulingIgnoredDuringExecution:
489
- labelSelector:
490
matchLabels:
491
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "distributor") | nindent 10 }}
492
topologyKey: kubernetes.io/hostname
493
preferredDuringSchedulingIgnoredDuringExecution:
494
- weight: 100
495
podAffinityTerm:
496
labelSelector:
497
matchLabels:
498
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "distributor") | nindent 12 }}
499
topologyKey: topology.kubernetes.io/zone
500
# Strategy of updating pods
501
strategy:
502
rollingUpdate:
503
maxSurge: 0
504
maxUnavailable: 1
505
# -- Pod Disruption Budget configuration
506
podDisruptionBudget:
507
# -- Enable PodDisruptionBudget for distributor
508
enabled: true
509
# -- Set unhealthyPodEvictionPolicy for the distributor PodDisruptionBudget. Requires policy/v1.
510
unhealthyPodEvictionPolicy: ""
511
# -- Pod Disruption Budget maxUnavailable
512
maxUnavailable: 1
513
# -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
514
minReadySeconds: 10
515
# -- Node selector for distributor pods
516
nodeSelector: {}
517
# -- Tolerations for distributor pods
518
tolerations: []
519
# -- Extra volumes for distributor pods
520
extraVolumeMounts: []
521
# -- Extra volumes for distributor deployment
522
extraVolumes: []
523
config:
524
# -- Enable to log every received trace id to help debug ingestion
525
# -- WARNING: Deprecated. Use log_received_spans instead.
526
log_received_traces: null
527
# -- Enable to log every received span to help debug ingestion or calculate span error distributions using the logs
528
log_received_spans:
529
enabled: false
530
include_all_attributes: false
531
filter_by_status_error: false
532
log_discarded_spans:
533
enabled: false
534
include_all_attributes: false
535
filter_by_status_error: false
536
# -- Disables write extension with inactive ingesters
537
extend_writes: null
538
# -- Trace Attribute bytes limit. This is the maximum number of bytes that can be used in a trace. 0 for no limit. Set to null to omit from config.
539
max_attribute_bytes: null
540
# Configures usage trackers in the distributor which expose metrics of ingested traffic grouped by configurable
541
# attributes exposed on /usage_metrics.
542
cost_attribution:
543
# -- Enables the "cost-attribution" usage tracker. Per-tenant attributes are configured in overrides.
544
enabled: false
545
# -- Maximum number of series per tenant.
546
max_cardinality: 10000
547
# -- Interval after which a series is considered stale and will be deleted from the registry.
548
# -- Once a metrics series is deleted, it won't be emitted anymore, keeping active series low.
549
stale_duration: 15m0s
550
# -- Adds the appProtocol field to the distributor service. This allows distributor to work with istio protocol selection.
551
appProtocol:
552
# -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
553
grpc: null
554
# -- EXPERIMENTAL Feature, disabled by default
555
# Configuration for the backend-scheduler
556
backendScheduler:
557
# -- Specifies whether a backend-scheduler and backend-worker
558
# -- should be deployed.
559
enabled: true
560
# -- Annotations for backend-scheduler StatefulSet
561
annotations: {}
562
# -- Labels for the backend-scheduler StatefulSet
563
labels: {}
564
# -- hostAliases to add
565
hostAliases: []
566
# - ip: 1.2.3.4
567
# hostnames:
568
# - domain.tld
569
# -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
570
dnsConfig: {}
571
# -- Init containers to add to the backend-scheduler pod
572
initContainers: []
573
image:
574
# -- The Docker registry for the backend-scheduler image. Overrides `tempo.image.registry`
575
registry: null
576
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
577
pullSecrets: []
578
# -- Docker image repository for the backend-scheduler image. Overrides `tempo.image.repository`
579
repository: null
580
# -- Docker image tag for the backend-scheduler image. Overrides `tempo.image.tag`
581
tag: null
582
# -- The name of the PriorityClass for backend-scheduler pod
583
priorityClassName: null
584
# -- Labels for backend-scheduler pod
585
podLabels: {}
586
# -- Annotations for backend-scheduler pod
587
podAnnotations: {}
588
# -- Additional CLI args for the backend-scheduler
589
extraArgs: []
590
# -- Environment variables to add to the backend-scheduler pod
591
extraEnv: []
592
# -- Environment variables from secrets or configmaps to add to the backend-scheduler pod
593
extraEnvFrom: []
594
# -- Additional ports to expose on the backend-scheduler container
595
# Standard ports (grpc, http-metrics, http-memberlist) are always added automatically.
596
extraPorts: []
597
# -- Liveness probe for backend-scheduler pod. Deep-merged over `tempo.livenessProbe`.
598
livenessProbe: {}
599
# -- Readiness probe for backend-scheduler pod. Deep-merged over `tempo.readinessProbe`.
600
readinessProbe: {}
601
# -- Startup probe for backend-scheduler pod. Deep-merged over `tempo.startupProbe`.
602
startupProbe: {}
603
# -- Resource requests and limits for the backend-scheduler
604
resources: {}
605
# -- Grace period to allow the backend-scheduler to shutdown before it is killed
606
terminationGracePeriodSeconds: 30
607
# -- topologySpread for backend-scheduler pods. Passed through `tpl` and, thus, to be configured as string
608
# @default -- Defaults to allow skew no more then 1 node per AZ
609
topologySpreadConstraints: |
610
- maxSkew: 1
611
topologyKey: topology.kubernetes.io/zone
612
whenUnsatisfiable: ScheduleAnyway
613
labelSelector:
614
matchLabels:
615
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-scheduler") | nindent 6 }}
616
# -- Affinity for backend-scheduler pods. Passed through `tpl` and, thus, to be configured as string
617
# @default -- Soft node and soft zone anti-affinity
618
affinity: |
619
podAntiAffinity:
620
preferredDuringSchedulingIgnoredDuringExecution:
621
- weight: 100
622
podAffinityTerm:
623
labelSelector:
624
matchLabels:
625
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-scheduler") | nindent 12 }}
626
topologyKey: kubernetes.io/hostname
627
- weight: 75
628
podAffinityTerm:
629
labelSelector:
630
matchLabels:
631
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-scheduler") | nindent 12 }}
632
topologyKey: topology.kubernetes.io/zone
633
# -- Node selector for backend-scheduler pod
634
nodeSelector: {}
635
# -- Tolerations for backend-scheduler pod
636
tolerations: []
637
# -- Extra volumes for backend-scheduler pod
638
extraVolumeMounts: []
639
# -- Extra volumes for backend-scheduler StatefulSet
640
extraVolumes: []
641
# -- Containers to add to the backend-scheduler pods
642
extraContainers: []
643
# -- Persistence configuration for backend-scheduler
644
persistence:
645
# -- Enable creating a PVC for the backend-scheduler data volume, so its local
646
# work path survives a pod restart instead of being lost with the emptyDir.
647
enabled: false
648
# -- Enable StatefulSetRecreation for changes to PVC size
649
enableStatefulSetRecreationForSizeChange: false
650
# -- use emptyDir with ramdisk instead of PVC. **Please note that all data in backend-scheduler will be lost on pod restart**
651
inMemory: false
652
# -- Size of persistent or memory disk
653
size: 10Gi
654
# -- Storage class to be used.
655
# If defined, storageClassName: <storageClass>.
656
# If set to "-", storageClassName: "", which disables dynamic provisioning.
657
# If empty or set to null, no storageClassName spec is
658
# set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack).
659
storageClass: null
660
# -- Annotations for backend-scheduler's persist volume claim
661
annotations: {}
662
# -- Labels for backend-scheduler's persist volume claim
663
labels: {}
664
# -- Spec for the `data` volume when persistence is disabled. By default an
665
# empty `emptyDir: {}`; set e.g. `sizeLimit` or `medium: Memory` as needed.
666
walEmptyDir: {}
667
# -- updateStrategy of the backend-scheduler statefulset.
668
statefulStrategy:
669
rollingUpdate:
670
partition: 0
671
persistentVolumeClaimRetentionPolicy:
672
# -- Enable Persistent volume retention policy for StatefulSet
673
enabled: false
674
# -- Volume retention behavior when the replica count of the StatefulSet is reduced
675
whenScaled: Retain
676
# -- Volume retention behavior that applies when the StatefulSet is deleted
677
whenDeleted: Retain
678
config:
679
# -- How often to flush the work cache to backend storage
680
backend_flush_interval: 1m
681
# -- How long to wait for a worker to complete a job before timing out internally
682
job_timeout: 15s
683
# -- Path to store local work cache files
684
local_work_path: /var/tempo
685
# -- How often to perform maintenance tasks (pruning old jobs, checking for dead jobs, etc.)
686
maintenance_interval: 1m
687
# -- Provider configuration for job generation
688
provider:
689
# -- Compaction job configuration
690
compaction:
691
# -- Compaction configuration
692
compaction:
693
# -- Duration to keep blocks
694
block_retention: 48h
695
# Duration to keep blocks that have been compacted elsewhere
696
compacted_block_retention: 1h
697
# -- The time between compaction cycles
698
compaction_cycle: 30s
699
# -- Blocks in this time window will be compacted together
700
compaction_window: 1h
701
# -- Maximum size of a compacted block in bytes
702
# -- This should be set to a lower value, ideally 5GB or less
703
# -- 100GB is a legacy default for v2 storage format which is
704
# -- no longer even available as of Tempo 2.1.x
705
# -- https://github.com/grafana/tempo/discussions/5301
706
max_block_bytes: 107374182400
707
# -- Maximum number of traces in a compacted block. WARNING: Deprecated. Use max_block_bytes instead.
708
max_compaction_objects: 6000000
709
# -- The maximum amount of time to spend compacting a single tenant before moving to the next
710
max_time_per_tenant: 5m
711
# -- Number of tenants to process in parallel during retention
712
retention_concurrency: 10
713
# -- Maximum number of compaction jobs to create per tenant
714
max_compaction_level: 0
715
# -- Maximum number of blocks to compact together
716
max_input_blocks: 4
717
# -- Maximum compaction level (0 means no limit)
718
max_jobs_per_tenant: 1000
719
# -- How often to measure tenant block lists and create new compaction jobs
720
measure_interval: 1m
721
# -- Minimum time between compaction cycles for a tenant
722
min_cycle_interval: 30s
723
# -- Minimum number of blocks required for compaction
724
min_input_blocks: 2
725
# -- Retention job configuration
726
retention:
727
# -- How often to check for blocks that need to be deleted due to retention
728
interval: 1h
729
# -- Work cache configuration
730
work:
731
# -- After this duration, jobs that have not been updated are considered dead and will be reassigned.
732
dead_job_timeout: 24h
733
# -- How long to keep completed or failed jobs in the work cache before pruning them.
734
prune_age: 1h
735
service:
736
# -- Annotations for backend-scheduler service
737
annotations: {}
738
# Configuration for the backend-worker
739
backendWorker:
740
# -- Number of replicas for the backend-worker
741
replicas: 1
742
# -- Autoscaling configurations
743
autoscaling:
744
# -- Enable autoscaling for the backend-worker
745
enabled: false
746
# -- Minimum autoscaling replicas for the backend-worker
747
minReplicas: 1
748
# -- Maximum autoscaling replicas for the backend-worker
749
maxReplicas: 3
750
# -- Autoscaling via HPA object
751
hpa:
752
enabled: false
753
# -- Autoscaling behavior configuration for the backend-worker
754
behavior: {}
755
# -- Target CPU utilisation percentage for the backend-worker
756
targetCPUUtilizationPercentage: 100
757
# -- Target memory utilisation percentage for the backend-worker
758
targetMemoryUtilizationPercentage:
759
# -- Autoscaling via keda/ScaledObject
760
keda:
761
# requires https://keda.sh/
762
enabled: false
763
annotations: {}
764
# scaledobject.keda.sh/transfer-hpa-ownership: "true" # Use to transfer an existing HPA ownership to this ScaledObject
765
# validations.keda.sh/hpa-ownership: "true" # Use to disable HPA ownership validation on this ScaledObject
766
# autoscaling.keda.sh/paused: "true" # Use to pause autoscaling of objects explicitly
767
pollingInterval: null # Optional. Default: 30 seconds
768
cooldownPeriod: null # Optional. Default: 300 seconds
769
initialCooldownPeriod: null # Optional. Default: 0 seconds
770
# Optional. Section to specify advanced options
771
advanced: {}
772
# # Optional. Section to specify advanced options
773
# horizontalPodAutoscalerConfig:
774
# # Optional. Default: keda-hpa-{scaled-object-name}
775
# name: null
776
# # Optional. Use to modify HPA's scaling behavior
777
# behavior: null
778
# # scaleDown:
779
# # stabilizationWindowSeconds: 300
780
# # Optional. Section to specify scaling modifiers
781
# scalingModifiers:
782
# target: null # Mandatory. New target if metrics are anyhow composed together
783
# activationTarget: null # Optional. New activation target if metrics are anyhow composed together
784
# metricType: null # Optional. Metric type to be used if metrics are anyhow composed together
785
# formula: null # Mandatory. Formula for calculation
786
fallback: {}
787
# failureThreshold: null # Mandatory if fallback section is included
788
# replicas: null # Mandatory if fallback section is included
789
# behavior: null # Optional. Default: "static"
790
# -- List of autoscaling triggers for the compactor
791
triggers: []
792
# - name: tempo-outstanding-compaction-blocks
793
## https://keda.sh/docs/2.19/concepts/authentication/
794
## authenticationRef:
795
## name: {trigger-authentication-name} or {cluster-trigger-authentication-name}
796
## kind: TriggerAuthentication or ClusterTriggerAuthentication
797
# type: prometheus
798
# metadata:
799
# serverAddress: "http://<prometheus-host>:9090"
800
# threshold: "250"
801
# query: |-
802
# sum by (cluster, namespace, tenant) (
803
# tempodb_compaction_outstanding_blocks{container="backend-scheduler", namespace=~".*"}
804
# ) /
805
# ignoring(tenant) group_left count by (cluster, namespace)(
806
# tempo_build_info{container="backend-worker", namespace=~".*"}
807
# )
808
# customHeaders: X-Scope-OrgID=<tenant-id>
809
# -- Annotations for backend-worker StatefulSet
810
annotations: {}
811
# -- Labels for the backend-worker StatefulSet
812
labels: {}
813
# -- hostAliases to add
814
hostAliases: []
815
# - ip: 1.2.3.4
816
# hostnames:
817
# - domain.tld
818
# -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
819
dnsConfig: {}
820
# -- Init containers to add to the backend-worker pods
821
initContainers: []
822
image:
823
# -- The Docker registry for the backend-worker image. Overrides `tempo.image.registry`
824
registry: null
825
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
826
pullSecrets: []
827
# -- Docker image repository for the backend-worker image. Overrides `tempo.image.repository`
828
repository: null
829
# -- Docker image tag for the backend-worker image. Overrides `tempo.image.tag`
830
tag: null
831
# -- The name of the PriorityClass for backend-worker pods
832
priorityClassName: null
833
# -- Labels for backend-worker pods
834
podLabels: {}
835
# -- Annotations for backend-worker pods
836
podAnnotations: {}
837
# -- Additional CLI args for the backend-worker
838
extraArgs: []
839
# -- Environment variables to add to the backend-worker pods
840
extraEnv: []
841
# -- Environment variables from secrets or configmaps to add to the backend-worker pods
842
extraEnvFrom: []
843
# -- Liveness probe for backend-worker pods. Deep-merged over `tempo.livenessProbe`.
844
livenessProbe: {}
845
# -- Readiness probe for backend-worker pods. Deep-merged over `tempo.readinessProbe`.
846
readinessProbe: {}
847
# -- Startup probe for backend-worker pods. Deep-merged over `tempo.startupProbe`.
848
startupProbe: {}
849
# -- Resource requests and limits for the backend-worker
850
resources: {}
851
# -- Grace period to allow the backend-worker to shutdown before it is killed
852
terminationGracePeriodSeconds: 30
853
# -- topologySpread for backend-worker pods. Passed through `tpl` and, thus, to be configured as string
854
# @default -- Defaults to allow skew no more then 1 node per AZ
855
topologySpreadConstraints: |
856
- maxSkew: 1
857
topologyKey: topology.kubernetes.io/zone
858
whenUnsatisfiable: ScheduleAnyway
859
labelSelector:
860
matchLabels:
861
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-worker") | nindent 6 }}
862
# -- Affinity for backend-worker pods. Passed through `tpl` and, thus, to be configured as string
863
# @default -- Soft node and soft zone anti-affinity
864
affinity: |
865
podAntiAffinity:
866
preferredDuringSchedulingIgnoredDuringExecution:
867
- weight: 100
868
podAffinityTerm:
869
labelSelector:
870
matchLabels:
871
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-worker") | nindent 12 }}
872
topologyKey: kubernetes.io/hostname
873
- weight: 75
874
podAffinityTerm:
875
labelSelector:
876
matchLabels:
877
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "backend-worker") | nindent 12 }}
878
topologyKey: topology.kubernetes.io/zone
879
# -- Node selector for backend-worker pods
880
nodeSelector: {}
881
# -- Tolerations for backend-worker pods
882
tolerations: []
883
# -- Extra volumes for backend-worker pods
884
extraVolumeMounts: []
885
# -- Extra volumes for backend-worker StatefulSet
886
extraVolumes: []
887
# -- Containers to add to the backend-worker pods
888
extraContainers: []
889
# -- updateStrategy of the backend-worker statefulset.
890
statefulStrategy:
891
rollingUpdate:
892
partition: 0
893
persistentVolumeClaimRetentionPolicy:
894
# -- Enable Persistent volume retention policy for StatefulSet
895
enabled: false
896
# -- Volume retention behavior when the replica count of the StatefulSet is reduced
897
whenScaled: Retain
898
# -- Volume retention behavior that applies when the StatefulSet is deleted
899
whenDeleted: Retain
900
config:
901
backend_scheduler_client:
902
# -- gRPC client configuration
903
grpc_client_config: {}
904
# -- Backoff configuration for retrying failed jobs
905
backoff:
906
min_period: 100ms
907
max_period: 1m
908
max_retries: 0
909
# -- Compaction settings
910
# -- .Values.backendScheduler.compaction.compaction will be used
911
compaction: {}
912
# -- Timeout for finishing the current job before shutting down the worker
913
finish_on_shutdown_timeout: 30s
914
service:
915
# -- Annotations for backend-worker service
916
annotations: {}
917
# -- Ingest configuration. Sets the top-level `ingest:` block in tempo.yaml.
918
# Required for Tempo 3.0 microservices mode. Distributors write spans to Kafka;
919
# block-builders and live-stores consume from it.
920
# The number of block-builder and live-store replicas must equal the Kafka partition count.
921
ingest:
922
kafka:
923
# -- Kafka broker address (e.g. "kafka.kafka-namespace.svc.cluster.local:9092")
924
address: ""
925
# -- Kafka topic name for trace data
926
topic: tempo-traces
927
# -- Automatically create the topic if it does not exist
928
auto_create_topic_enabled: true
929
# -- Number of partitions for the auto-created topic.
930
# Block-builder and live-store replica count must match this value.
931
auto_create_topic_default_partitions: 3
932
# SASL authentication for the Kafka client. When `mechanism` is empty it
933
# defaults to PLAIN, which — with no username/password — leaves SASL disabled
934
# (the unauthenticated default). Set a mechanism to enable authentication.
935
sasl:
936
# -- SASL mechanism. Must be one of PLAIN, SCRAM-SHA-256, SCRAM-SHA-512,
937
# OAUTHBEARER, AWS_MSK_IAM. Empty defaults to PLAIN.
938
mechanism: ""
939
# -- Username for PLAIN and SCRAM-SHA-* mechanisms. Ignored if
940
# `existingSecret` is set. Prefer `existingSecret` in production so the
941
# value is never inlined into tempo.yaml.
942
username: ""
943
# -- Password for PLAIN and SCRAM-SHA-* mechanisms. Ignored if
944
# `existingSecret` is set. Prefer `existingSecret` in production so the
945
# value is never inlined into tempo.yaml.
946
password: ""
947
# -- Name of an existing Secret containing `usernameKey`/`passwordKey`.
948
# When set, `username`/`password` above are ignored and the credentials
949
# are injected as env vars and passed to tempo as
950
# `-ingest.sasl-username`/`-ingest.sasl-password` CLI flags instead of
951
# being inlined into tempo.yaml. Recommended over setting
952
# `username`/`password` directly.
953
existingSecret: ""
954
# -- Key in `existingSecret` containing the username.
955
usernameKey: username
956
# -- Key in `existingSecret` containing the password.
957
passwordKey: password
958
# OAUTHBEARER options (used when mechanism is OAUTHBEARER). Provide exactly
959
# one credential source: token, filePath, httpSocketPath, or existingSecret.
960
oauthbearer:
961
# -- Static OAuth token. Ignored if `existingSecret` is set. Prefer
962
# `existingSecret` in production so the value is never inlined into
963
# tempo.yaml.
964
token: ""
965
# -- Name of an existing Secret containing `tokenKey`. When set,
966
# `token` above is ignored and the credential is injected as an env var
967
# and passed to tempo as the `-ingest.sasl-oauthbearer-token` CLI flag
968
# instead of being inlined into tempo.yaml. Recommended over setting
969
# `token` directly.
970
existingSecret: ""
971
# -- Key in `existingSecret` containing the token.
972
tokenKey: token
973
# -- Optional authorization ID.
974
zid: ""
975
# -- Optional map of additional OAuth extensions (string -> string).
976
extensions: {}
977
# -- Path to a file containing a (rotating) OAuth token in JSON format.
978
filePath: ""
979
# -- Path to a Unix domain socket that serves the OAuth token over HTTP.
980
httpSocketPath: ""
981
# -- Timeout for fetching the token from httpSocketPath (e.g. "10s").
982
httpSocketTimeout: ""
983
# AWS_MSK_IAM options (used when mechanism is AWS_MSK_IAM). Provide exactly
984
# one credential source: static keys, filePath, httpSocketPath, or existingSecret.
985
# Tempo does not fall back to the AWS default credential chain (e.g. IRSA).
986
mskIam:
987
# -- AWS access key ID. Ignored if `existingSecret` is set. Prefer
988
# `existingSecret` in production so the value is never inlined into
989
# tempo.yaml.
990
accessKey: ""
991
# -- AWS secret access key. Ignored if `existingSecret` is set. Prefer
992
# `existingSecret` in production so the value is never inlined into
993
# tempo.yaml.
994
secretKey: ""
995
# -- Optional AWS session token for temporary credentials. Ignored if
996
# `existingSecret` is set.
997
sessionToken: ""
998
# -- Name of an existing Secret containing `accessKeyKey`/`secretKeyKey`
999
# and, optionally, `sessionTokenKey`. When set, `accessKey`/`secretKey`/
1000
# `sessionToken` above are ignored and the credentials are injected as
1001
# env vars and passed to tempo as `-ingest.sasl-msk-iam-*` CLI flags
1002
# instead of being inlined into tempo.yaml. Recommended over setting
1003
# the static keys directly.
1004
existingSecret: ""
1005
# -- Key in `existingSecret` containing the AWS access key ID.
1006
accessKeyKey: access-key
1007
# -- Key in `existingSecret` containing the AWS secret access key.
1008
secretKeyKey: secret-key
1009
# -- Key in `existingSecret` containing the AWS session token. Empty
1010
# by default (session token is optional); set this only when
1011
# `existingSecret` contains this key, otherwise pods fail to start.
1012
sessionTokenKey: ""
1013
# -- Optional user agent string.
1014
userAgent: ""
1015
# -- Path to a file containing AWS credentials in JSON format.
1016
filePath: ""
1017
# -- Path to a Unix domain socket that serves AWS credentials over HTTP.
1018
httpSocketPath: ""
1019
# -- Timeout for fetching credentials from httpSocketPath (e.g. "10s").
1020
httpSocketTimeout: ""
1021
# TLS for the Kafka client connection. Independent of the SASL mechanism and
1022
# can be combined with any of them (e.g. PLAIN over TLS).
1023
tls:
1024
# -- Enable TLS for the Kafka connection.
1025
enabled: false
1026
# -- Path to the client certificate (for mTLS).
1027
certPath: ""
1028
# -- Path to the client key (for mTLS).
1029
keyPath: ""
1030
# -- Path to the CA certificate used to verify the broker.
1031
caPath: ""
1032
# -- Override the server name / SNI used during verification.
1033
serverName: ""
1034
# -- Minimum TLS version (e.g. "VersionTLS12", "VersionTLS13").
1035
minVersion: ""
1036
# -- Skip broker certificate verification. Avoid in production.
1037
insecureSkipVerify: false
1038
# Configuration for the block-builder (Tempo 3.0+)
1039
# Consumes spans from Kafka and writes blocks to object storage.
1040
# One replica per Kafka partition — replica count must equal ingest.kafka.auto_create_topic_default_partitions.
1041
blockBuilder:
1042
# -- Enable the block-builder. Requires ingest.kafka.address to be set.
1043
enabled: true
1044
# -- Number of replicas. Must equal the Kafka partition count.
1045
replicas: 3
1046
# -- Annotations for the block-builder StatefulSet
1047
annotations: {}
1048
# -- Labels for the block-builder StatefulSet
1049
labels: {}
1050
# -- hostAliases to add
1051
hostAliases: []
1052
# -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1053
dnsConfig: {}
1054
# -- Init containers to add to the block-builder pod
1055
initContainers: []
1056
image:
1057
# -- The Docker registry for the block-builder image. Overrides `tempo.image.registry`
1058
registry: null
1059
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1060
pullSecrets: []
1061
# -- Docker image repository for the block-builder image. Overrides `tempo.image.repository`
1062
repository: null
1063
# -- Docker image tag for the block-builder image. Overrides `tempo.image.tag`
1064
tag: null
1065
# -- The name of the PriorityClass for block-builder pods
1066
priorityClassName: null
1067
# -- Labels for block-builder pods
1068
podLabels: {}
1069
# -- Annotations for block-builder pods
1070
podAnnotations: {}
1071
# -- Additional CLI args for the block-builder
1072
extraArgs: []
1073
# -- Environment variables to add to the block-builder pods
1074
extraEnv: []
1075
# -- Environment variables from secrets or configmaps to add to the block-builder pods
1076
extraEnvFrom: []
1077
# -- Additional ports to expose on the block-builder container
1078
extraPorts: []
1079
# -- Liveness probe for block-builder pods. Deep-merged over `tempo.livenessProbe`.
1080
livenessProbe: {}
1081
# -- Readiness probe for block-builder pods. Deep-merged over `tempo.readinessProbe`.
1082
readinessProbe: {}
1083
# -- Startup probe for block-builder pods. Deep-merged over `tempo.startupProbe`.
1084
startupProbe: {}
1085
# -- Resource requests and limits for the block-builder
1086
resources: {}
1087
# -- Grace period to allow the block-builder to flush its WAL before being killed
1088
terminationGracePeriodSeconds: 300
1089
# -- topologySpread for block-builder pods. Passed through `tpl`.
1090
topologySpreadConstraints: |
1091
- maxSkew: 1
1092
topologyKey: topology.kubernetes.io/zone
1093
whenUnsatisfiable: ScheduleAnyway
1094
labelSelector:
1095
matchLabels:
1096
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "block-builder") | nindent 6 }}
1097
# -- Affinity for block-builder pods. Passed through `tpl`.
1098
affinity: |
1099
podAntiAffinity:
1100
preferredDuringSchedulingIgnoredDuringExecution:
1101
- weight: 100
1102
podAffinityTerm:
1103
labelSelector:
1104
matchLabels:
1105
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "block-builder") | nindent 12 }}
1106
topologyKey: kubernetes.io/hostname
1107
# -- Node selector for block-builder pods
1108
nodeSelector: {}
1109
# -- Tolerations for block-builder pods
1110
tolerations: []
1111
# -- Extra volumes for block-builder pods
1112
extraVolumeMounts: []
1113
# -- Extra volumes for block-builder StatefulSet
1114
extraVolumes: []
1115
# -- Containers to add to the block-builder pods
1116
extraContainers: []
1117
# -- updateStrategy of the block-builder StatefulSet
1118
statefulStrategy:
1119
rollingUpdate:
1120
partition: 0
1121
# -- Pod Disruption Budget configuration
1122
podDisruptionBudget:
1123
# -- Enable PodDisruptionBudget for block-builder
1124
enabled: true
1125
# -- Set unhealthyPodEvictionPolicy for the block-builder PodDisruptionBudget. Requires policy/v1.
1126
unhealthyPodEvictionPolicy: ""
1127
# -- Pod Disruption Budget maxUnavailable
1128
maxUnavailable: 1
1129
service:
1130
# -- Annotations for block-builder service
1131
annotations: {}
1132
config:
1133
# -- Number of Kafka partitions each block-builder instance consumes.
1134
# Each pod consumes this many partitions starting from its ordinal * partitions_per_instance.
1135
partitions_per_instance: 1
1136
# Configuration for the live-store (Tempo 3.0+)
1137
# Consumes spans from Kafka and serves recent-data queries (last ~30 minutes).
1138
# One replica per Kafka partition — replica count must equal ingest.kafka.auto_create_topic_default_partitions.
1139
liveStore:
1140
# -- Enable the live-store. Requires ingest.kafka.address to be set.
1141
enabled: true
1142
# -- Number of replicas. Must equal the Kafka partition count.
1143
replicas: 3
1144
# -- Annotations for the live-store StatefulSet
1145
annotations: {}
1146
# -- Labels for the live-store StatefulSet
1147
labels: {}
1148
# -- hostAliases to add
1149
hostAliases: []
1150
# -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1151
dnsConfig: {}
1152
# -- Init containers to add to the live-store pod
1153
initContainers: []
1154
image:
1155
# -- The Docker registry for the live-store image. Overrides `tempo.image.registry`
1156
registry: null
1157
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1158
pullSecrets: []
1159
# -- Docker image repository for the live-store image. Overrides `tempo.image.repository`
1160
repository: null
1161
# -- Docker image tag for the live-store image. Overrides `tempo.image.tag`
1162
tag: null
1163
# -- The name of the PriorityClass for live-store pods
1164
priorityClassName: null
1165
# -- Labels for live-store pods
1166
podLabels: {}
1167
# -- Annotations for live-store pods
1168
podAnnotations: {}
1169
# -- Additional CLI args for the live-store
1170
extraArgs: []
1171
# -- Environment variables to add to the live-store pods
1172
extraEnv: []
1173
# -- Environment variables from secrets or configmaps to add to the live-store pods
1174
extraEnvFrom: []
1175
# -- Additional ports to expose on the live-store container
1176
extraPorts: []
1177
# -- Liveness probe for live-store pods. Deep-merged over `tempo.livenessProbe`.
1178
livenessProbe: {}
1179
# -- Readiness probe for live-store pods. Deep-merged over `tempo.readinessProbe`.
1180
readinessProbe: {}
1181
# -- Startup probe for live-store pods. Deep-merged over `tempo.startupProbe`.
1182
startupProbe: {}
1183
# -- Resource requests and limits for the live-store
1184
resources: {}
1185
# -- Grace period to allow the live-store to shut down before being killed
1186
terminationGracePeriodSeconds: 60
1187
# -- topologySpread for live-store pods. Passed through `tpl`.
1188
topologySpreadConstraints: |
1189
- maxSkew: 1
1190
topologyKey: topology.kubernetes.io/zone
1191
whenUnsatisfiable: ScheduleAnyway
1192
labelSelector:
1193
matchLabels:
1194
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "live-store") | nindent 6 }}
1195
# -- Affinity for live-store pods. Passed through `tpl`.
1196
affinity: |
1197
podAntiAffinity:
1198
preferredDuringSchedulingIgnoredDuringExecution:
1199
- weight: 100
1200
podAffinityTerm:
1201
labelSelector:
1202
matchLabels:
1203
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "live-store") | nindent 12 }}
1204
topologyKey: kubernetes.io/hostname
1205
# -- Node selector for live-store pods
1206
nodeSelector: {}
1207
# -- Tolerations for live-store pods
1208
tolerations: []
1209
# -- Extra volumes for live-store pods
1210
extraVolumeMounts: []
1211
# -- Extra volumes for live-store StatefulSet
1212
extraVolumes: []
1213
# -- Containers to add to the live-store pods
1214
extraContainers: []
1215
# -- updateStrategy of the live-store StatefulSet
1216
statefulStrategy:
1217
rollingUpdate:
1218
partition: 0
1219
# -- Persistence configuration for live-store
1220
persistence:
1221
# -- Enable creating PVCs for the live-store data volume. The WAL and local
1222
# blocks then survive a restart, so the live-store resumes from its committed
1223
# Kafka offset (never further back than 2 x complete_block_timeout) instead of
1224
# re-reading that whole window, as it must when it starts with no local data.
1225
enabled: false
1226
# -- Enable StatefulSetRecreation for changes to PVC size
1227
enableStatefulSetRecreationForSizeChange: false
1228
# -- use emptyDir with ramdisk instead of PVC. **Please note that all data in live-store will be lost on pod restart**
1229
inMemory: false
1230
# -- Size of persistent or memory disk
1231
size: 10Gi
1232
# -- Storage class to be used.
1233
# If defined, storageClassName: <storageClass>.
1234
# If set to "-", storageClassName: "", which disables dynamic provisioning.
1235
# If empty or set to null, no storageClassName spec is
1236
# set, choosing the default provisioner (gp2 on AWS, standard on GKE, AWS, and OpenStack).
1237
storageClass: null
1238
# -- Annotations for live-store's persist volume claim
1239
annotations: {}
1240
# -- Labels for live-store's persist volume claim
1241
labels: {}
1242
# -- Spec for the `data` volume when persistence is disabled. By default an
1243
# empty `emptyDir: {}`; set e.g. `sizeLimit` or `medium: Memory` as needed.
1244
walEmptyDir: {}
1245
# Note: the retained volume also holds the live-store's shutdown marker
1246
# (`/var/tempo/live-store/shutdown-marker`). It is removed on a graceful shutdown,
1247
# but if a pod is force-killed after the rollout-operator has called
1248
# `prepare-downscale` (grace period exceeded, OOMKill, node loss), a stale marker
1249
# is left on the volume. On scale-up that pod then starts with
1250
# `create-partition-on-startup=false` and its partition will not become ACTIVE, so
1251
# it takes no writes. If a scaled-up live-store never becomes ready, or its
1252
# partition stays INACTIVE, remove the shutdown marker from its PVC or call
1253
# `DELETE /live-store/prepare-downscale` on it.
1254
persistentVolumeClaimRetentionPolicy:
1255
# -- Enable Persistent volume retention policy for the live-store StatefulSet
1256
enabled: false
1257
# -- Volume retention behaviour when the StatefulSet replica count is reduced
1258
whenScaled: Retain
1259
# -- Volume retention behaviour when the StatefulSet is deleted
1260
whenDeleted: Retain
1261
# Zone-aware replication spreads the live-stores over failure domains such as
1262
# availability zones, racks or data centres. Every zone runs a full set of
1263
# live-stores, so each Kafka partition gets one owner per zone (RF equals the
1264
# number of zones). The read quorum is 1: a querier only needs an answer from
1265
# one zone, so recent-trace queries survive the loss of a zone.
1266
# Requires `rollout_operator.enabled: true`.
1267
zoneAwareReplication:
1268
# -- Enable zone-aware replication for the live-store
1269
enabled: false
1270
# -- Set to true when a rollout-operator already runs in this namespace and is
1271
# not installed by this chart. Skips the `rollout_operator.enabled` check.
1272
rolloutOperatorManagedExternally: false
1273
# -- Topology key of the failure domain. When set, the live-stores of one zone
1274
# never share a domain with the live-stores of another zone. The cluster must
1275
# hold at least as many domains as there are zones, otherwise the extra zones
1276
# stay unschedulable. With neither this nor a `nodeSelector` on every zone,
1277
# the zones still give separate pods and one partition owner each, but two
1278
# zones can share a failure domain.
1279
topologyKey: null
1280
# -- Maximum number of live-stores the rollout-operator restarts at the same
1281
# time inside one zone. The rollout-operator always moves one zone at a time.
1282
# A zone with fewer live-stores than this restarts as a whole, which the read
1283
# quorum of 1 covers, at the cost of the read capacity of that zone.
1284
maxUnavailable: 25
1285
# -- Reject every scale-down of the live-stores. The live-store count must
1286
# match the Kafka partition count, so an accidental scale-down drops the
1287
# recent-read tier of the partitions that go away. Needs the rollout-operator
1288
# webhooks. Cannot be combined with `prepareDownscale.enabled`.
1289
noDownscale: false
1290
# Coordinated scale-down through the rollout-operator admission webhook. It
1291
# guards a lower `liveStore.replicas`, which retires the last Kafka
1292
# partitions. On such a scale-down the webhook calls `httpPath` on every
1293
# live-store that goes away, which moves its partition to INACTIVE and stops
1294
# the writes to it. The webhook then rejects the scale-down of a second zone
1295
# until `minTimeBetweenZonesDownscale` has passed, so the zones go down one
1296
# at a time. A rejected scale-down fails the `helm upgrade`: wait for the
1297
# window, then run the upgrade again.
1298
#
1299
# The webhook is the only mechanism the chart uses, so a pod stops as soon
1300
# as its partition is INACTIVE. The remaining zones still own that partition
1301
# and still hold its recent traces, which is what keeps the read path whole
1302
# until the last zone goes down. Do not remove a zone from the `zones` list
1303
# in the same step: that deletes the StatefulSet, which the webhook never
1304
# sees.
1305
prepareDownscale:
1306
# -- Enable the coordinated scale-down
1307
enabled: false
1308
# -- Minimum time between the scale-down of two zones. Must be longer than
1309
# the period a live-store still serves recent traces, because the last
1310
# zone to go down takes the last owner of the retired partitions with it.
1311
minTimeBetweenZonesDownscale: 12h
1312
# -- Endpoint the webhook calls on every live-store that goes away. Must
1313
# accept a POST while the partition is still ACTIVE.
1314
# `live-store/prepare-downscale` does not: it answers 409 until the
1315
# partition is INACTIVE, so it needs the delayed-downscale mechanism of
1316
# the rollout-operator, which this chart does not configure.
1317
httpPath: live-store/prepare-partition-downscale
1318
# Voluntary evictions of zone-aware live-stores, through the
1319
# ZoneAwarePodDisruptionBudget of the rollout-operator. A native
1320
# PodDisruptionBudget counts pods, so it cannot tell that the same pod
1321
# ordinal in two zones holds every owner of one partition. This one counts
1322
# per partition across zones and rejects an eviction that would take the
1323
# last owner, whatever the budget of a single zone allows.
1324
#
1325
# Needs the ZoneAwarePodDisruptionBudget CRD and the pod eviction webhook of
1326
# the rollout-operator. The bundled subchart installs both. The webhook
1327
# rejects an eviction while the rollout-operator is unreachable, so this
1328
# never opens a window. While this is on, it replaces the
1329
# `liveStore.podDisruptionBudget` object.
1330
podDisruptionBudget:
1331
# -- Guard the evictions with a ZoneAwarePodDisruptionBudget. Set to false
1332
# to keep a single native PodDisruptionBudget over all zones instead.
1333
enabled: true
1334
# -- Live-stores of one partition that may be unavailable at the same
1335
# time, counted over every zone. 1 keeps a partition served through any
1336
# single voluntary eviction. 0 rejects every voluntary eviction.
1337
maxUnavailable: 1
1338
# -- Regular expression that returns the partition of a live-store from
1339
# its pod name. The rollout-operator anchors it with `^` and `$`, so it
1340
# must match the whole name. The default reads the pod ordinal, which is
1341
# the Kafka partition, and holds for any zone name.
1342
podNamePartitionRegex: ".*-([0-9]+)"
1343
# -- Capture group of the partition. Only needed when
1344
# `podNamePartitionRegex` holds more than one group.
1345
podNameRegexGroup: null
1346
# -- Minimum time after a live-store becomes ready before another owner of
1347
# the same partition may be evicted. A Go duration, so days are not a
1348
# unit. Set this when the live-stores run with the default
1349
# `readiness-target-lag` of 0, because a live-store then reports ready
1350
# while it still replays its partition.
1351
crossZoneEvictionDelay: null
1352
# -- Zones to deploy. At least 2 zones are required. Every zone runs
1353
# `liveStore.replicas` live-stores. A zone name must be a DNS label: it
1354
# becomes a StatefulSet name suffix and the value of the zone label.
1355
zones:
1356
- name: zone-a
1357
# -- Node selector for the live-stores of this zone. Merged on top of
1358
# `liveStore.nodeSelector`, or of `defaults.nodeSelector`.
1359
nodeSelector: null
1360
# -- Extra affinity for the live-stores of this zone. Merged on top of
1361
# `liveStore.affinity`. The zone anti-affinity of `topologyKey`
1362
# overwrites a `podAntiAffinity` here.
1363
extraAffinity: {}
1364
# -- Extra annotations for the StatefulSet of this zone
1365
annotations: {}
1366
# -- Extra annotations for the pods of this zone
1367
podAnnotations: {}
1368
- name: zone-b
1369
nodeSelector: null
1370
extraAffinity: {}
1371
annotations: {}
1372
podAnnotations: {}
1373
# -- Pod Disruption Budget configuration
1374
podDisruptionBudget:
1375
# -- Enable PodDisruptionBudget for live-store
1376
enabled: true
1377
# -- Set unhealthyPodEvictionPolicy for the live-store PodDisruptionBudget. Requires policy/v1.
1378
unhealthyPodEvictionPolicy: ""
1379
# -- Pod Disruption Budget maxUnavailable. With zone-aware replication the
1380
# budget covers the live-stores of every zone together, because the same pod
1381
# ordinal in two zones holds every owner of one partition.
1382
maxUnavailable: 1
1383
service:
1384
# -- Annotations for live-store service
1385
annotations: {}
1386
# -- Extra live-store configuration. Merged verbatim into the `live_store:` config block.
1387
# See https://grafana.com/docs/tempo/latest/configuration/#live-store for available fields.
1388
config:
1389
ring:
1390
kvstore:
1391
store: memberlist
1392
# Configuration for the querier
1393
querier:
1394
# -- Number of replicas for the querier
1395
replicas: 1
1396
# -- hostAliases to add
1397
hostAliases: []
1398
# - ip: 1.2.3.4
1399
# hostnames:
1400
# - domain.tld
1401
# -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1402
dnsConfig: {}
1403
# -- Annotations for querier deployment
1404
annotations: {}
1405
autoscaling:
1406
# -- Enable autoscaling for the querier
1407
enabled: false
1408
# -- Minimum autoscaling replicas for the querier
1409
minReplicas: 1
1410
# -- Maximum autoscaling replicas for the querier
1411
maxReplicas: 3
1412
# -- Autoscaling behavior configuration for the querier
1413
behavior: {}
1414
# -- Target CPU utilisation percentage for the querier
1415
targetCPUUtilizationPercentage: 60
1416
# -- Target memory utilisation percentage for the querier
1417
targetMemoryUtilizationPercentage:
1418
image:
1419
# -- The Docker registry for the querier image. Overrides `tempo.image.registry`
1420
registry: null
1421
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1422
pullSecrets: []
1423
# -- Docker image repository for the querier image. Overrides `tempo.image.repository`
1424
repository: null
1425
# -- Docker image tag for the querier image. Overrides `tempo.image.tag`
1426
tag: null
1427
# -- The name of the PriorityClass for querier pods
1428
priorityClassName: null
1429
# -- Labels for querier pods
1430
podLabels: {}
1431
# -- Annotations for querier pods
1432
podAnnotations: {}
1433
# -- Additional CLI args for the querier
1434
extraArgs: []
1435
# -- Environment variables to add to the querier pods
1436
extraEnv: []
1437
# -- Environment variables from secrets or configmaps to add to the querier pods
1438
extraEnvFrom: []
1439
# -- Liveness probe for querier pods. Deep-merged over `tempo.livenessProbe`.
1440
livenessProbe: {}
1441
# -- Readiness probe for querier pods. Deep-merged over `tempo.readinessProbe`.
1442
readinessProbe: {}
1443
# -- Startup probe for querier pods. Deep-merged over `tempo.startupProbe`.
1444
startupProbe: {}
1445
# -- Resource requests and limits for the querier
1446
resources: {}
1447
# -- Grace period to allow the querier to shutdown before it is killed
1448
terminationGracePeriodSeconds: 30
1449
# -- topologySpread for querier pods. Passed through `tpl` and, thus, to be configured as string
1450
# @default -- Defaults to allow skew no more then 1 node per AZ
1451
topologySpreadConstraints: |
1452
- maxSkew: 1
1453
topologyKey: topology.kubernetes.io/zone
1454
whenUnsatisfiable: ScheduleAnyway
1455
labelSelector:
1456
matchLabels:
1457
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "querier") | nindent 6 }}
1458
# -- Affinity for querier pods. Passed through `tpl` and, thus, to be configured as string
1459
# @default -- Hard node and soft zone anti-affinity
1460
affinity: |
1461
podAntiAffinity:
1462
requiredDuringSchedulingIgnoredDuringExecution:
1463
- labelSelector:
1464
matchLabels:
1465
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "querier" "memberlist" true) | nindent 10 }}
1466
topologyKey: kubernetes.io/hostname
1467
preferredDuringSchedulingIgnoredDuringExecution:
1468
- weight: 100
1469
podAffinityTerm:
1470
labelSelector:
1471
matchLabels:
1472
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "querier" "memberlist" true) | nindent 12 }}
1473
topologyKey: topology.kubernetes.io/zone
1474
# -- Pod Disruption Budget configuration
1475
podDisruptionBudget:
1476
# -- Enable PodDisruptionBudget for querier
1477
enabled: true
1478
# -- Set unhealthyPodEvictionPolicy for the querier PodDisruptionBudget. Requires policy/v1.
1479
unhealthyPodEvictionPolicy: ""
1480
# -- Pod Disruption Budget maxUnavailable
1481
maxUnavailable: 1
1482
# -- Max Surge for querier pods
1483
maxSurge: 0
1484
rollingUpdate:
1485
# -- Maximum number of Pods that can be unavailable during the update process
1486
maxUnavailable: 1
1487
# -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
1488
minReadySeconds: 10
1489
# -- Node selector for querier pods
1490
nodeSelector: {}
1491
# -- Tolerations for querier pods
1492
tolerations: []
1493
# -- Init containers for the querier pod
1494
initContainers: []
1495
# -- Containers to add to the querier pods
1496
extraContainers: []
1497
# -- Additional ports to expose on the querier container.
1498
# Standard ports (http-metrics, http-memberlist) are always added automatically.
1499
extraPorts: []
1500
# -- Extra volumes for querier pods
1501
extraVolumeMounts: []
1502
# -- Extra volumes for querier deployment
1503
extraVolumes: []
1504
config:
1505
frontend_worker:
1506
# -- gRPC client configuration
1507
grpc_client_config: {}
1508
trace_by_id:
1509
# -- Timeout for trace lookup requests
1510
query_timeout: 10s
1511
search:
1512
# -- Timeout for search requests
1513
query_timeout: 30s
1514
# -- This value controls the overall number of simultaneous subqueries that the querier will service at once. It does not distinguish between the types of queries.
1515
max_concurrent_queries: 20
1516
service:
1517
# -- Annotations for querier service
1518
annotations: {}
1519
# -- Traffic distribution for the querier service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
1520
trafficDistribution: null
1521
# -- Adds the appProtocol field to the querier service. This allows querier to work with istio protocol selection.
1522
appProtocol:
1523
# -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
1524
grpc: null
1525
# Configuration for the query-frontend
1526
queryFrontend:
1527
query:
1528
# -- Required for grafana version <7.5 for compatibility with jaeger-ui. Doesn't work on ARM arch
1529
enabled: false
1530
image:
1531
# -- The Docker registry for the tempo-query image. Overrides `tempo.image.registry`
1532
registry: null
1533
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1534
pullSecrets: []
1535
# -- Docker image repository for the tempo-query image. Overrides `tempo.image.repository`
1536
repository: grafana/tempo-query
1537
# -- Docker image tag for the tempo-query image. Overrides `tempo.image.tag`
1538
tag: null
1539
# -- Resource requests and limits for the query
1540
resources: {}
1541
# -- Additional CLI args for tempo-query pods
1542
extraArgs: []
1543
# -- Environment variables to add to the tempo-query pods
1544
extraEnv: []
1545
# -- Environment variables from secrets or configmaps to add to the tempo-query pods
1546
extraEnvFrom: []
1547
# -- Extra volumes for tempo-query pods
1548
extraVolumeMounts: []
1549
# -- Extra volumes for tempo-query deployment
1550
extraVolumes: []
1551
config: |
1552
backend: 127.0.0.1:3200
1553
# -- Number of replicas for the query-frontend
1554
replicas: 1
1555
# -- Annotations for the query-frontend Deployment
1556
annotations: {}
1557
# -- hostAliases to add
1558
hostAliases: []
1559
# - ip: 1.2.3.4
1560
# hostnames:
1561
# - domain.tld
1562
# -- Pod DNS config for this component. Falls back to `defaults.dnsConfig`, then `tempo.dnsConfig`.
1563
dnsConfig: {}
1564
config:
1565
# -- Maximum number of outstanding requests per tenant per frontend; requests beyond this error with HTTP 429.
1566
max_outstanding_per_tenant: 2000
1567
# -- Number of times to retry a request sent to a querier
1568
max_retries: 2
1569
search:
1570
# -- The number of concurrent jobs to execute when searching the backend
1571
concurrent_jobs: 1000
1572
# -- The target number of bytes for each job to handle when performing a backend search
1573
target_bytes_per_job: 104857600
1574
# -- The maximum allowed value of spans per span set. 0 disables this limit.
1575
max_spans_per_span_set: 100
1576
# -- The maximum allowed value for the limit parameter on search requests. 0 disables this limit.
1577
# max_result_limit: 262144 maximum number of results returned by search requests
1578
# -- Trace by ID lookup configuration
1579
trace_by_id:
1580
# -- The number of shards to split a trace by ID query into.
1581
query_shards: 50
1582
metrics:
1583
# -- The number of concurrent jobs to execute when querying the backend.
1584
concurrent_jobs: 1000
1585
# -- The target number of bytes for each job to handle when querying the backend.
1586
target_bytes_per_job: 104857600
1587
# -- The maximum allowed time range for a metrics query.
1588
# 0 disables this limit.
1589
max_duration: 3h
1590
# -- query_backend_after controls where the query-frontend searches for traces.
1591
# Time ranges newer than query_backend_after will be searched in the live-stores only.
1592
# Time ranges older than query_backend_after will be searched in the backend/object storage only.
1593
query_backend_after: 15m
1594
# -- The target length of time for each job to handle when querying the backend.
1595
interval: 5m
1596
# -- If set to a non-zero value, it's value will be used to decide if query is within SLO or not.
1597
# Query is within SLO if it returned 200 within duration_slo seconds OR processed throughput_slo bytes/s data.
1598
# NOTE: `duration_slo` and `throughput_bytes_slo` both must be configured for it to work
1599
duration_slo: 0s
1600
# -- If set to a non-zero value, it's value will be used to decide if query is within SLO or not.
1601
# Query is within SLO if it returned 200 within duration_slo seconds OR processed throughput_slo bytes/s data.
1602
throughput_bytes_slo: 0
1603
autoscaling:
1604
# -- Enable autoscaling for the query-frontend
1605
enabled: false
1606
# -- Minimum autoscaling replicas for the query-frontend
1607
minReplicas: 1
1608
# -- Maximum autoscaling replicas for the query-frontend
1609
maxReplicas: 3
1610
# -- Autoscaling behavior configuration for the query-frontend
1611
behavior: {}
1612
# -- Target CPU utilisation percentage for the query-frontend
1613
targetCPUUtilizationPercentage: 60
1614
# -- Target memory utilisation percentage for the query-frontend
1615
targetMemoryUtilizationPercentage:
1616
image:
1617
# -- The Docker registry for the query-frontend image. Overrides `tempo.image.registry`
1618
registry: null
1619
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1620
pullSecrets: []
1621
# -- Docker image repository for the query-frontend image. Overrides `tempo.image.repository`
1622
repository: null
1623
# -- Docker image tag for the query-frontend image. Overrides `tempo.image.tag`
1624
tag: null
1625
service:
1626
# -- Port of the query-frontend service
1627
port: 16686
1628
# -- http Metrics port of the query-frontend service
1629
httpMetricsPort: 3200
1630
# -- gRPC Port of the query-frontend service
1631
grpcPort: 9095
1632
# -- Annotations for queryFrontend service
1633
annotations: {}
1634
# -- Labels for queryFrontend service
1635
labels: {}
1636
# -- Type of service for the queryFrontend
1637
type: ClusterIP
1638
# -- Traffic distribution for the queryFrontend service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
1639
trafficDistribution: null
1640
# -- If type is LoadBalancer you can assign the IP to the LoadBalancer
1641
loadBalancerIP: ""
1642
# -- If type is LoadBalancer limit incoming traffic from IPs.
1643
loadBalancerSourceRanges: []
1644
serviceDiscovery:
1645
# -- Annotations for queryFrontendDiscovery service
1646
annotations: {}
1647
# -- Labels for queryFrontendDiscovery service
1648
labels: {}
1649
ingress:
1650
# -- Specifies whether an ingress for the Jaeger should be created
1651
enabled: false
1652
# -- Ingress Class Name. MAY be required for Kubernetes versions >= 1.18
1653
# ingressClassName: nginx
1654
# -- Annotations for the Jaeger ingress
1655
annotations: {}
1656
# -- Hosts configuration for the Jaeger ingress
1657
hosts:
1658
- host: query.tempo.example.com
1659
paths:
1660
- path: /
1661
# -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
1662
# pathType: Prefix
1663
# -- TLS configuration for the Jaeger ingress
1664
tls:
1665
- secretName: tempo-query-tls
1666
hosts:
1667
- query.tempo.example.com
1668
# -- Gateway API route configuration for the query-frontend (Jaeger UI).
1669
# Multiple routes can be added by adding a dictionary key like the 'main' route.
1670
route:
1671
main:
1672
# -- Specifies whether a Gateway API route for the query-frontend should be created
1673
enabled: false
1674
# -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1beta1
1675
# If not set, the latest available version will be auto-detected
1676
apiVersion: ""
1677
# -- Set the route kind
1678
# Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute
1679
kind: HTTPRoute
1680
# -- Route annotations
1681
annotations: {}
1682
# -- Route labels
1683
labels: {}
1684
# -- Hostnames for the route
1685
hostnames: []
1686
# - query.tempo.example.com
1687
# -- Parent references (gateway to attach to)
1688
parentRefs: []
1689
# - name: my-gateway
1690
# namespace: gateway-namespace
1691
# -- Matches define conditions for matching incoming requests
1692
matches:
1693
- path:
1694
type: PathPrefix
1695
value: /
1696
# -- Timeouts define the timeouts that can be configured for an HTTP request.
1697
# Ref. https://gateway-api.sigs.k8s.io/api-types/httproute/#timeouts-optional
1698
timeouts: {}
1699
# -- Filters define the filters that are applied to requests that match this rule.
1700
filters: []
1701
# -- Additional custom rules that can be added to the route
1702
additionalRules: []
1703
# -- The name of the PriorityClass for query-frontend pods
1704
priorityClassName: null
1705
# -- Labels for queryFrontend pods
1706
podLabels: {}
1707
# -- Annotations for query-frontend pods
1708
podAnnotations: {}
1709
# -- Additional CLI args for the query-frontend
1710
extraArgs: []
1711
# -- Environment variables to add to the query-frontend pods
1712
extraEnv: []
1713
# -- Environment variables from secrets or configmaps to add to the query-frontend pods
1714
extraEnvFrom: []
1715
# -- Liveness probe for query-frontend pods. Deep-merged over `tempo.livenessProbe`.
1716
livenessProbe: {}
1717
# -- Readiness probe for query-frontend pods. Deep-merged over `tempo.readinessProbe`.
1718
readinessProbe: {}
1719
# -- Startup probe for query-frontend pods. Deep-merged over `tempo.startupProbe`.
1720
startupProbe: {}
1721
# -- Resource requests and limits for the query-frontend
1722
resources: {}
1723
# -- Grace period to allow the query-frontend to shutdown before it is killed
1724
terminationGracePeriodSeconds: 30
1725
# -- topologySpread for query-frontend pods. Passed through `tpl` and, thus, to be configured as string
1726
# @default -- Defaults to allow skew no more then 1 node per AZ
1727
topologySpreadConstraints: |
1728
- maxSkew: 1
1729
topologyKey: topology.kubernetes.io/zone
1730
whenUnsatisfiable: ScheduleAnyway
1731
labelSelector:
1732
matchLabels:
1733
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "query-frontend") | nindent 6 }}
1734
# -- Affinity for query-frontend pods. Passed through `tpl` and, thus, to be configured as string
1735
# @default -- Hard node and soft zone anti-affinity
1736
affinity: |
1737
podAntiAffinity:
1738
requiredDuringSchedulingIgnoredDuringExecution:
1739
- labelSelector:
1740
matchLabels:
1741
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "query-frontend") | nindent 10 }}
1742
topologyKey: kubernetes.io/hostname
1743
preferredDuringSchedulingIgnoredDuringExecution:
1744
- weight: 100
1745
podAffinityTerm:
1746
labelSelector:
1747
matchLabels:
1748
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "query-frontend") | nindent 12 }}
1749
topologyKey: topology.kubernetes.io/zone
1750
# -- Pod Disruption Budget configuration
1751
podDisruptionBudget:
1752
# -- Enable PodDisruptionBudget for query-frontend
1753
enabled: true
1754
# -- Set unhealthyPodEvictionPolicy for the query-frontend PodDisruptionBudget. Requires policy/v1.
1755
unhealthyPodEvictionPolicy: ""
1756
# -- Pod Disruption Budget maxUnavailable
1757
maxUnavailable: 1
1758
# -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
1759
minReadySeconds: 10
1760
# -- Node selector for query-frontend pods
1761
nodeSelector: {}
1762
# -- Tolerations for query-frontend pods
1763
tolerations: []
1764
# -- Init containers for the query-frontend pod
1765
initContainers: []
1766
# -- Containers to add to the query-frontend pods
1767
extraContainers: []
1768
# -- Additional ports to expose on the query-frontend container.
1769
# The gRPC port is included by default. Standard ports (http-metrics, http-memberlist)
1770
# are always added automatically by the pod template.
1771
extraPorts:
1772
- containerPort: 9095
1773
name: grpc
1774
protocol: TCP
1775
# -- Extra volumes for query-frontend pods
1776
extraVolumeMounts: []
1777
# -- Extra volumes for query-frontend deployment
1778
extraVolumes: []
1779
# -- Adds the appProtocol field to the queryFrontend service. This allows queryFrontend to work with istio protocol selection.
1780
appProtocol:
1781
# -- Set the optional gRPC service protocol. Ex: "grpc", "http2" or "https"
1782
grpc: null
1783
mcp_server:
1784
# -- Enables Tempo MCP Server
1785
enabled: false
1786
# Configuration for the federation-frontend
1787
# Can only be enabled if enterprise.enabled is true - requires license.
1788
enterpriseFederationFrontend:
1789
# -- Specifies whether a federation-frontend should be deployed
1790
enabled: false
1791
# -- Number of replicas for the federation-frontend
1792
replicas: 1
1793
# -- Annotations for the federation-frontend Deployment
1794
annotations: {}
1795
# -- hostAliases to add
1796
hostAliases: []
1797
# - ip: 1.2.3.4
1798
# hostnames:
1799
# - domain.tld
1800
proxy_targets: []
1801
# - name: own-data-center
1802
# url: http://get/tempo
1803
# - name: grafana-cloud
1804
# url: https://tempo-us-central1.grafana.net/tempo
1805
# basic_auth:
1806
# username: <instance-id>
1807
# password: <token>
1808
autoscaling:
1809
# -- Enable autoscaling for the federation-frontend
1810
enabled: false
1811
# -- Minimum autoscaling replicas for the federation-frontend
1812
minReplicas: 1
1813
# -- Maximum autoscaling replicas for the federation-frontend
1814
maxReplicas: 3
1815
# -- Target CPU utilisation percentage for the federation-frontend
1816
targetCPUUtilizationPercentage: 60
1817
# -- Target memory utilisation percentage for the federation-frontend
1818
targetMemoryUtilizationPercentage:
1819
image:
1820
# -- The Docker registry for the federation-frontend image. Overrides `tempo.image.registry`
1821
registry: null
1822
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
1823
pullSecrets: []
1824
# -- Docker image repository for the federation-frontend image. Overrides `tempo.image.repository`
1825
repository: null
1826
# -- Docker image tag for the federation-frontend image. Overrides `tempo.image.tag`
1827
tag: null
1828
service:
1829
# -- Port of the federation-frontend service
1830
port: 3200
1831
# -- Annotations for enterpriseFederationFrontend service
1832
annotations: {}
1833
# -- Type of service for the enterpriseFederationFrontend
1834
type: ClusterIP
1835
# -- If type is LoadBalancer you can assign the IP to the LoadBalancer
1836
loadBalancerIP: ""
1837
# -- If type is LoadBalancer limit incoming traffic from IPs.
1838
loadBalancerSourceRanges: []
1839
# -- The name of the PriorityClass for federation-frontend pods
1840
priorityClassName: null
1841
# -- Labels for enterpriseFederationFrontend pods
1842
podLabels: {}
1843
# -- Annotations for federation-frontend pods
1844
podAnnotations: {}
1845
# -- Additional CLI args for the federation-frontend
1846
extraArgs: []
1847
# -- Environment variables to add to the federation-frontend pods
1848
extraEnv: []
1849
# -- Environment variables from secrets or configmaps to add to the federation-frontend pods
1850
extraEnvFrom: []
1851
# -- Resource requests and limits for the federation-frontend
1852
resources: {}
1853
# -- Grace period to allow the federation-frontend to shutdown before it is killed
1854
terminationGracePeriodSeconds: 30
1855
# -- topologySpread for federation-frontend pods. Passed through `tpl` and, thus, to be configured as string
1856
# @default -- Defaults to allow skew no more then 1 node per AZ
1857
topologySpreadConstraints: |
1858
- maxSkew: 1
1859
topologyKey: failure-domain.beta.kubernetes.io/zone
1860
whenUnsatisfiable: ScheduleAnyway
1861
labelSelector:
1862
matchLabels:
1863
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "federation-frontend") | nindent 6 }}
1864
# -- Affinity for federation-frontend pods. Passed through `tpl` and, thus, to be configured as string
1865
# @default -- Hard node and soft zone anti-affinity
1866
affinity: |
1867
podAntiAffinity:
1868
requiredDuringSchedulingIgnoredDuringExecution:
1869
- labelSelector:
1870
matchLabels:
1871
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "federation-frontend") | nindent 10 }}
1872
topologyKey: kubernetes.io/hostname
1873
preferredDuringSchedulingIgnoredDuringExecution:
1874
- weight: 100
1875
podAffinityTerm:
1876
labelSelector:
1877
matchLabels:
1878
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "federation-frontend") | nindent 12 }}
1879
topologyKey: failure-domain.beta.kubernetes.io/zone
1880
# -- Pod Disruption Budget configuration
1881
podDisruptionBudget:
1882
# -- Enable PodDisruptionBudget for enterprise-federation-frontend
1883
enabled: true
1884
# -- Pod Disruption Budget maxUnavailable
1885
maxUnavailable: 1
1886
# -- Node selector for federation-frontend pods
1887
nodeSelector: {}
1888
# -- Tolerations for federation-frontend pods
1889
tolerations: []
1890
# -- Extra volumes for federation-frontend pods
1891
extraVolumeMounts: []
1892
# -- Extra volumes for federation-frontend deployment
1893
extraVolumes: []
1894
multitenancyEnabled: false
1895
rollout_operator:
1896
# -- Enable rollout-operator. It must be enabled when using Zone Aware Replication.
1897
enabled: false
1898
podSecurityContext:
1899
fsGroup: 10001
1900
runAsGroup: 10001
1901
runAsNonRoot: true
1902
runAsUser: 10001
1903
seccompProfile:
1904
type: RuntimeDefault
1905
# Set the container security context
1906
securityContext:
1907
readOnlyRootFilesystem: true
1908
capabilities:
1909
drop: [ALL]
1910
allowPrivilegeEscalation: false
1911
traces:
1912
jaeger:
1913
grpc:
1914
# -- Enable Tempo to ingest Jaeger gRPC traces
1915
enabled: false
1916
# -- Jaeger gRPC receiver config
1917
receiverConfig: {}
1918
thriftBinary:
1919
# -- Enable Tempo to ingest Jaeger Thrift Binary traces
1920
enabled: false
1921
# -- Jaeger Thrift Binary receiver config
1922
receiverConfig: {}
1923
thriftCompact:
1924
# -- Enable Tempo to ingest Jaeger Thrift Compact traces
1925
enabled: false
1926
# -- Jaeger Thrift Compact receiver config
1927
receiverConfig: {}
1928
thriftHttp:
1929
# -- Enable Tempo to ingest Jaeger Thrift HTTP traces
1930
enabled: false
1931
# -- Jaeger Thrift HTTP receiver config
1932
receiverConfig: {}
1933
zipkin:
1934
# -- Enable Tempo to ingest Zipkin traces
1935
enabled: false
1936
# -- Zipkin receiver config
1937
receiverConfig: {}
1938
otlp:
1939
http:
1940
# -- Enable Tempo to ingest Open Telemetry HTTP traces
1941
enabled: false
1942
# -- HTTP receiver advanced config
1943
receiverConfig: {}
1944
grpc:
1945
# -- Enable Tempo to ingest Open Telemetry gRPC traces
1946
enabled: false
1947
# -- gRPC receiver advanced config
1948
receiverConfig: {}
1949
# -- Default OTLP gRPC port
1950
port: 4317
1951
# -- Enable Tempo to ingest traces from Kafka. Reference: https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/kafkareceiver
1952
kafka: {}
1953
# -- Memberlist configuration. Please refer to https://grafana.com/docs/tempo/latest/configuration/#memberlist
1954
memberlist:
1955
node_name: ""
1956
cluster_label: "{{ .Release.Name }}.{{ .Release.Namespace }}"
1957
randomize_node_name: true
1958
stream_timeout: "10s"
1959
retransmit_factor: 2
1960
pull_push_interval: "30s"
1961
gossip_interval: "1s"
1962
gossip_nodes: 2
1963
gossip_to_dead_nodes_time: "30s"
1964
min_join_backoff: "1s"
1965
max_join_backoff: "1m"
1966
max_join_retries: 10
1967
abort_if_cluster_join_fails: false
1968
rejoin_interval: "0s"
1969
left_ingesters_timeout: "5m"
1970
leave_timeout: "5s"
1971
bind_addr: []
1972
bind_port: 7946
1973
packet_dial_timeout: "5s"
1974
packet_write_timeout: "5s"
1975
# -- Config file contents for Tempo distributed. Passed through the `tpl` function to allow templating
1976
1977
# @default -- See values.yaml
1978
config: |
1979
multitenancy_enabled: {{ .Values.multitenancyEnabled }}
1980
1981
stream_over_http_enabled: {{ .Values.streamOverHTTPEnabled }}
1982
1983
usage_report:
1984
reporting_enabled: {{ .Values.reportingEnabled }}
1985
1986
{{- if .Values.enterprise.enabled }}
1987
license:
1988
path: "/license/license.jwt"
1989
1990
admin_api:
1991
leader_election:
1992
enabled: true
1993
ring:
1994
kvstore:
1995
store: "memberlist"
1996
1997
auth:
1998
type: enterprise
1999
2000
http_api_prefix: {{get .Values.tempo.structuredConfig "http_api_prefix"}}
2001
2002
admin_client:
2003
storage:
2004
backend: {{.Values.storage.admin.backend}}
2005
{{- if eq .Values.storage.admin.backend "s3"}}
2006
s3:
2007
{{- toYaml .Values.storage.admin.s3 | nindent 6}}
2008
{{- end}}
2009
{{- if eq .Values.storage.admin.backend "gcs"}}
2010
gcs:
2011
{{- toYaml .Values.storage.admin.gcs | nindent 6}}
2012
{{- end}}
2013
{{- if eq .Values.storage.admin.backend "azure"}}
2014
azure:
2015
{{- toYaml .Values.storage.admin.azure | nindent 6}}
2016
{{- end}}
2017
{{- if eq .Values.storage.admin.backend "swift"}}
2018
swift:
2019
{{- toYaml .Values.storage.admin.swift | nindent 6}}
2020
{{- end}}
2021
{{- if eq .Values.storage.admin.backend "filesystem"}}
2022
filesystem:
2023
{{- toYaml .Values.storage.admin.filesystem | nindent 6}}
2024
{{- end}}
2025
{{- end }}
2026
2027
{{- if and .Values.enterprise.enabled .Values.enterpriseGateway.useDefaultProxyURLs }}
2028
gateway:
2029
proxy:
2030
admin_api:
2031
url: http://{{ template "tempo.fullname" . }}-admin-api.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2032
{{- if .Values.backendScheduler.enabled }}
2033
backend_worker:
2034
url: http://{{ template "tempo.fullname" . }}-backend-worker.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2035
{{- end }}
2036
default:
2037
url: http://{{ template "tempo.fullname" . }}-admin-api.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2038
distributor:
2039
url: http://{{ template "tempo.fullname" . }}-distributor.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2040
otlp/grpc:
2041
url: h2c://{{ template "tempo.fullname" . }}-distributor.{{ .Release.Namespace }}.svc:4317
2042
otlp/http:
2043
url: http://{{ template "tempo.fullname" . }}-distributor.{{ .Release.Namespace }}.svc:4318
2044
querier:
2045
url: http://{{ template "tempo.fullname" . }}-querier.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}
2046
query_frontend:
2047
url: http://{{ template "tempo.fullname" . }}-query-frontend.{{ .Release.Namespace }}.svc:{{ include "tempo.serverHttpListenPort" . }}{{get .Values.tempo.structuredConfig "http_api_prefix"}}
2048
{{else}}
2049
{{- if and .Values.enterprise.enabled .Values.enterpriseGateway.proxy }}
2050
gateway:
2051
proxy: {{- toYaml .Values.enterpriseGateway.proxy | nindent 6 }}
2052
{{- end }}
2053
{{- end }}
2054
2055
{{- if .Values.backendScheduler.enabled }}
2056
backend_scheduler:
2057
work:
2058
prune_age: {{ .Values.backendScheduler.config.work.prune_age }}
2059
dead_job_timeout: {{ .Values.backendScheduler.config.work.dead_job_timeout }}
2060
maintenance_interval: {{ .Values.backendScheduler.config.maintenance_interval }}
2061
backend_flush_interval: {{ .Values.backendScheduler.config.backend_flush_interval }}
2062
provider:
2063
retention:
2064
interval: {{ .Values.backendScheduler.config.provider.retention.interval }}
2065
compaction:
2066
compaction:
2067
block_retention: {{ .Values.backendScheduler.config.provider.compaction.compaction.block_retention }}
2068
compacted_block_retention: {{ .Values.backendScheduler.config.provider.compaction.compaction.compacted_block_retention }}
2069
compaction_cycle: {{ .Values.backendScheduler.config.provider.compaction.compaction.compaction_cycle }}
2070
compaction_window: {{ .Values.backendScheduler.config.provider.compaction.compaction.compaction_window }}
2071
max_block_bytes: {{ .Values.backendScheduler.config.provider.compaction.compaction.max_block_bytes }}
2072
max_compaction_objects: {{ .Values.backendScheduler.config.provider.compaction.compaction.max_compaction_objects }}
2073
max_time_per_tenant: {{ .Values.backendScheduler.config.provider.compaction.compaction.max_time_per_tenant }}
2074
retention_concurrency: {{ .Values.backendScheduler.config.provider.compaction.compaction.retention_concurrency }}
2075
max_jobs_per_tenant: {{ .Values.backendScheduler.config.provider.compaction.max_jobs_per_tenant }}
2076
min_input_blocks: {{ .Values.backendScheduler.config.provider.compaction.min_input_blocks }}
2077
max_input_blocks: {{ .Values.backendScheduler.config.provider.compaction.max_input_blocks }}
2078
max_compaction_level: {{ .Values.backendScheduler.config.provider.compaction.max_compaction_level }}
2079
min_cycle_interval: {{ .Values.backendScheduler.config.provider.compaction.min_cycle_interval }}
2080
job_timeout: {{ .Values.backendScheduler.config.job_timeout }}
2081
local_work_path: {{ .Values.backendScheduler.config.local_work_path }}
2082
2083
{{- with .Values.backendWorker.config.backend_scheduler_client.grpc_client_config }}
2084
backend_scheduler_client:
2085
grpc_client_config:
2086
{{- toYaml . | nindent 6 }}
2087
2088
{{- end }}
2089
backend_worker:
2090
backend_scheduler_addr: {{ include "tempo.resourceName" (dict "ctx" . "component" "backend-scheduler") }}:9095
2091
backoff:
2092
min_period: {{ .Values.backendWorker.config.backoff.min_period }}
2093
max_period: {{ .Values.backendWorker.config.backoff.max_period }}
2094
max_retries: {{ .Values.backendWorker.config.backoff.max_retries }}
2095
{{- $compaction_default := .Values.backendScheduler.config.provider.compaction.compaction }}
2096
{{- $worker_overrides := .Values.backendWorker.config.compaction }}
2097
{{- $compaction := mergeOverwrite (deepCopy $compaction_default) $worker_overrides }}
2098
compaction:
2099
{{- toYaml $compaction | nindent 6 }}
2100
finish_on_shutdown_timeout: {{ .Values.backendWorker.config.finish_on_shutdown_timeout }}
2101
ring:
2102
kvstore:
2103
store: memberlist
2104
{{- end }}
2105
{{- if .Values.blockBuilder.enabled }}
2106
block_builder:
2107
partitions_per_instance: {{ .Values.blockBuilder.config.partitions_per_instance }}
2108
{{- end }}
2109
{{- if .Values.liveStore.enabled }}
2110
live_store:
2111
{{- with .Values.liveStore.config }}
2112
{{- toYaml . | nindent 4 }}
2113
{{- end }}
2114
{{- end }}
2115
{{- if and .Values.enterprise.enabled .Values.enterpriseFederationFrontend.enabled }}
2116
federation:
2117
proxy_targets:
2118
{{- toYaml .Values.enterpriseFederationFrontend.proxy_targets | nindent 6 }}
2119
{{- end }}
2120
{{- if .Values.metricsGenerator.enabled }}
2121
metrics_generator:
2122
ring:
2123
kvstore:
2124
store: memberlist
2125
processor:
2126
{{- toYaml .Values.metricsGenerator.config.processor | nindent 6 }}
2127
storage:
2128
{{- toYaml .Values.metricsGenerator.config.storage | nindent 6 }}
2129
registry:
2130
{{- toYaml .Values.metricsGenerator.config.registry | nindent 6 }}
2131
metrics_ingestion_time_range_slack: {{ .Values.metricsGenerator.config.metrics_ingestion_time_range_slack }}
2132
{{- end }}
2133
distributor:
2134
{{- if .Values.distributor.config.cost_attribution.enabled }}
2135
usage:
2136
cost_attribution:
2137
enabled: {{ .Values.distributor.config.cost_attribution.enabled }}
2138
max_cardinality: {{ .Values.distributor.config.cost_attribution.max_cardinality }}
2139
stale_duration: {{ .Values.distributor.config.cost_attribution.stale_duration }}
2140
{{- end }}
2141
ring:
2142
kvstore:
2143
store: memberlist
2144
receivers:
2145
{{- if or (.Values.traces.jaeger.thriftCompact.enabled) (.Values.traces.jaeger.thriftBinary.enabled) (.Values.traces.jaeger.thriftHttp.enabled) (.Values.traces.jaeger.grpc.enabled) }}
2146
jaeger:
2147
protocols:
2148
{{- if .Values.traces.jaeger.thriftCompact.enabled }}
2149
thrift_compact:
2150
{{- $mergedJaegerThriftCompactConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:6831") .Values.traces.jaeger.thriftCompact.receiverConfig }}
2151
{{- toYaml $mergedJaegerThriftCompactConfig | nindent 10 }}
2152
{{- end }}
2153
{{- if .Values.traces.jaeger.thriftBinary.enabled }}
2154
thrift_binary:
2155
{{- $mergedJaegerThriftBinaryConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:6832") .Values.traces.jaeger.thriftBinary.receiverConfig }}
2156
{{- toYaml $mergedJaegerThriftBinaryConfig | nindent 10 }}
2157
{{- end }}
2158
{{- if .Values.traces.jaeger.thriftHttp.enabled }}
2159
thrift_http:
2160
{{- $mergedJaegerThriftHttpConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:14268") .Values.traces.jaeger.thriftHttp.receiverConfig }}
2161
{{- toYaml $mergedJaegerThriftHttpConfig | nindent 10 }}
2162
{{- end }}
2163
{{- if .Values.traces.jaeger.grpc.enabled }}
2164
grpc:
2165
{{- $mergedJaegerGrpcConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:14250") .Values.traces.jaeger.grpc.receiverConfig }}
2166
{{- toYaml $mergedJaegerGrpcConfig | nindent 10 }}
2167
{{- end }}
2168
{{- end }}
2169
{{- if .Values.traces.zipkin.enabled }}
2170
zipkin:
2171
{{- $mergedZipkinReceiverConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:9411") .Values.traces.zipkin.receiverConfig }}
2172
{{- toYaml $mergedZipkinReceiverConfig | nindent 6 }}
2173
{{- end }}
2174
{{- if or (.Values.traces.otlp.http.enabled) (.Values.traces.otlp.grpc.enabled) }}
2175
otlp:
2176
protocols:
2177
{{- if .Values.traces.otlp.http.enabled }}
2178
http:
2179
{{- $mergedOtlpHttpReceiverConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:4318") .Values.traces.otlp.http.receiverConfig }}
2180
{{- toYaml $mergedOtlpHttpReceiverConfig | nindent 10 }}
2181
{{- end }}
2182
{{- if .Values.traces.otlp.grpc.enabled }}
2183
grpc:
2184
{{- $mergedOtlpGrpcReceiverConfig := mustMergeOverwrite (dict "endpoint" "0.0.0.0:4317") .Values.traces.otlp.grpc.receiverConfig }}
2185
{{- toYaml $mergedOtlpGrpcReceiverConfig | nindent 10 }}
2186
{{- end }}
2187
{{- end }}
2188
{{- if .Values.traces.kafka }}
2189
kafka:
2190
{{- toYaml .Values.traces.kafka | nindent 6 }}
2191
{{- end }}
2192
{{- if .Values.distributor.config.log_discarded_spans.enabled }}
2193
log_discarded_spans:
2194
enabled: {{ .Values.distributor.config.log_discarded_spans.enabled }}
2195
include_all_attributes: {{ .Values.distributor.config.log_discarded_spans.include_all_attributes }}
2196
filter_by_status_error: {{ .Values.distributor.config.log_discarded_spans.filter_by_status_error }}
2197
{{- end }}
2198
{{- if or .Values.distributor.config.log_received_traces .Values.distributor.config.log_received_spans.enabled }}
2199
log_received_spans:
2200
enabled: {{ or .Values.distributor.config.log_received_traces .Values.distributor.config.log_received_spans.enabled }}
2201
include_all_attributes: {{ .Values.distributor.config.log_received_spans.include_all_attributes }}
2202
filter_by_status_error: {{ .Values.distributor.config.log_received_spans.filter_by_status_error }}
2203
{{- end }}
2204
{{- if .Values.distributor.config.extend_writes }}
2205
extend_writes: {{ .Values.distributor.config.extend_writes }}
2206
{{- end }}
2207
{{- if not (eq .Values.distributor.config.max_attribute_bytes nil) }}
2208
max_attribute_bytes: {{ .Values.distributor.config.max_attribute_bytes }}
2209
{{- end }}
2210
querier:
2211
frontend_worker:
2212
frontend_address: {{ include "tempo.resourceName" (dict "ctx" . "component" "query-frontend-discovery") }}:9095
2213
{{- if .Values.querier.config.frontend_worker.grpc_client_config }}
2214
grpc_client_config:
2215
{{- toYaml .Values.querier.config.frontend_worker.grpc_client_config | nindent 6 }}
2216
{{- end }}
2217
trace_by_id:
2218
query_timeout: {{ .Values.querier.config.trace_by_id.query_timeout }}
2219
search:
2220
query_timeout: {{ .Values.querier.config.search.query_timeout }}
2221
max_concurrent_queries: {{ .Values.querier.config.max_concurrent_queries }}
2222
query_frontend:
2223
{{- if not .Values.enterprise.enabled }}
2224
mcp_server:
2225
enabled: {{ .Values.queryFrontend.mcp_server.enabled }}
2226
{{- end }}
2227
max_outstanding_per_tenant: {{ .Values.queryFrontend.config.max_outstanding_per_tenant }}
2228
max_retries: {{ .Values.queryFrontend.config.max_retries }}
2229
search:
2230
target_bytes_per_job: {{ .Values.queryFrontend.config.search.target_bytes_per_job }}
2231
concurrent_jobs: {{ .Values.queryFrontend.config.search.concurrent_jobs }}
2232
max_spans_per_span_set: {{ .Values.queryFrontend.config.search.max_spans_per_span_set }}
2233
{{- with .Values.queryFrontend.config.search.max_result_limit }}
2234
max_result_limit: {{ . }}
2235
{{- end }}
2236
trace_by_id:
2237
query_shards: {{ .Values.queryFrontend.config.trace_by_id.query_shards }}
2238
metrics:
2239
concurrent_jobs: {{ .Values.queryFrontend.config.metrics.concurrent_jobs }}
2240
target_bytes_per_job: {{ .Values.queryFrontend.config.metrics.target_bytes_per_job }}
2241
max_duration: {{ .Values.queryFrontend.config.metrics.max_duration }}
2242
query_backend_after: {{ .Values.queryFrontend.config.metrics.query_backend_after }}
2243
interval: {{ .Values.queryFrontend.config.metrics.interval }}
2244
duration_slo: {{ .Values.queryFrontend.config.metrics.duration_slo }}
2245
throughput_bytes_slo: {{ .Values.queryFrontend.config.metrics.throughput_bytes_slo }}
2246
{{- with .Values.ingest.kafka.address }}
2247
ingest:
2248
kafka:
2249
address: {{ . }}
2250
topic: {{ $.Values.ingest.kafka.topic }}
2251
auto_create_topic_enabled: {{ $.Values.ingest.kafka.auto_create_topic_enabled }}
2252
auto_create_topic_default_partitions: {{ $.Values.ingest.kafka.auto_create_topic_default_partitions }}
2253
{{- /*
2254
SASL authentication. Tempo's Kafka client accepts a fixed set of
2255
sasl_mechanism values; anything else fails at startup. An empty mechanism
2256
means PLAIN, Tempo's default, which with no username/password leaves SASL
2257
disabled. sasl_mechanism is only rendered when set explicitly; the options
2258
that apply to the effective mechanism are rendered either way.
2259
*/}}
2260
{{- $sasl := $.Values.ingest.kafka.sasl | default dict }}
2261
{{- $mechanism := $sasl.mechanism | default "PLAIN" }}
2262
{{- $allowedMechanisms := list "PLAIN" "SCRAM-SHA-256" "SCRAM-SHA-512" "OAUTHBEARER" "AWS_MSK_IAM" }}
2263
{{- if not (has $mechanism $allowedMechanisms) }}
2264
{{- fail (printf "ingest.kafka.sasl.mechanism %q is invalid, must be one of: %s" $mechanism (join ", " $allowedMechanisms)) }}
2265
{{- end }}
2266
{{- $oauthbearer := $sasl.oauthbearer | default dict }}
2267
{{- $mskIam := $sasl.mskIam | default dict }}
2268
{{- /* Credentials for a mechanism other than the effective one would be silently ignored. */}}
2269
{{- $userPassMechanisms := list "PLAIN" "SCRAM-SHA-256" "SCRAM-SHA-512" }}
2270
{{- if and (not (has $mechanism $userPassMechanisms)) (or $sasl.existingSecret $sasl.username $sasl.password) }}
2271
{{- fail (printf "ingest.kafka.sasl.existingSecret/username/password only apply to PLAIN and SCRAM-SHA-*, but mechanism is %s" $mechanism) }}
2272
{{- end }}
2273
{{- if and (ne $mechanism "OAUTHBEARER") (or $oauthbearer.existingSecret $oauthbearer.token $oauthbearer.filePath $oauthbearer.httpSocketPath) }}
2274
{{- fail (printf "ingest.kafka.sasl.oauthbearer is configured, but mechanism is %s; set ingest.kafka.sasl.mechanism=OAUTHBEARER" $mechanism) }}
2275
{{- end }}
2276
{{- if and (ne $mechanism "AWS_MSK_IAM") (or $mskIam.existingSecret $mskIam.accessKey $mskIam.secretKey $mskIam.sessionToken $mskIam.filePath $mskIam.httpSocketPath) }}
2277
{{- fail (printf "ingest.kafka.sasl.mskIam is configured, but mechanism is %s; set ingest.kafka.sasl.mechanism=AWS_MSK_IAM" $mechanism) }}
2278
{{- end }}
2279
{{- /*
2280
Mirror Tempo's startup validation so misconfigurations fail at install
2281
time instead of crash-looping: SCRAM-SHA-* needs credentials, PLAIN
2282
needs both or neither of username/password (neither disables SASL), and
2283
OAUTHBEARER/AWS_MSK_IAM need exactly one credential source. An
2284
existingSecret counts as the static credential source.
2285
*/}}
2286
{{- if or (eq $mechanism "PLAIN") (eq $mechanism "SCRAM-SHA-256") (eq $mechanism "SCRAM-SHA-512") }}
2287
{{- if not $sasl.existingSecret }}
2288
{{- if or (and $sasl.username (not $sasl.password)) (and $sasl.password (not $sasl.username)) }}
2289
{{- fail "ingest.kafka.sasl: username and password must both be set" }}
2290
{{- end }}
2291
{{- if and (ne $mechanism "PLAIN") (not $sasl.username) }}
2292
{{- fail (printf "ingest.kafka.sasl.mechanism %s requires credentials: set ingest.kafka.sasl.existingSecret or username/password" $mechanism) }}
2293
{{- end }}
2294
{{- end }}
2295
{{- else if eq $mechanism "OAUTHBEARER" }}
2296
{{- $sources := list }}
2297
{{- if or $oauthbearer.existingSecret $oauthbearer.token }}{{ $sources = append $sources "existingSecret/token" }}{{ end }}
2298
{{- if $oauthbearer.filePath }}{{ $sources = append $sources "filePath" }}{{ end }}
2299
{{- if $oauthbearer.httpSocketPath }}{{ $sources = append $sources "httpSocketPath" }}{{ end }}
2300
{{- if ne (len $sources) 1 }}
2301
{{- fail (printf "ingest.kafka.sasl.oauthbearer: exactly one of existingSecret/token, filePath or httpSocketPath must be set (got: %s)" (join ", " $sources | default "none")) }}
2302
{{- end }}
2303
{{- else if eq $mechanism "AWS_MSK_IAM" }}
2304
{{- if and (not $mskIam.existingSecret) (or (and $mskIam.accessKey (not $mskIam.secretKey)) (and $mskIam.secretKey (not $mskIam.accessKey))) }}
2305
{{- fail "ingest.kafka.sasl.mskIam: accessKey and secretKey must both be set" }}
2306
{{- end }}
2307
{{- $sources := list }}
2308
{{- if or $mskIam.existingSecret $mskIam.accessKey }}{{ $sources = append $sources "existingSecret/accessKey+secretKey" }}{{ end }}
2309
{{- if $mskIam.filePath }}{{ $sources = append $sources "filePath" }}{{ end }}
2310
{{- if $mskIam.httpSocketPath }}{{ $sources = append $sources "httpSocketPath" }}{{ end }}
2311
{{- if ne (len $sources) 1 }}
2312
{{- fail (printf "ingest.kafka.sasl.mskIam: exactly one of existingSecret/accessKey+secretKey, filePath or httpSocketPath must be set (got: %s)%s" (join ", " $sources | default "none") (empty $sources | ternary ". Tempo does not use the AWS default credential chain (e.g. IRSA)." "")) }}
2313
{{- end }}
2314
{{- end }}
2315
{{- /*
2316
Credentials are inlined into tempo.yaml only when no existingSecret is
2317
configured for the active mechanism; in that case the value ends up in
2318
plaintext in the rendered ConfigMap/Secret, so require
2319
configStorageType=Secret as a safety net. When existingSecret is set,
2320
the credential is injected from the Secret via secretKeyRef on the pod
2321
spec and passed to tempo as a CLI flag (see tempo.podTemplate), so
2322
nothing is rendered here and configStorageType can remain ConfigMap.
2323
*/}}
2324
{{- $inlinesCredential := false }}
2325
{{- if or (eq $mechanism "PLAIN") (eq $mechanism "SCRAM-SHA-256") (eq $mechanism "SCRAM-SHA-512") }}
2326
{{- if and (not $sasl.existingSecret) (or $sasl.username $sasl.password) }}
2327
{{- $inlinesCredential = true }}
2328
{{- end }}
2329
{{- else if eq $mechanism "OAUTHBEARER" }}
2330
{{- if and (not $oauthbearer.existingSecret) $oauthbearer.token }}
2331
{{- $inlinesCredential = true }}
2332
{{- end }}
2333
{{- else if eq $mechanism "AWS_MSK_IAM" }}
2334
{{- if and (not $mskIam.existingSecret) (or $mskIam.accessKey $mskIam.secretKey) }}
2335
{{- $inlinesCredential = true }}
2336
{{- end }}
2337
{{- end }}
2338
{{- if and $inlinesCredential (not (eq $.Values.configStorageType "Secret")) }}
2339
{{- fail "ingest.kafka.sasl is configuring credentials directly (not via existingSecret), but configStorageType is not Secret. Either set ingest.kafka.sasl.existingSecret (recommended) or set configStorageType=Secret." }}
2340
{{- end }}
2341
{{- with $sasl.mechanism }}
2342
sasl_mechanism: {{ . }}
2343
{{- end }}
2344
{{- if or (eq $mechanism "PLAIN") (eq $mechanism "SCRAM-SHA-256") (eq $mechanism "SCRAM-SHA-512") }}
2345
{{- if not $sasl.existingSecret }}
2346
{{- with $sasl.username }}
2347
sasl_username: {{ . | quote }}
2348
{{- end }}
2349
{{- with $sasl.password }}
2350
sasl_password: {{ . | quote }}
2351
{{- end }}
2352
{{- end }}
2353
{{- else if eq $mechanism "OAUTHBEARER" }}
2354
{{- with $oauthbearer }}
2355
{{- if not .existingSecret }}
2356
{{- with .token }}
2357
sasl_oauthbearer_token: {{ . | quote }}
2358
{{- end }}
2359
{{- end }}
2360
{{- with .zid }}
2361
sasl_oauthbearer_zid: {{ . | quote }}
2362
{{- end }}
2363
{{- with .extensions }}
2364
sasl_oauthbearer_extensions:
2365
{{- toYaml . | nindent 8 }}
2366
{{- end }}
2367
{{- with .filePath }}
2368
sasl_oauthbearer_file_path: {{ . | quote }}
2369
{{- end }}
2370
{{- with .httpSocketPath }}
2371
sasl_oauthbearer_http_socket_path: {{ . | quote }}
2372
{{- end }}
2373
{{- with .httpSocketTimeout }}
2374
sasl_oauthbearer_http_socket_timeout: {{ . }}
2375
{{- end }}
2376
{{- end }}
2377
{{- else if eq $mechanism "AWS_MSK_IAM" }}
2378
{{- with $mskIam }}
2379
{{- if not .existingSecret }}
2380
{{- with .accessKey }}
2381
sasl_msk_iam_access_key: {{ . | quote }}
2382
{{- end }}
2383
{{- with .secretKey }}
2384
sasl_msk_iam_secret_key: {{ . | quote }}
2385
{{- end }}
2386
{{- with .sessionToken }}
2387
sasl_msk_iam_session_token: {{ . | quote }}
2388
{{- end }}
2389
{{- end }}
2390
{{- with .userAgent }}
2391
sasl_msk_iam_user_agent: {{ . | quote }}
2392
{{- end }}
2393
{{- with .filePath }}
2394
sasl_msk_iam_file_path: {{ . | quote }}
2395
{{- end }}
2396
{{- with .httpSocketPath }}
2397
sasl_msk_iam_http_socket_path: {{ . | quote }}
2398
{{- end }}
2399
{{- with .httpSocketTimeout }}
2400
sasl_msk_iam_http_socket_timeout: {{ . }}
2401
{{- end }}
2402
{{- end }}
2403
{{- end }}
2404
{{- /* TLS is independent of the SASL mechanism and can be combined with any of them. */}}
2405
{{- with $.Values.ingest.kafka.tls }}
2406
{{- if .enabled }}
2407
tls_enabled: true
2408
{{- with .certPath }}
2409
tls_cert_path: {{ . | quote }}
2410
{{- end }}
2411
{{- with .keyPath }}
2412
tls_key_path: {{ . | quote }}
2413
{{- end }}
2414
{{- with .caPath }}
2415
tls_ca_path: {{ . | quote }}
2416
{{- end }}
2417
{{- with .serverName }}
2418
tls_server_name: {{ . | quote }}
2419
{{- end }}
2420
{{- with .minVersion }}
2421
tls_min_version: {{ . }}
2422
{{- end }}
2423
{{- if .insecureSkipVerify }}
2424
tls_insecure_skip_verify: true
2425
{{- end }}
2426
{{- end }}
2427
{{- end }}
2428
{{- end }}
2429
memberlist:
2430
{{- with .Values.memberlist }}
2431
{{- toYaml . | nindent 2 }}
2432
{{- end }}
2433
join_members:
2434
- dns+{{ include "tempo.fullname" . }}-gossip-ring:{{ .Values.memberlist.bind_port }}
2435
overrides:
2436
{{- toYaml .Values.overrides | nindent 2 }}
2437
server:
2438
http_listen_port: {{ .Values.server.httpListenPort }}
2439
log_level: {{ .Values.server.logLevel }}
2440
log_format: {{ .Values.server.logFormat }}
2441
grpc_server_max_recv_msg_size: {{ .Values.server.grpc_server_max_recv_msg_size }}
2442
grpc_server_max_send_msg_size: {{ .Values.server.grpc_server_max_send_msg_size }}
2443
http_server_read_timeout: {{ .Values.server.http_server_read_timeout }}
2444
http_server_write_timeout: {{ .Values.server.http_server_write_timeout }}
2445
cache:
2446
{{- include "tempo.cacheConfig" . | nindent 2}}
2447
storage:
2448
trace:
2449
{{- if .Values.storage.trace.block.version }}
2450
block:
2451
version: {{.Values.storage.trace.block.version}}
2452
{{- if .Values.storage.trace.block.dedicated_columns}}
2453
parquet_dedicated_columns:
2454
{{ .Values.storage.trace.block.dedicated_columns | toYaml | nindent 8}}
2455
{{- end }}
2456
{{- end }}
2457
pool:
2458
max_workers: {{ .Values.storage.trace.pool.max_workers }}
2459
queue_depth: {{ .Values.storage.trace.pool.queue_depth }}
2460
backend: {{.Values.storage.trace.backend}}
2461
{{- if eq .Values.storage.trace.backend "s3"}}
2462
s3:
2463
{{- toYaml .Values.storage.trace.s3 | nindent 6}}
2464
{{- end }}
2465
{{- if eq .Values.storage.trace.backend "gcs"}}
2466
gcs:
2467
{{- toYaml .Values.storage.trace.gcs | nindent 6}}
2468
{{- end }}
2469
{{- if eq .Values.storage.trace.backend "azure"}}
2470
azure:
2471
{{- toYaml .Values.storage.trace.azure | nindent 6}}
2472
{{- end }}
2473
blocklist_poll: 5m
2474
local:
2475
path: /var/tempo/traces
2476
wal:
2477
path: /var/tempo/wal
2478
search:
2479
{{- toYaml .Values.storage.trace.search | nindent 6}}
2480
2481
{{- if .Values.storage.trace.blocklist_poll }}
2482
blocklist_poll: {{ .Values.storage.trace.blocklist_poll }}
2483
{{- end }}
2484
{{- if .Values.storage.trace.blocklist_poll_concurrency }}
2485
blocklist_poll_concurrency: {{ .Values.storage.trace.blocklist_poll_concurrency }}
2486
{{- end }}
2487
{{- if .Values.storage.trace.blocklist_poll_fallback }}
2488
blocklist_poll_fallback: {{ .Values.storage.trace.blocklist_poll_fallback }}
2489
{{- end }}
2490
{{- if .Values.storage.trace.blocklist_poll_tenant_index_builders }}
2491
blocklist_poll_tenant_index_builders: {{ .Values.storage.trace.blocklist_poll_tenant_index_builders }}
2492
{{- end }}
2493
{{- if .Values.storage.trace.blocklist_poll_stale_tenant_index }}
2494
blocklist_poll_stale_tenant_index: {{ .Values.storage.trace.blocklist_poll_stale_tenant_index }}
2495
{{- end }}
2496
{{- if .Values.storage.trace.empty_tenant_deletion_age }}
2497
empty_tenant_deletion_age: {{ .Values.storage.trace.empty_tenant_deletion_age }}
2498
{{- end }}
2499
{{- if .Values.storage.trace.empty_tenant_deletion_enabled }}
2500
empty_tenant_deletion_enabled: {{ .Values.storage.trace.empty_tenant_deletion_enabled }}
2501
{{- end }}
2502
# Set Tempo server configuration
2503
# Refers to https://grafana.com/docs/tempo/latest/configuration/#server
2504
server:
2505
# -- HTTP server listen host
2506
httpListenPort: 3200
2507
# -- Log level. Can be set to debug, info (default), warn, error
2508
logLevel: info
2509
# -- Log format. Can be set to logfmt (default) or json.
2510
logFormat: logfmt
2511
# -- Max gRPC message size that can be received
2512
grpc_server_max_recv_msg_size: 4194304
2513
# -- Max gRPC message size that can be sent
2514
grpc_server_max_send_msg_size: 4194304
2515
# -- Read timeout for HTTP server
2516
http_server_read_timeout: 30s
2517
# -- Write timeout for HTTP server
2518
http_server_write_timeout: 30s
2519
# Use this block to configure caches available throughout the application.
2520
# Multiple caches can be created and assigned roles which determine how they are used by Tempo.
2521
# https://grafana.com/docs/tempo/latest/configuration/#cache
2522
# When memcached.enabled is true (the default), the cache.caches list is auto-generated from the
2523
# memcached and per-role memcached sections (memcachedBloom, memcachedParquetFooter, memcachedFrontendSearch).
2524
# When memcached.enabled is false, this block is passed through verbatim to allow configuring external caches.
2525
cache:
2526
caches:
2527
- memcached:
2528
host: '{{ include "tempo.fullname" . }}-memcached'
2529
service: memcached-client
2530
consistent_hash: true
2531
timeout: 500ms
2532
roles:
2533
- parquet-footer
2534
- bloom
2535
- frontend-search
2536
# To configure a different storage backend instead of local storage:
2537
# storage:
2538
# trace:
2539
# backend: azure
2540
# azure:
2541
# container_name:
2542
# storage_account_name:
2543
# storage_account_key:
2544
storage:
2545
trace:
2546
# Settings for the block storage backend and buckets.
2547
block:
2548
# -- The supported block versions are specified here https://grafana.com/docs/tempo/latest/configuration/parquet/
2549
version: null
2550
# -- Lis with dedicated attribute columns (only for vParquet3 or later)
2551
dedicated_columns: []
2552
# -- The supported storage backends are gcs, s3 and azure, as specified in https://grafana.com/docs/tempo/latest/configuration/#storage
2553
backend: local
2554
# The worker pool is used primarily when finding traces by id, but is also used by others.
2555
pool:
2556
# -- Total number of workers pulling jobs from the queue
2557
max_workers: 400
2558
# -- Length of job queue. imporatant for querier as it queues a job for every block it has to search
2559
queue_depth: 20000
2560
# The supported search are specified here https://grafana.com/docs/tempo/latest/configuration/#search-config
2561
search:
2562
# -- Number of traces to prefetch while scanning blocks. Increasing this value can improve trace search performance at the cost of memory.
2563
prefetch_trace_count: 1000
2564
# -- How often to repoll the backend for new blocks
2565
blocklist_poll: 5m
2566
# -- Number of blocks to process in parallel during polling.
2567
blocklist_poll_concurrency: null
2568
# -- By default components will pull the blocklist from the tenant index. If that fails the component can
2569
# -- fallback to scanning the entire bucket. Set to false to disable this behavior.
2570
blocklist_poll_fallback: null
2571
# -- Maximum number of compactors that should build the tenant index. All other components will download the index.
2572
blocklist_poll_tenant_index_builders: null
2573
# -- The oldest allowable tenant index.
2574
blocklist_poll_stale_tenant_index: null
2575
# -- How fast the poller will delete a tenant if it is empty. Will need to be enabled in 'empty_tenant_deletion_enabled'.
2576
empty_tenant_deletion_age: null
2577
# -- Delete empty tenants.
2578
empty_tenant_deletion_enabled: null
2579
# Settings for the Admin client storage backend and buckets. Only valid is enterprise.enabled is true
2580
admin:
2581
# -- The supported storage backends are gcs, s3 and azure, as specified in https://grafana.com/docs/enterprise-traces/latest/configure/reference/#admin_client_config
2582
backend: filesystem
2583
# -- The standard overrides configuration section. This can include a `defaults` object for applying to all tenants (not to be confused with the `global` property of the same name, which overrides `max_byte_per_trace` for all tenants). For an example on how to enable the metrics generator using the `overrides` object, see the 'Activate metrics generator' section below. Refer to [Standard overrides](https://grafana.com/docs/tempo/latest/configuration/#standard-overrides) for more details.
2584
overrides:
2585
# -- default config values for all tenants, can be overridden by per-tenant overrides. If a tenant's specific overrides are not found in the `per_tenant_overrides` block, the values in this `default` block will be used. Configs inside this block should follow the new overrides indentation format
2586
defaults: {}
2587
# -- Path to the per tenant override config file. The values of the `per_tenant_overrides` config below will be written to the default path which is `/runtime-config/overrides.yaml`. Users can set tenant-specific overrides settings in a separate file and point per_tenant_override_config to it if not using the per_tenant_overrides block below.
2588
per_tenant_override_config: /runtime-config/overrides.yaml
2589
# -- The `per tenant` runtime overrides in place of the `per_tenant_override_config` file for Tempo (see `overrides` and the `per_tenant_override_config` property). This allows overriding the configs like `ingestion` and `global` values on a per-tenant basis. Note that *all* values must be given for each per-tenant configuration block. Refer to [Runtime overrides](https://grafana.com/docs/tempo/latest/configuration/#runtime-overrides) documentation for more details.
2590
per_tenant_overrides:
2591
# 'tenant-id':
2592
# metrics_generator:
2593
# processors:
2594
# - service-graphs
2595
# - span-metrics
2596
2597
# memcached is for all of the Tempo pieces to coordinate with each other.
2598
# you can use your own self deployed memcached by setting `memcached.enabled` to false and `memcached.host` + `memcached.service`
2599
memcached:
2600
# -- Specified whether the memcached cachce should be enabled
2601
enabled: true
2602
image:
2603
# -- The Docker registry for the Memcached image. Overrides `global.image.registry`
2604
registry: cgr.dev
2605
# -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
2606
pullSecrets: []
2607
# -- Memcached Docker image repository
2608
repository: chainguard-private/memcached-fips
2609
# -- Memcached Docker image tag
2610
tag: 1.6.45-r5@sha256:775840a3e97eade858a7c64a6159f4c8c8bbe7e1891787e19d0d8cb2210333ed
2611
# -- Memcached Docker image pull policy
2612
pullPolicy: IfNotPresent
2613
host: memcached
2614
# Number of replicas for memchached
2615
replicas: 1
2616
# -- Timeout for cache operations
2617
timeout: 500ms
2618
# -- Enable consistent hashing for cache
2619
consistentHash: true
2620
# -- Additional CLI args for memcached
2621
extraArgs: []
2622
# -- Toleration for memcached pods
2623
tolerations: []
2624
# -- Environment variables to add to memcached pods
2625
extraEnv: []
2626
# -- Environment variables from secrets or configmaps to add to memcached pods
2627
extraEnvFrom: []
2628
# -- Labels for memcached pods
2629
podLabels: {}
2630
# -- Annotations for memcached pods
2631
podAnnotations: {}
2632
# -- Resource requests and limits for memcached
2633
resources: {}
2634
# -- topologySpread for memcached pods. Passed through `tpl` and, thus, to be configured as string
2635
# @default -- Defaults to allow skew no more than 1 node per AZ
2636
topologySpreadConstraints: |
2637
- maxSkew: 1
2638
topologyKey: topology.kubernetes.io/zone
2639
whenUnsatisfiable: ScheduleAnyway
2640
labelSelector:
2641
matchLabels:
2642
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached") | nindent 6 }}
2643
# -- Affinity for memcached pods. Passed through `tpl` and, thus, to be configured as string
2644
# @default -- Hard node and soft zone anti-affinity
2645
affinity: |
2646
podAntiAffinity:
2647
requiredDuringSchedulingIgnoredDuringExecution:
2648
- labelSelector:
2649
matchLabels:
2650
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached") | nindent 10 }}
2651
topologyKey: kubernetes.io/hostname
2652
preferredDuringSchedulingIgnoredDuringExecution:
2653
- weight: 100
2654
podAffinityTerm:
2655
labelSelector:
2656
matchLabels:
2657
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached") | nindent 12 }}
2658
topologyKey: topology.kubernetes.io/zone
2659
# -- Pod Disruption Budget configuration
2660
podDisruptionBudget:
2661
# -- Enable PodDisruptionBudget for memcached
2662
enabled: true
2663
# -- Set unhealthyPodEvictionPolicy for the memcached PodDisruptionBudget. Requires policy/v1.
2664
unhealthyPodEvictionPolicy: ""
2665
# -- Pod Disruption Budget maxUnavailable
2666
maxUnavailable: 1
2667
# -- Init containers for the memcached pod
2668
initContainers: []
2669
# -- Containers to add to the memcached pods
2670
extraContainers: []
2671
# -- Extra volumes for memcached pods
2672
extraVolumeMounts: []
2673
# -- Extra volumes for memcached statefulSet
2674
extraVolumes: []
2675
service:
2676
# -- Annotations for memcached service
2677
annotations: {}
2678
# -- configuration for readiness probe for memcached statefulset
2679
readinessProbe:
2680
tcpSocket:
2681
port: client
2682
initialDelaySeconds: 5
2683
periodSeconds: 5
2684
timeoutSeconds: 3
2685
failureThreshold: 6
2686
successThreshold: 1
2687
# -- configuration for liveness probe for memcached statefulset
2688
livenessProbe:
2689
initialDelaySeconds: 30
2690
periodSeconds: 10
2691
timeoutSeconds: 5
2692
failureThreshold: 6
2693
successThreshold: 1
2694
memcachedExporter:
2695
# -- Specifies whether the Memcached Exporter should be enabled
2696
enabled: false
2697
# -- hostAliases to add
2698
hostAliases: []
2699
# - ip: 1.2.3.4
2700
# hostnames:
2701
# - domain.tld
2702
image:
2703
# -- The Docker registry for the Memcached Exporter image. Overrides `global.image.registry`
2704
registry: null
2705
# -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
2706
pullSecrets: []
2707
# -- Memcached Exporter Docker image repository
2708
repository: prom/memcached-exporter
2709
# -- Memcached Exporter Docker image tag
2710
tag: v0.18.0
2711
# -- Memcached Exporter Docker image pull policy
2712
pullPolicy: IfNotPresent
2713
# -- Memcached Exporter resource requests and limits
2714
resources: {}
2715
# -- Additional CLI args for the memcached exporter
2716
extraArgs: []
2717
# -- Configuration for a dedicated memcached cluster for the bloom cache role.
2718
# When enabled, bloom cache is served by its own memcached StatefulSet.
2719
# Image is shared with the main `memcached` section.
2720
memcachedBloom:
2721
# -- Enable a dedicated memcached cluster for the bloom cache role
2722
enabled: false
2723
# -- Annotations for the memcached-bloom StatefulSet
2724
annotations: {}
2725
# -- Number of replicas for the bloom memcached StatefulSet
2726
replicas: 1
2727
# -- Timeout for bloom cache operations
2728
timeout: 500ms
2729
# -- Enable consistent hashing for bloom cache
2730
consistentHash: true
2731
# -- Additional CLI args for memcached
2732
extraArgs: []
2733
# -- Tolerations for memcached-bloom pods
2734
tolerations: []
2735
# -- Environment variables to add to memcached-bloom pods
2736
extraEnv: []
2737
# -- Environment variables from secrets or configmaps to add to memcached-bloom pods
2738
extraEnvFrom: []
2739
# -- Labels for memcached-bloom pods
2740
podLabels: {}
2741
# -- Annotations for memcached-bloom pods
2742
podAnnotations: {}
2743
# -- Resource requests and limits for memcached-bloom
2744
resources: {}
2745
# -- topologySpread for memcached-bloom pods. Passed through `tpl` and, thus, to be configured as string
2746
# @default -- Defaults to allow skew no more than 1 node per AZ
2747
topologySpreadConstraints: |
2748
- maxSkew: 1
2749
topologyKey: topology.kubernetes.io/zone
2750
whenUnsatisfiable: ScheduleAnyway
2751
labelSelector:
2752
matchLabels:
2753
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-bloom") | nindent 6 }}
2754
# -- Affinity for memcached-bloom pods. Passed through `tpl` and, thus, to be configured as string
2755
# @default -- Hard node and soft zone anti-affinity
2756
affinity: |
2757
podAntiAffinity:
2758
requiredDuringSchedulingIgnoredDuringExecution:
2759
- labelSelector:
2760
matchLabels:
2761
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-bloom") | nindent 10 }}
2762
topologyKey: kubernetes.io/hostname
2763
preferredDuringSchedulingIgnoredDuringExecution:
2764
- weight: 100
2765
podAffinityTerm:
2766
labelSelector:
2767
matchLabels:
2768
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-bloom") | nindent 12 }}
2769
topologyKey: topology.kubernetes.io/zone
2770
# -- Pod Disruption Budget configuration
2771
podDisruptionBudget:
2772
# -- Enable PodDisruptionBudget for memcached-bloom
2773
enabled: true
2774
# -- Pod Disruption Budget maxUnavailable
2775
maxUnavailable: 1
2776
# -- Init containers for the memcached-bloom pod
2777
initContainers: []
2778
# -- Containers to add to the memcached-bloom pods
2779
extraContainers: []
2780
# -- Extra volume mounts for memcached-bloom pods
2781
extraVolumeMounts: []
2782
# -- Extra volumes for memcached-bloom StatefulSet
2783
extraVolumes: []
2784
service:
2785
# -- Annotations for memcached-bloom service
2786
annotations: {}
2787
# -- configuration for readiness probe for memcached-bloom statefulset
2788
readinessProbe:
2789
tcpSocket:
2790
port: client
2791
initialDelaySeconds: 5
2792
periodSeconds: 5
2793
timeoutSeconds: 3
2794
failureThreshold: 6
2795
successThreshold: 1
2796
# -- configuration for liveness probe for memcached-bloom statefulset
2797
livenessProbe:
2798
initialDelaySeconds: 30
2799
periodSeconds: 10
2800
timeoutSeconds: 5
2801
failureThreshold: 6
2802
successThreshold: 1
2803
# -- Configuration for a dedicated memcached cluster for the parquet-footer cache role.
2804
# When enabled, parquet-footer cache is served by its own memcached StatefulSet.
2805
# Image is shared with the main `memcached` section.
2806
memcachedParquetFooter:
2807
# -- Enable a dedicated memcached cluster for the parquet-footer cache role
2808
enabled: false
2809
# -- Annotations for the memcached-parquet-footer StatefulSet
2810
annotations: {}
2811
# -- Number of replicas for the parquet-footer memcached StatefulSet
2812
replicas: 1
2813
# -- Timeout for parquet-footer cache operations
2814
timeout: 500ms
2815
# -- Enable consistent hashing for parquet-footer cache
2816
consistentHash: true
2817
# -- Additional CLI args for memcached
2818
extraArgs: []
2819
# -- Tolerations for memcached-parquet-footer pods
2820
tolerations: []
2821
# -- Environment variables to add to memcached-parquet-footer pods
2822
extraEnv: []
2823
# -- Environment variables from secrets or configmaps to add to memcached-parquet-footer pods
2824
extraEnvFrom: []
2825
# -- Labels for memcached-parquet-footer pods
2826
podLabels: {}
2827
# -- Annotations for memcached-parquet-footer pods
2828
podAnnotations: {}
2829
# -- Resource requests and limits for memcached-parquet-footer
2830
resources: {}
2831
# -- topologySpread for memcached-parquet-footer pods. Passed through `tpl` and, thus, to be configured as string
2832
# @default -- Defaults to allow skew no more than 1 node per AZ
2833
topologySpreadConstraints: |
2834
- maxSkew: 1
2835
topologyKey: topology.kubernetes.io/zone
2836
whenUnsatisfiable: ScheduleAnyway
2837
labelSelector:
2838
matchLabels:
2839
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-parquet-footer") | nindent 6 }}
2840
# -- Affinity for memcached-parquet-footer pods. Passed through `tpl` and, thus, to be configured as string
2841
# @default -- Hard node and soft zone anti-affinity
2842
affinity: |
2843
podAntiAffinity:
2844
requiredDuringSchedulingIgnoredDuringExecution:
2845
- labelSelector:
2846
matchLabels:
2847
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-parquet-footer") | nindent 10 }}
2848
topologyKey: kubernetes.io/hostname
2849
preferredDuringSchedulingIgnoredDuringExecution:
2850
- weight: 100
2851
podAffinityTerm:
2852
labelSelector:
2853
matchLabels:
2854
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-parquet-footer") | nindent 12 }}
2855
topologyKey: topology.kubernetes.io/zone
2856
# -- Pod Disruption Budget configuration
2857
podDisruptionBudget:
2858
# -- Enable PodDisruptionBudget for memcached-parquet-footer
2859
enabled: true
2860
# -- Pod Disruption Budget maxUnavailable
2861
maxUnavailable: 1
2862
# -- Init containers for the memcached-parquet-footer pod
2863
initContainers: []
2864
# -- Containers to add to the memcached-parquet-footer pods
2865
extraContainers: []
2866
# -- Extra volume mounts for memcached-parquet-footer pods
2867
extraVolumeMounts: []
2868
# -- Extra volumes for memcached-parquet-footer StatefulSet
2869
extraVolumes: []
2870
service:
2871
# -- Annotations for memcached-parquet-footer service
2872
annotations: {}
2873
# -- configuration for readiness probe for memcached-parquet-footer statefulset
2874
readinessProbe:
2875
tcpSocket:
2876
port: client
2877
initialDelaySeconds: 5
2878
periodSeconds: 5
2879
timeoutSeconds: 3
2880
failureThreshold: 6
2881
successThreshold: 1
2882
# -- configuration for liveness probe for memcached-parquet-footer statefulset
2883
livenessProbe:
2884
initialDelaySeconds: 30
2885
periodSeconds: 10
2886
timeoutSeconds: 5
2887
failureThreshold: 6
2888
successThreshold: 1
2889
# -- Configuration for a dedicated memcached cluster for the frontend-search cache role.
2890
# When enabled, frontend-search cache is served by its own memcached StatefulSet.
2891
# Image is shared with the main `memcached` section.
2892
memcachedFrontendSearch:
2893
# -- Enable a dedicated memcached cluster for the frontend-search cache role
2894
enabled: false
2895
# -- Annotations for the memcached-frontend-search StatefulSet
2896
annotations: {}
2897
# -- Number of replicas for the frontend-search memcached StatefulSet
2898
replicas: 1
2899
# -- Timeout for frontend-search cache operations
2900
timeout: 500ms
2901
# -- Enable consistent hashing for frontend-search cache
2902
consistentHash: true
2903
# -- Additional CLI args for memcached
2904
extraArgs: []
2905
# -- Tolerations for memcached-frontend-search pods
2906
tolerations: []
2907
# -- Environment variables to add to memcached-frontend-search pods
2908
extraEnv: []
2909
# -- Environment variables from secrets or configmaps to add to memcached-frontend-search pods
2910
extraEnvFrom: []
2911
# -- Labels for memcached-frontend-search pods
2912
podLabels: {}
2913
# -- Annotations for memcached-frontend-search pods
2914
podAnnotations: {}
2915
# -- Resource requests and limits for memcached-frontend-search
2916
resources: {}
2917
# -- topologySpread for memcached-frontend-search pods. Passed through `tpl` and, thus, to be configured as string
2918
# @default -- Defaults to allow skew no more than 1 node per AZ
2919
topologySpreadConstraints: |
2920
- maxSkew: 1
2921
topologyKey: topology.kubernetes.io/zone
2922
whenUnsatisfiable: ScheduleAnyway
2923
labelSelector:
2924
matchLabels:
2925
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-frontend-search") | nindent 6 }}
2926
# -- Affinity for memcached-frontend-search pods. Passed through `tpl` and, thus, to be configured as string
2927
# @default -- Hard node and soft zone anti-affinity
2928
affinity: |
2929
podAntiAffinity:
2930
requiredDuringSchedulingIgnoredDuringExecution:
2931
- labelSelector:
2932
matchLabels:
2933
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-frontend-search") | nindent 10 }}
2934
topologyKey: kubernetes.io/hostname
2935
preferredDuringSchedulingIgnoredDuringExecution:
2936
- weight: 100
2937
podAffinityTerm:
2938
labelSelector:
2939
matchLabels:
2940
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "memcached-frontend-search") | nindent 12 }}
2941
topologyKey: topology.kubernetes.io/zone
2942
# -- Pod Disruption Budget configuration
2943
podDisruptionBudget:
2944
# -- Enable PodDisruptionBudget for memcached-frontend-search
2945
enabled: true
2946
# -- Pod Disruption Budget maxUnavailable
2947
maxUnavailable: 1
2948
# -- Init containers for the memcached-frontend-search pod
2949
initContainers: []
2950
# -- Containers to add to the memcached-frontend-search pods
2951
extraContainers: []
2952
# -- Extra volume mounts for memcached-frontend-search pods
2953
extraVolumeMounts: []
2954
# -- Extra volumes for memcached-frontend-search StatefulSet
2955
extraVolumes: []
2956
service:
2957
# -- Annotations for memcached-frontend-search service
2958
annotations: {}
2959
# -- configuration for readiness probe for memcached-frontend-search statefulset
2960
readinessProbe:
2961
tcpSocket:
2962
port: client
2963
initialDelaySeconds: 5
2964
periodSeconds: 5
2965
timeoutSeconds: 3
2966
failureThreshold: 6
2967
successThreshold: 1
2968
# -- configuration for liveness probe for memcached-frontend-search statefulset
2969
livenessProbe:
2970
initialDelaySeconds: 30
2971
periodSeconds: 10
2972
timeoutSeconds: 5
2973
failureThreshold: 6
2974
successThreshold: 1
2975
metaMonitoring:
2976
# ServiceMonitor configuration
2977
serviceMonitor:
2978
# -- If enabled, ServiceMonitor resources for Prometheus Operator are created
2979
enabled: false
2980
# -- Alternative namespace for ServiceMonitor resources
2981
namespace: null
2982
# -- Namespace selector for ServiceMonitor resources
2983
namespaceSelector: {}
2984
# -- ServiceMonitor annotations
2985
annotations: {}
2986
# -- Additional ServiceMonitor labels
2987
labels: {}
2988
# -- ServiceMonitor scrape interval
2989
interval: null
2990
# -- ServiceMonitor scrape timeout in Go duration format (e.g. 15s)
2991
scrapeTimeout: null
2992
# -- ServiceMonitor relabel configs to apply to samples before scraping
2993
# https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#relabelconfig
2994
relabelings: []
2995
# -- ServiceMonitor metric relabel configs to apply to samples before ingestion
2996
# https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#endpoint
2997
metricRelabelings: []
2998
# -- ServiceMonitor will use http by default, but you can pick https as well
2999
scheme: http
3000
# -- ServiceMonitor will use these tlsConfig settings to make the health check requests
3001
tlsConfig: null
3002
# metaMonitoringAgent configures the built in Grafana Agent that can scrape metrics and logs and send them to a local or remote destination
3003
grafanaAgent:
3004
# -- Controls whether to create PodLogs, MetricsInstance, LogsInstance, and GrafanaAgent CRs to scrape the
3005
# ServiceMonitors of the chart and ship metrics and logs to the remote endpoints below.
3006
# Note that you need to configure serviceMonitor in order to have some metrics available.
3007
enabled: false
3008
# -- Controls whether to install the Grafana Agent Operator and its CRDs.
3009
# Note that helm will not install CRDs if this flag is enabled during an upgrade.
3010
# In that case install the CRDs manually from https://github.com/grafana/agent/tree/main/production/operator/crds
3011
installOperator: false
3012
logs:
3013
# -- Default destination for logs. The config here is translated to Promtail client
3014
# configuration to write logs to this Loki-compatible remote. Optional.
3015
remote:
3016
# -- Full URL for Loki push endpoint. Usually ends in /loki/api/v1/push
3017
url: ''
3018
auth:
3019
# -- Used to set X-Scope-OrgID header on requests. Usually not used in combination with username and password.
3020
tenantId: ''
3021
# -- Basic authentication username. Optional.
3022
username: ''
3023
# -- The value under key passwordSecretKey in this secret will be used as the basic authentication password. Required only if passwordSecretKey is set.
3024
passwordSecretName: ''
3025
# -- The value under this key in passwordSecretName will be used as the basic authentication password. Required only if passwordSecretName is set.
3026
passwordSecretKey: ''
3027
# -- Client configurations for the LogsInstance that will scrape Mimir pods. Follows the format of .remote.
3028
additionalClientConfigs: []
3029
metrics:
3030
# -- Default destination for metrics. The config here is translated to remote_write
3031
# configuration to push metrics to this Prometheus-compatible remote. Optional.
3032
# Note that you need to configure serviceMonitor in order to have some metrics available.
3033
remote:
3034
# -- Full URL for Prometheus remote-write. Usually ends in /push
3035
url: ''
3036
# -- Used to add HTTP headers to remote-write requests.
3037
headers: {}
3038
auth:
3039
# -- Basic authentication username. Optional.
3040
username: ''
3041
# -- The value under key passwordSecretKey in this secret will be used as the basic authentication password. Required only if passwordSecretKey is set.
3042
passwordSecretName: ''
3043
# -- The value under this key in passwordSecretName will be used as the basic authentication password. Required only if passwordSecretName is set.
3044
passwordSecretKey: ''
3045
# -- Additional remote-write for the MetricsInstance that will scrape Mimir pods. Follows the format of .remote.
3046
additionalRemoteWriteConfigs: []
3047
scrapeK8s:
3048
# -- When grafanaAgent.enabled and serviceMonitor.enabled, controls whether to create ServiceMonitors CRs
3049
# for cadvisor, kubelet, and kube-state-metrics. The scraped metrics are reduced to those pertaining to
3050
# Mimir pods only.
3051
enabled: true
3052
# -- Controls service discovery of kube-state-metrics.
3053
kubeStateMetrics:
3054
namespace: kube-system
3055
labelSelectors:
3056
app.kubernetes.io/name: kube-state-metrics
3057
# -- Sets the namespace of the resources. Leave empty or unset to use the same namespace as the Helm release.
3058
namespace: ''
3059
# -- Labels to add to all monitoring.grafana.com custom resources.
3060
# Does not affect the ServiceMonitors for kubernetes metrics; use serviceMonitor.labels for that.
3061
labels: {}
3062
# -- Annotations to add to all monitoring.grafana.com custom resources.
3063
# Does not affect the ServiceMonitors for kubernetes metrics; use serviceMonitor.annotations for that.
3064
annotations: {}
3065
# Rules for the Prometheus Operator
3066
prometheusRule:
3067
# -- If enabled, a PrometheusRule resource for Prometheus Operator is created
3068
enabled: false
3069
# -- Alternative namespace for the PrometheusRule resource
3070
namespace: null
3071
# -- PrometheusRule annotations
3072
annotations: {}
3073
# -- Additional PrometheusRule labels
3074
labels: {}
3075
# -- Contents of Prometheus rules file
3076
groups: []
3077
# - name: loki-rules
3078
# rules:
3079
# - record: job:loki_request_duration_seconds_bucket:sum_rate
3080
# expr: sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, job)
3081
# - record: job_route:loki_request_duration_seconds_bucket:sum_rate
3082
# expr: sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, job, route)
3083
# - record: node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate
3084
# expr: sum(rate(container_cpu_usage_seconds_total[1m])) by (node, namespace, pod, container)
3085
# Configuration for the gateway
3086
gateway:
3087
# -- Specifies whether the gateway should be enabled
3088
enabled: false
3089
# -- Number of replicas for the gateway
3090
replicas: 1
3091
# -- hostAliases to add
3092
hostAliases: []
3093
# - ip: 1.2.3.4
3094
# hostnames:
3095
# - domain.tld
3096
autoscaling:
3097
# -- Enable autoscaling for the gateway
3098
enabled: false
3099
# -- Minimum autoscaling replicas for the gateway
3100
minReplicas: 1
3101
# -- Maximum autoscaling replicas for the gateway
3102
maxReplicas: 3
3103
# -- Autoscaling behavior configuration for the gateway
3104
behavior: {}
3105
# -- Target CPU utilisation percentage for the gateway
3106
targetCPUUtilizationPercentage: 60
3107
# -- Target memory utilisation percentage for the gateway
3108
targetMemoryUtilizationPercentage:
3109
# -- Enable logging of 2xx and 3xx HTTP requests
3110
verboseLogging: true
3111
image:
3112
# -- The Docker registry for the gateway image. Overrides `global.image.registry`
3113
registry: null
3114
# -- Optional list of imagePullSecrets. Overrides `global.image.pullSecrets`
3115
pullSecrets: []
3116
# -- The gateway image repository
3117
repository: nginxinc/nginx-unprivileged
3118
# -- The gateway image tag
3119
tag: 1.31-alpine
3120
# -- The gateway image pull policy
3121
pullPolicy: IfNotPresent
3122
# -- The name of the PriorityClass for gateway pods
3123
priorityClassName: null
3124
# -- Labels for gateway pods
3125
podLabels: {}
3126
# -- Annotations for gateway deployment
3127
annotations: {}
3128
# -- Annotations for gateway pods
3129
podAnnotations: {}
3130
# -- Additional CLI args for the gateway
3131
extraArgs: []
3132
# -- Environment variables to add to the gateway pods
3133
extraEnv: []
3134
# -- Environment variables from secrets or configmaps to add to the gateway pods
3135
extraEnvFrom: []
3136
# -- Volumes to add to the gateway pods
3137
extraVolumes: []
3138
# -- Volume mounts to add to the gateway pods
3139
extraVolumeMounts: []
3140
# -- Containers to add to the gateway pods
3141
extraContainers: []
3142
# -- Resource requests and limits for the gateway
3143
resources: {}
3144
# -- Grace period to allow the gateway to shutdown before it is killed
3145
terminationGracePeriodSeconds: 30
3146
# -- topologySpread for gateway pods. Passed through `tpl` and, thus, to be configured as string
3147
# @default -- Defaults to allow skew no more than 1 node per AZ
3148
topologySpreadConstraints: |
3149
- maxSkew: 1
3150
topologyKey: topology.kubernetes.io/zone
3151
whenUnsatisfiable: ScheduleAnyway
3152
labelSelector:
3153
matchLabels:
3154
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "gateway") | nindent 6 }}
3155
# -- Affinity for gateway pods. Passed through `tpl` and, thus, to be configured as string
3156
# @default -- Hard node and soft zone anti-affinity
3157
affinity: |
3158
podAntiAffinity:
3159
requiredDuringSchedulingIgnoredDuringExecution:
3160
- labelSelector:
3161
matchLabels:
3162
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "gateway") | nindent 10 }}
3163
topologyKey: kubernetes.io/hostname
3164
preferredDuringSchedulingIgnoredDuringExecution:
3165
- weight: 100
3166
podAffinityTerm:
3167
labelSelector:
3168
matchLabels:
3169
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "gateway") | nindent 12 }}
3170
topologyKey: topology.kubernetes.io/zone
3171
# -- Pod Disruption Budget configuration
3172
podDisruptionBudget:
3173
# -- Enable PodDisruptionBudget for gateway
3174
enabled: true
3175
# -- Set unhealthyPodEvictionPolicy for the gateway PodDisruptionBudget. Requires policy/v1.
3176
unhealthyPodEvictionPolicy: ""
3177
# -- Pod Disruption Budget maxUnavailable
3178
maxUnavailable: 1
3179
# -- Minimum number of seconds for which a newly created Pod should be ready without any of its containers crashing/terminating
3180
minReadySeconds: 10
3181
# -- Node selector for gateway pods
3182
nodeSelector: {}
3183
# -- Tolerations for gateway pods
3184
tolerations: []
3185
# Gateway service configuration
3186
service:
3187
# -- Port of the gateway service
3188
port: 80
3189
# -- Type of the gateway service
3190
type: ClusterIP
3191
# -- Traffic distribution for the gateway service (PreferSameZone or PreferSameNode). Overrides tempo.service.trafficDistribution.
3192
trafficDistribution: null
3193
# -- ClusterIP of the gateway service
3194
clusterIP: null
3195
# -- Node port if service type is NodePort
3196
nodePort: null
3197
# -- Node port for the gRPC port if service type is NodePort
3198
grpcNodePort: null
3199
# -- Load balancer IP address if service type is LoadBalancer
3200
loadBalancerIP: null
3201
# -- Annotations for the gateway service
3202
annotations: {}
3203
# -- Labels for gateway service
3204
labels: {}
3205
# -- Additional ports to be opened on gateway service (e.g. for RPC connections)
3206
additionalPorts: []
3207
# Gateway ingress configuration
3208
ingress:
3209
# -- Specifies whether an ingress for the gateway should be created
3210
enabled: false
3211
# -- Labels for the gateway ingress
3212
labels: {}
3213
# -- Ingress Class Name. MAY be required for Kubernetes versions >= 1.18
3214
# ingressClassName: nginx
3215
# -- Annotations for the gateway ingress
3216
annotations: {}
3217
# -- Hosts configuration for the gateway ingress
3218
hosts:
3219
- host: gateway.tempo.example.com
3220
paths:
3221
- path: /
3222
# -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
3223
# pathType: Prefix
3224
# -- TLS configuration for the gateway ingress
3225
tls:
3226
- secretName: tempo-gateway-tls
3227
hosts:
3228
- gateway.tempo.example.com
3229
# -- Gateway API route configuration for the gateway.
3230
# Multiple routes can be added by adding a dictionary key like the 'main' route.
3231
route:
3232
main:
3233
# -- Specifies whether a Gateway API route for the gateway should be created
3234
enabled: false
3235
# -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1beta1
3236
# If not set, the latest available version will be auto-detected
3237
apiVersion: ""
3238
# -- Set the route kind
3239
# Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute
3240
kind: HTTPRoute
3241
# -- Route annotations
3242
annotations: {}
3243
# -- Route labels
3244
labels: {}
3245
# -- Hostnames for the route
3246
hostnames: []
3247
# - gateway.tempo.example.com
3248
# -- Parent references (gateway to attach to)
3249
parentRefs: []
3250
# - name: my-gateway
3251
# namespace: gateway-namespace
3252
# -- Matches define conditions for matching incoming requests
3253
matches:
3254
- path:
3255
type: PathPrefix
3256
value: /
3257
# -- Timeouts define the timeouts that can be configured for an HTTP request.
3258
# Ref. https://gateway-api.sigs.k8s.io/api-types/httproute/#timeouts-optional
3259
timeouts: {}
3260
# -- Filters define the filters that are applied to requests that match this rule.
3261
filters: []
3262
# -- Additional custom rules that can be added to the route
3263
additionalRules: []
3264
# Basic auth configuration
3265
basicAuth:
3266
# -- Enables basic authentication for the gateway
3267
enabled: false
3268
# -- The basic auth username for the gateway
3269
username: null
3270
# -- The basic auth password for the gateway
3271
password: null
3272
# -- Uses the specified username and password to compute a htpasswd using Sprig's `htpasswd` function.
3273
# The value is templated using `tpl`. Override this to use a custom htpasswd, e.g. in case the default causes
3274
# high CPU load.
3275
htpasswd: >-
3276
{{ htpasswd (required "'gateway.basicAuth.username' is required" .Values.gateway.basicAuth.username) (required "'gateway.basicAuth.password' is required" .Values.gateway.basicAuth.password) }}
3277
# -- Existing basic auth secret to use. Must contain '.htpasswd'
3278
existingSecret: null
3279
# Configures the liveness probe for the gateway
3280
livenessProbe:
3281
httpGet:
3282
path: /
3283
port: http-metrics
3284
initialDelaySeconds: 30
3285
timeoutSeconds: 5
3286
# Configures the readiness probe for the gateway
3287
readinessProbe:
3288
httpGet:
3289
path: /
3290
port: http-metrics
3291
initialDelaySeconds: 15
3292
timeoutSeconds: 1
3293
nginxConfig:
3294
# -- NGINX log format
3295
logFormat: |-
3296
main '$remote_addr - $remote_user [$time_local] $status '
3297
'"$request" $body_bytes_sent "$http_referer" '
3298
'"$http_user_agent" "$http_x_forwarded_for"';
3299
# -- Allows appending custom configuration to the main context
3300
mainSnippet: ''
3301
# -- Allows appending custom configuration to the server block
3302
serverSnippet: ''
3303
# -- Allows appending custom configuration to the http block
3304
httpSnippet: ''
3305
# -- Whether ssl should be appended to the listen directive of the server block or not.
3306
ssl: false
3307
# -- TLS secret name containing the certificate and key to be used if ssl is enabled. The secret must contain 'tls.crt' and 'tls.key'. Required if ssl is true.
3308
tlsSecretName: ''
3309
# -- Allows overriding the DNS resolver address nginx will use
3310
resolver: ''
3311
# -- Configures whether or not NGINX bind IPv6
3312
enableIPv6: false
3313
# -- Config file contents for Nginx. Passed through the `tpl` function to allow templating
3314
# @default -- See values.yaml
3315
file: |
3316
worker_processes 5; ## Default: 1
3317
error_log /dev/stderr;
3318
pid /tmp/nginx.pid;
3319
worker_rlimit_nofile 8192;
3320
3321
{{- with .Values.gateway.nginxConfig.mainSnippet }}
3322
{{ . | nindent 0 }}
3323
{{- end }}
3324
3325
events {
3326
worker_connections 4096; ## Default: 1024
3327
}
3328
3329
http {
3330
client_body_temp_path /tmp/client_temp;
3331
proxy_temp_path /tmp/proxy_temp_path;
3332
fastcgi_temp_path /tmp/fastcgi_temp;
3333
uwsgi_temp_path /tmp/uwsgi_temp;
3334
scgi_temp_path /tmp/scgi_temp;
3335
3336
proxy_http_version 1.1;
3337
3338
default_type application/octet-stream;
3339
log_format {{ .Values.gateway.nginxConfig.logFormat }}
3340
3341
{{- if .Values.gateway.verboseLogging }}
3342
access_log /dev/stderr main;
3343
{{- else }}
3344
3345
map $status $loggable {
3346
~^[23] 0;
3347
default 1;
3348
}
3349
access_log /dev/stderr main if=$loggable;
3350
{{- end }}
3351
3352
sendfile on;
3353
tcp_nopush on;
3354
{{- if .Values.gateway.nginxConfig.resolver }}
3355
resolver {{ .Values.gateway.nginxConfig.resolver }};
3356
{{- else }}
3357
resolver {{ .Values.global.dnsService }}.{{ .Values.global.dnsNamespace }}.svc.{{ .Values.global.clusterDomain }};
3358
{{- end }}
3359
3360
{{- with .Values.gateway.nginxConfig.httpSnippet }}
3361
{{ . | nindent 2 }}
3362
{{- end }}
3363
3364
server {
3365
listen 8080 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3366
{{- if .Values.gateway.nginxConfig.enableIPv6 }}
3367
listen [::]:8080 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3368
{{- end }}
3369
3370
{{- if .Values.streamOverHTTPEnabled }}
3371
http2 on;
3372
location /tempopb.StreamingQuerier/ {
3373
set $query_frontend {{ include "tempo.resourceName" (dict "ctx" . "component" "query-frontend") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3374
grpc_pass grpc://$query_frontend:3200;
3375
}
3376
{{- end }}
3377
3378
{{- if .Values.gateway.basicAuth.enabled }}
3379
auth_basic "Tempo";
3380
auth_basic_user_file /etc/nginx/secrets/.htpasswd;
3381
{{- end }}
3382
3383
location = / {
3384
return 200 'OK';
3385
auth_basic off;
3386
}
3387
3388
location = /jaeger/api/traces {
3389
set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3390
proxy_pass http://$distributor:14268/api/traces;
3391
}
3392
3393
location = /zipkin/spans {
3394
set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3395
proxy_pass http://$distributor:9411/spans;
3396
}
3397
3398
location = /v1/traces {
3399
set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3400
proxy_pass http://$distributor:4318/v1/traces;
3401
}
3402
3403
location = /otlp/v1/traces {
3404
set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3405
proxy_pass http://$distributor:4318/v1/traces;
3406
}
3407
3408
location ^~ /api {
3409
set $query_frontend {{ include "tempo.resourceName" (dict "ctx" . "component" "query-frontend") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3410
proxy_pass http://$query_frontend:3200$request_uri;
3411
}
3412
3413
location = /flush {
3414
set $ingester {{ include "tempo.resourceName" (dict "ctx" . "component" "ingester") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3415
proxy_pass http://$ingester:3200$request_uri;
3416
}
3417
3418
location = /shutdown {
3419
set $ingester {{ include "tempo.resourceName" (dict "ctx" . "component" "ingester") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3420
proxy_pass http://$ingester:3200$request_uri;
3421
}
3422
3423
location = /distributor/ring {
3424
set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3425
proxy_pass http://$distributor:3200$request_uri;
3426
}
3427
3428
location = /ingester/ring {
3429
set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3430
proxy_pass http://$distributor:3200$request_uri;
3431
}
3432
3433
location = /compactor/ring {
3434
set $compactor {{ include "tempo.resourceName" (dict "ctx" . "component" "compactor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3435
proxy_pass http://$compactor:3200$request_uri;
3436
}
3437
3438
{{- if .Values.backendScheduler.enabled }}
3439
location = /backend-worker/ring {
3440
set $backend_worker {{ include "tempo.resourceName" (dict "ctx" . "component" "backend-worker") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3441
proxy_pass http://$backend_worker:3200$request_uri;
3442
}
3443
{{- end }}
3444
3445
{{- if .Values.gateway.nginxConfig.ssl }}
3446
ssl_certificate /etc/nginx/ssl/tls.crt;
3447
ssl_certificate_key /etc/nginx/ssl/tls.key;
3448
{{- end }}
3449
3450
{{- with .Values.gateway.nginxConfig.serverSnippet }}
3451
{{ . | nindent 4 }}
3452
{{- end }}
3453
}
3454
3455
{{- if .Values.traces.otlp.grpc.enabled }}
3456
# OTLP gRPC
3457
server {
3458
listen {{ .Values.traces.otlp.grpc.port }} http2 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3459
{{- if .Values.gateway.nginxConfig.enableIPv6 }}
3460
listen [::]:{{ .Values.traces.otlp.grpc.port }} http2 {{- if .Values.gateway.nginxConfig.ssl }} ssl{{- end }};
3461
{{- end }}
3462
3463
{{- if .Values.gateway.basicAuth.enabled }}
3464
auth_basic "Tempo";
3465
auth_basic_user_file /etc/nginx/secrets/.htpasswd;
3466
{{- end }}
3467
3468
location = /opentelemetry.proto.collector.trace.v1.TraceService/Export {
3469
set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3470
grpc_pass grpc://$distributor:{{ .Values.traces.otlp.grpc.port }};
3471
}
3472
3473
location ~ /opentelemetry {
3474
set $distributor {{ include "tempo.resourceName" (dict "ctx" . "component" "distributor") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }};
3475
grpc_pass grpc://$distributor:{{ .Values.traces.otlp.grpc.port }};
3476
}
3477
3478
{{- if .Values.gateway.nginxConfig.ssl }}
3479
ssl_certificate /etc/nginx/ssl/tls.crt;
3480
ssl_certificate_key /etc/nginx/ssl/tls.key;
3481
{{- end }}
3482
3483
{{- with .Values.gateway.nginxConfig.serverSnippet }}
3484
{{ . | nindent 4 }}
3485
{{- end }}
3486
}
3487
{{- end }}
3488
}
3489
ingress:
3490
# -- If you enable this, make sure to disable the gateway's ingress.
3491
enabled: false
3492
# ingressClassName: nginx
3493
annotations: {}
3494
paths:
3495
distributor:
3496
- path: /v1/traces
3497
port: 4318
3498
- path: /distributor/ring
3499
# -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
3500
# pathType: Prefix
3501
- path: /live-store/ring
3502
- path: /partition-ring
3503
- path: /metrics-generator/ring
3504
- path: /memberlist
3505
query-frontend:
3506
- path: /api
3507
backend-scheduler:
3508
- path: /status/backendscheduler
3509
hosts:
3510
- tempo.example.com
3511
# -- Gateway API route configuration.
3512
# Multiple routes can be added by adding a dictionary key like the 'main' route.
3513
# This is useful for creating both HTTPRoute and GRPCRoute resources (e.g. for OTLP HTTP + gRPC).
3514
route:
3515
main:
3516
# -- Specifies whether a Gateway API route should be created
3517
enabled: false
3518
# -- Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1beta1
3519
# If not set, the latest available version will be auto-detected
3520
apiVersion: ""
3521
# -- Set the route kind
3522
# Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute
3523
kind: HTTPRoute
3524
# -- Route annotations
3525
annotations: {}
3526
# -- Route labels
3527
labels: {}
3528
# -- Hostnames for the route
3529
hostnames: []
3530
# - tempo.example.com
3531
# -- Parent references (gateway to attach to)
3532
parentRefs: []
3533
# - name: my-gateway
3534
# namespace: gateway-namespace
3535
# -- Paths to route to backend services. Each key is a service name suffix, and the value is a list of path matches.
3536
paths:
3537
distributor:
3538
- path: /v1/traces
3539
# -- pathType for the match (e.g. PathPrefix, Exact)
3540
pathType: PathPrefix
3541
# -- OTLP HTTP receiver port. This path is only rendered when traces.otlp.http.enabled is true.
3542
port: 4318
3543
- path: /distributor/ring
3544
pathType: PathPrefix
3545
- path: /live-store/ring
3546
pathType: PathPrefix
3547
- path: /partition-ring
3548
pathType: PathPrefix
3549
- path: /metrics-generator/ring
3550
pathType: PathPrefix
3551
- path: /memberlist
3552
pathType: PathPrefix
3553
query-frontend:
3554
- path: /api
3555
pathType: PathPrefix
3556
backend-scheduler:
3557
- path: /status/backendscheduler
3558
pathType: PathPrefix
3559
##############################################################################
3560
# The values in and after the `enterprise:` key configure the enterprise features
3561
enterprise:
3562
# Enable enterprise features. License must be provided, nginx gateway is not installed, instead
3563
# the enterprise gateway is used.
3564
enabled: false
3565
image:
3566
# -- Grafana Enterprise Traces container image repository. Note: for Grafana Tempo use the value 'image.repository'
3567
repository: grafana/enterprise-traces
3568
# -- Grafana Enterprise Traces container image tag. Note: for Grafana Tempo use the value 'image.tag'
3569
tag: v2.8.12
3570
# Note: pullPolicy and optional pullSecrets are set in toplevel 'image' section, not here
3571
# In order to use Grafana Enterprise Traces features, you will need to provide the contents of your Grafana Enterprise Traces
3572
# license, either by providing the contents of the license.jwt, or the name Kubernetes Secret that contains your license.jwt.
3573
# To set the license contents, use the flag `--set-file 'license.contents=./license.jwt'`
3574
# To use your own Kubernetes Secret, `--set license.external=true`.
3575
license:
3576
contents: 'NOTAVALIDLICENSE'
3577
external: false
3578
secretName: '{{ include "tempo.resourceName" (dict "ctx" . "component" "license") }}'
3579
# Settings for the initial admin(istrator) token generator job. Can only be enabled if
3580
# enterprise.enabled is true - requires license.
3581
tokengenJob:
3582
enable: true
3583
# -- hostAliases to add
3584
hostAliases: []
3585
# - ip: 1.2.3.4
3586
# hostnames:
3587
# - domain.tld
3588
extraArgs: {}
3589
env: []
3590
extraEnvFrom: []
3591
annotations: {}
3592
storeTokenInSecret: false
3593
# -- Name of the secret to store the admin token. If not specified, defaults to "<release-name>-admin-token"
3594
adminTokenSecret: "admin-token"
3595
image:
3596
# -- The Docker registry for the tokengenJob image. Overrides `tempo.image.registry`
3597
registry: null
3598
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
3599
pullSecrets: []
3600
# -- Docker image repository for the tokengenJob image. Overrides `tempo.image.repository`
3601
repository: null
3602
# -- Docker image tag for the tokengenJob image. Overrides `tempo.image.tag`
3603
tag: null
3604
initContainers: []
3605
# -- The SecurityContext for tokenjobgen containers
3606
containerSecurityContext:
3607
readOnlyRootFilesystem: true
3608
provisioner:
3609
# -- Whether the job should be part of the deployment
3610
enabled: false
3611
# -- Name of the secret to store provisioned tokens in
3612
provisionedSecretPrefix: null
3613
# -- Hook type(s) to customize when the job runs. defaults to post-install
3614
hookType: "post-install"
3615
# -- URL for the admin API service. Must be set to a valid URL.
3616
# Example: "http://tempo-admin-api.namespace.svc:3100"
3617
apiUrl: ""
3618
# -- Additional tenants to be created. Each tenant will get a read and write policy
3619
# and associated token. Tenant must have a name and a namespace for the secret containing
3620
# the token to be created in. For example
3621
# additionalTenants:
3622
# - name: tempo
3623
# secretNamespace: grafana
3624
additionalTenants: []
3625
# -- Additional arguments for the provisioner command
3626
extraArgs: {}
3627
# -- Additional Kubernetes environment
3628
env: []
3629
# -- Additional labels for the `provisioner` Job
3630
labels: {}
3631
# -- Additional annotations for the `provisioner` Job
3632
annotations: {}
3633
# -- Affinity for tokengen Pods
3634
affinity: {}
3635
# -- Node selector for tokengen Pods
3636
nodeSelector: {}
3637
# -- Tolerations for tokengen Pods
3638
tolerations: []
3639
# -- The name of the PriorityClass for provisioner Job
3640
priorityClassName: null
3641
# -- Run containers as nonroot user (uid=10001)`
3642
securityContext:
3643
runAsNonRoot: true
3644
runAsGroup: 10001
3645
runAsUser: 10001
3646
# -- Provisioner image to Utilize
3647
image:
3648
# -- The Docker registry
3649
registry: us-docker.pkg.dev
3650
# -- Docker image repository
3651
repository: grafanalabs-global/docker-enterprise-provisioner-prod/enterprise-provisioner
3652
# -- Overrides the image tag whose default is the chart's appVersion
3653
tag: null
3654
# -- Overrides the image tag with an image digest
3655
digest: null
3656
# -- Docker image pull policy
3657
pullPolicy: IfNotPresent
3658
# -- Volume mounts to add to the provisioner pods
3659
extraVolumeMounts: []
3660
# -- Volumes to add to the provisioner pods
3661
extraVolumes: []
3662
kubectlImage:
3663
repository: alpine/kubectl
3664
tag: latest
3665
pullPolicy: IfNotPresent
3666
# Settings for the admin_api service providing authentication and authorization service.
3667
# Can only be enabled if enterprise.enabled is true - requires license.
3668
adminApi:
3669
replicas: 1
3670
# -- hostAliases to add
3671
hostAliases: []
3672
# - ip: 1.2.3.4
3673
# hostnames:
3674
# - domain.tld
3675
3676
annotations: {}
3677
service:
3678
annotations: {}
3679
labels: {}
3680
image:
3681
# -- The Docker registry for the adminApi image. Overrides `tempo.image.registry`
3682
registry: null
3683
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
3684
pullSecrets: []
3685
# -- Docker image repository for the adminApi image. Overrides `tempo.image.repository`
3686
repository: null
3687
# -- Docker image tag for the adminApi image. Overrides `tempo.image.tag`
3688
tag: null
3689
initContainers: []
3690
strategy:
3691
type: RollingUpdate
3692
rollingUpdate:
3693
maxSurge: 0
3694
maxUnavailable: 1
3695
podLabels: {}
3696
podAnnotations: {}
3697
nodeSelector: {}
3698
# -- topologySpread for admin-api pods. Passed through `tpl` and, thus, to be configured as string
3699
# @default -- Defaults to allow skew no more than 1 node per AZ
3700
topologySpreadConstraints: |
3701
- maxSkew: 1
3702
topologyKey: topology.kubernetes.io/zone
3703
whenUnsatisfiable: ScheduleAnyway
3704
labelSelector:
3705
matchLabels:
3706
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "admin-api") | nindent 6 }}
3707
# -- Affinity for admin-api pods. Passed through `tpl` and, thus, to be configured as string
3708
# @default -- Soft node and soft zone anti-affinity
3709
affinity: |
3710
podAntiAffinity:
3711
preferredDuringSchedulingIgnoredDuringExecution:
3712
- weight: 100
3713
podAffinityTerm:
3714
labelSelector:
3715
matchLabels:
3716
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "admin-api") | nindent 12 }}
3717
topologyKey: kubernetes.io/hostname
3718
- weight: 75
3719
podAffinityTerm:
3720
labelSelector:
3721
matchLabels:
3722
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "admin-api") | nindent 12 }}
3723
topologyKey: topology.kubernetes.io/zone
3724
# Pod Disruption Budget
3725
podDisruptionBudget: {}
3726
securityContext: {}
3727
# -- The SecurityContext for admin_api containers
3728
containerSecurityContext:
3729
readOnlyRootFilesystem: true
3730
extraArgs: {}
3731
persistence:
3732
subPath:
3733
readinessProbe:
3734
httpGet:
3735
path: /ready
3736
port: http-metrics
3737
initialDelaySeconds: 45
3738
resources:
3739
requests:
3740
cpu: 10m
3741
memory: 32Mi
3742
terminationGracePeriodSeconds: 60
3743
tolerations: []
3744
extraContainers: []
3745
extraVolumes: []
3746
extraVolumeMounts: []
3747
env: []
3748
extraEnvFrom: []
3749
# Settings for the gateway service providing authentication and authorization via the admin_api.
3750
# Can only be enabled if enterprise.enabled is true - requires license.
3751
enterpriseGateway:
3752
# -- If you want to use your own proxy URLs, set this to false.
3753
useDefaultProxyURLs: true
3754
# -- Proxy URLs defined in this object will be used if useDefaultProxyURLs is set to false.
3755
proxy: {}
3756
replicas: 1
3757
# -- hostAliases to add
3758
hostAliases: []
3759
# - ip: 1.2.3.4
3760
# hostnames:
3761
# - domain.tld
3762
3763
image:
3764
# -- The Docker registry for the enterpriseGateway image. Overrides `tempo.image.registry`
3765
registry: null
3766
# -- Optional list of imagePullSecrets. Overrides `tempo.image.pullSecrets`
3767
pullSecrets: []
3768
# -- Docker image repository for the enterpriseGateway image. Overrides `tempo.image.repository`
3769
repository: null
3770
# -- Docker image tag for the enterpriseGateway image. Overrides `tempo.image.tag`
3771
tag: null
3772
annotations: {}
3773
service:
3774
# -- Port of the enterprise gateway service; if left undefined, the service will listen on the same port as the pod
3775
port: null
3776
# -- Type of the enterprise gateway service
3777
type: ClusterIP
3778
# -- ClusterIP of the enterprise gateway service
3779
clusterIP: null
3780
# -- Load balancer IP address if service type is LoadBalancer for enterprise gateway service
3781
loadBalancerIP: null
3782
# -- Annotations for the enterprise gateway service
3783
annotations: {}
3784
# -- Labels for enterprise gateway service
3785
labels: {}
3786
strategy:
3787
type: RollingUpdate
3788
rollingUpdate:
3789
maxSurge: 0
3790
maxUnavailable: 1
3791
podLabels: {}
3792
podAnnotations: {}
3793
# Pod Disruption Budget
3794
podDisruptionBudget: {}
3795
nodeSelector: {}
3796
# -- topologySpread for enterprise-gateway pods. Passed through `tpl` and, thus, to be configured as string
3797
# @default -- Defaults to allow skew no more than 1 node per AZ
3798
topologySpreadConstraints: |
3799
- maxSkew: 1
3800
topologyKey: topology.kubernetes.io/zone
3801
whenUnsatisfiable: ScheduleAnyway
3802
labelSelector:
3803
matchLabels:
3804
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "enterprise-gateway") | nindent 6 }}
3805
# -- Affinity for enterprise-gateway pods. Passed through `tpl` and, thus, to be configured as string
3806
# @default -- Soft node and soft zone anti-affinity
3807
affinity: |
3808
podAntiAffinity:
3809
preferredDuringSchedulingIgnoredDuringExecution:
3810
- weight: 100
3811
podAffinityTerm:
3812
labelSelector:
3813
matchLabels:
3814
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "enterprise-gateway") | nindent 12 }}
3815
topologyKey: kubernetes.io/hostname
3816
- weight: 75
3817
podAffinityTerm:
3818
labelSelector:
3819
matchLabels:
3820
{{- include "tempo.selectorLabels" (dict "ctx" . "component" "enterprise-gateway") | nindent 12 }}
3821
topologyKey: topology.kubernetes.io/zone
3822
securityContext: {}
3823
# -- The SecurityContext for enterprise-gateway containers
3824
containerSecurityContext:
3825
readOnlyRootFilesystem: true
3826
initContainers: []
3827
extraArgs: {}
3828
persistence:
3829
subPath:
3830
readinessProbe:
3831
httpGet:
3832
path: /ready
3833
port: http-metrics
3834
initialDelaySeconds: 45
3835
resources:
3836
requests:
3837
cpu: 10m
3838
memory: 32Mi
3839
terminationGracePeriodSeconds: 60
3840
tolerations: []
3841
extraContainers: []
3842
extraVolumes: []
3843
extraVolumeMounts: []
3844
env: []
3845
extraEnvFrom: []
3846
# Ingress configuration
3847
ingress:
3848
# -- Specifies whether an ingress for the enterprise-gateway should be created
3849
enabled: false
3850
# -- Ingress Class Name. MAY be required for Kubernetes versions >= 1.18
3851
# ingressClassName: gateway
3852
# -- Annotations for the enterprise-gateway ingress
3853
annotations: {}
3854
# -- Hosts configuration for the enterprise-gateway ingress
3855
hosts:
3856
- host: gateway.get.example.com
3857
paths:
3858
- path: /
3859
# -- pathType (e.g. ImplementationSpecific, Prefix, .. etc.) might also be required by some Ingress Controllers
3860
# pathType: Prefix
3861
# -- TLS configuration for the enterprise-gateway ingress
3862
tls:
3863
- secretName: get-gateway-tls
3864
hosts:
3865
- gateway.get.example.com
3866
# -- extraObjects could be utilized to add dynamic manifests via values
3867
extraObjects: []
3868
# Examples:
3869
# extraObjects:
3870
# - apiVersion: kubernetes-client.io/v1
3871
# kind: ExternalSecret
3872
# metadata:
3873
# name: tempo-secrets-{{ .Release.Name }}
3874
# spec:
3875
# backendType: aws
3876
# data:
3877
# - key: secret-access-key
3878
# name: awssm-secret
3879
# Alternatively, you can use strings, which lets you use additional templating features:
3880
# extraObjects:
3881
# - |
3882
# apiVersion: kubernetes-client.io/v1
3883
# kind: ExternalSecret
3884
# metadata:
3885
# name: tempo-secrets-{{ .Release.Name }}
3886
# spec:
3887
# backendType: aws
3888
# data:
3889
# - key: secret-access-key
3890
# name: {{ include "some-other-template" }}
3891
3892
tests:
3893
integration:
3894
# -- Enable helm test hooks that run a BATS trace roundtrip against the live cluster.
3895
# WARNING: enabling this and running `helm test` ingests real trace data into object storage.
3896
# Traces age out via retention; Tempo has no delete API.
3897
enabled: false
3898

The trusted source for open source

Talk to an expert
PrivacyTerms

Product

Chainguard ContainersChainguard LibrariesChainguard VMsChainguard OS PackagesChainguard ActionsChainguard Agent SkillsIntegrationsPricing
© 2026 Chainguard, Inc. All Rights Reserved.
Chainguard® and the Chainguard logo are registered trademarks of Chainguard, Inc. in the United States and/or other countries.
The other respective trademarks mentioned on this page are owned by the respective companies and use of them does not imply any affiliation or endorsement.