apiVersion: apps/v1 kind: Deployment metadata: name: grafana namespace: observability labels: app.kubernetes.io/name: grafana app.kubernetes.io/component: ui app.kubernetes.io/part-of: observability spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: grafana template: metadata: labels: app: grafana app.kubernetes.io/name: grafana app.kubernetes.io/component: ui app.kubernetes.io/part-of: observability annotations: prometheus.io/scrape: "true" prometheus.io/port: "3000" prometheus.io/path: "/metrics" spec: securityContext: runAsUser: 472 runAsGroup: 472 fsGroup: 472 containers: - name: grafana image: grafana/grafana:13.2.0 ports: - name: http containerPort: 3000 env: - name: GF_SECURITY_ADMIN_USER valueFrom: secretKeyRef: name: observability-secrets key: GF_SECURITY_ADMIN_USER - name: GF_SECURITY_ADMIN_PASSWORD valueFrom: secretKeyRef: name: observability-secrets key: GF_SECURITY_ADMIN_PASSWORD - name: GF_SERVER_ROOT_URL value: https://grafana.sttlab.local - name: GF_PATHS_PROVISIONING value: /etc/grafana/provisioning # Everything is driven by the provisioning files, so creating # dashboards or datasources from the UI is disabled. - name: GF_USERS_ALLOW_SIGN_UP value: "false" - name: GF_ANALYTICS_REPORTING_ENABLED value: "false" - name: GF_ANALYTICS_CHECK_FOR_UPDATES value: "false" - name: GF_ANALYTICS_CHECK_FOR_PLUGIN_UPDATES value: "false" - name: GF_NEWS_NEWS_FEED_ENABLED value: "false" - name: GF_LOG_LEVEL value: info - name: GF_FEATURE_TOGGLES_ENABLE value: traceqlEditor,traceQLStreaming,correlations,lokiLogsDataplane resources: requests: cpu: 100m memory: 256Mi limits: cpu: "1" memory: 1Gi readinessProbe: httpGet: path: /api/health port: http initialDelaySeconds: 15 periodSeconds: 10 livenessProbe: httpGet: path: /api/health port: http initialDelaySeconds: 60 periodSeconds: 30 volumeMounts: - name: data mountPath: /var/lib/grafana - name: provisioning-datasources mountPath: /etc/grafana/provisioning/datasources - name: provisioning-dashboards mountPath: /etc/grafana/provisioning/dashboards - name: dashboards mountPath: /var/lib/grafana/dashboards volumes: - name: data persistentVolumeClaim: claimName: grafana-data - name: provisioning-datasources configMap: name: grafana-datasources - name: provisioning-dashboards configMap: name: grafana-dashboard-providers - name: dashboards # Stable-named ConfigMap: updated in place by `make dashboards` and # re-read by Grafana without a restart (~70s: kubelet sync + 10s poll). configMap: name: grafana-dashboards