10 – Deploying Tempo in Production (Kubernetes + Helm)
Learning Objectives
- Deploy Tempo on Kubernetes using Helm.
- Configure HA, storage, authentication, and multi-tenancy.
- Integrate with GitOps (Argo CD/Flux) and CI/CD.
Helm Chart (values excerpt)
Create values-tempo.yaml:
tempo:
retention:
traces: 168h
storage:
trace:
backend: s3
s3:
bucket: tempo-traces
endpoint: s3.amazonaws.com
s3forcepathstyle: false
query_frontend:
replicas: 2
distributor:
replicas: 2
ingester:
replicas: 3
compactor:
replicas: 1
serviceMonitor:
enabled: true
Commands
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm upgrade --install tempo grafana/tempo-distributed -n observability -f values-tempo.yaml --create-namespace
Security & Multi-Tenancy
- Add mTLS at ingress; use proxy/auth to enforce tenant IDs.
- Configure tenant quotas and per-tenant retention.
Operator vs Helm
- Helm gives explicit control; Operators provide declarative APIs and automation. Choose by team preference and ops model.
GitOps
- Store
values-tempo.yamlin Git; reconcile with Argo CD. - Automate smoke checks via TraceQL queries in CI.
Hands-on Lab
- Deploy on Kind/Minikube.
- Validate ingestion, queries, and retention.
Deliverables
- A working Tempo on Kubernetes with object storage configured.
Quiz (Self-check)
- Which components should run multiple replicas for HA?
- Where is retention defined in values?
Resources
- Grafana Helm Charts
- Tempo Distributed chart docs