apiVersion: apps/v1 kind: Deployment metadata: name: prometheus namespace: observability labels: app.kubernetes.io/name: prometheus app.kubernetes.io/component: metrics app.kubernetes.io/part-of: observability spec: replicas: 1 strategy: # ReadWriteOnce PVC: the old pod must release the volume first. type: Recreate selector: matchLabels: app: prometheus template: metadata: labels: app: prometheus app.kubernetes.io/name: prometheus app.kubernetes.io/component: metrics app.kubernetes.io/part-of: observability annotations: prometheus.io/scrape: "true" prometheus.io/port: "9090" spec: serviceAccountName: prometheus securityContext: runAsUser: 65534 runAsGroup: 65534 fsGroup: 65534 containers: - name: prometheus image: prom/prometheus:v3.14.0 args: - --config.file=/etc/prometheus/prometheus.yaml - --storage.tsdb.path=/prometheus - --storage.tsdb.retention.time=15d - --storage.tsdb.retention.size=8GB - --web.enable-lifecycle # Receives remote_write from Tempo's metrics_generator (span metrics + service graphs). - --web.enable-remote-write-receiver - --web.external-url=https://prometheus.sttlab.local - --web.route-prefix=/ ports: - name: http containerPort: 9090 resources: requests: cpu: 100m memory: 512Mi limits: cpu: "2" memory: 2Gi readinessProbe: httpGet: path: /-/ready port: http initialDelaySeconds: 10 periodSeconds: 10 livenessProbe: httpGet: path: /-/healthy port: http initialDelaySeconds: 30 periodSeconds: 30 volumeMounts: - name: config mountPath: /etc/prometheus - name: data mountPath: /prometheus - name: librechat-metrics mountPath: /etc/prometheus/secrets/librechat readOnly: true volumes: - name: config configMap: name: prometheus-config - name: librechat-metrics secret: secretName: librechat-metrics - name: data persistentVolumeClaim: claimName: prometheus-data