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

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.