apiVersion: apps/v1 kind: StatefulSet metadata: name: tempo namespace: observability labels: app: tempo spec: serviceName: tempo replicas: 1 selector: matchLabels: app: tempo template: metadata: labels: app: tempo annotations: prometheus.io/scrape: "true" prometheus.io/port: "3200" spec: nodeSelector: kubernetes.io/hostname: hetzner-2 securityContext: fsGroup: 10001 runAsGroup: 10001 runAsNonRoot: true runAsUser: 10001 containers: - name: tempo image: grafana/tempo:2.6.1 args: - '-config.file=/etc/tempo/tempo.yaml' ports: - name: http containerPort: 3200 protocol: TCP - name: otlp-grpc containerPort: 4317 protocol: TCP - name: otlp-http containerPort: 4318 protocol: TCP - name: jaeger-grpc containerPort: 14250 protocol: TCP - name: jaeger-http containerPort: 14268 protocol: TCP - name: zipkin containerPort: 9411 protocol: TCP livenessProbe: httpGet: path: /ready port: http initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 readinessProbe: httpGet: path: /ready port: http initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 resources: requests: cpu: 500m memory: 1Gi limits: cpu: 2000m memory: 2Gi volumeMounts: - name: tempo-config mountPath: /etc/tempo - name: tempo-data mountPath: /var/tempo volumes: - name: tempo-config configMap: name: tempo-config - name: tempo-data persistentVolumeClaim: claimName: tempo-data --- apiVersion: v1 kind: Service metadata: name: tempo namespace: observability labels: app: tempo spec: type: ClusterIP ports: - port: 3200 targetPort: http protocol: TCP name: http - port: 4317 targetPort: otlp-grpc protocol: TCP name: otlp-grpc - port: 4318 targetPort: otlp-http protocol: TCP name: otlp-http - port: 14250 targetPort: jaeger-grpc protocol: TCP name: jaeger-grpc - port: 14268 targetPort: jaeger-http protocol: TCP name: jaeger-http - port: 9411 targetPort: zipkin protocol: TCP name: zipkin selector: app: tempo