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

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.