How to Deploy OpenTelemetry in Kubernetes¶
OpenTelemetry (OTel) is an open-source standard for observability — traces, metrics and logs from a single SDK. Here is a guide on how to deploy it in Kubernetes.
Prerequisites¶
- Kubernetes cluster (1.26+)
- kubectl + helm
- Grafana stack (Tempo, Mimir, Loki) or another backend
Step 1: Install OTel Collector¶
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install otel-collector open-telemetry/opentelemetry-collector \
--namespace observability \
--create-namespace \
-f values.yaml
Step 2: Configure the Collector¶
# values.yaml
mode: deployment
config:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
timeout: 5s
send_batch_size: 1000
exporters:
otlp/tempo:
endpoint: tempo.observability:4317
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp/tempo]
Step 3: Instrument Your Application¶
For Python:
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
provider = TracerProvider()
exporter = OTLPSpanExporter(endpoint="otel-collector.observability:4317")
provider.add_span_processor(BatchSpanProcessor(exporter))
trace.set_tracer_provider(provider)
Step 4: Verification¶
kubectl port-forward svc/grafana 3000:3000 -n observability
# Open Grafana → Explore → Tempo → search for traces
Tips¶
- Sampling: For production, set up tail-based sampling (1-10% traces)
- Resource detection: Add k8s resource detector for automatic labels
- Cost: OTel is free, but backend storage costs money — plan your retention
Conclusion¶
OpenTelemetry is the future of observability. Instrument once, change the backend anytime.
opentelemetrykubernetesmonitoringtracesmetriky