apiVersion: apps/v1 kind: Deployment metadata: name: grafana namespace: grafana labels: app: grafana spec: replicas: 3 selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: securityContext: fsGroup: 472 supplementalGroups: - 0 containers: - name: grafana image: grafana/grafana:latest imagePullPolicy: IfNotPresent ports: - containerPort: 3000 name: http-grafana protocol: TCP readinessProbe: failureThreshold: 3 httpGet: path: /robots.txt port: 3000 scheme: HTTP initialDelaySeconds: 10 periodSeconds: 30 successThreshold: 1 timeoutSeconds: 2 livenessProbe: failureThreshold: 3 initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 3000 timeoutSeconds: 1 env: - name: GF_SERVER_ROOT_URL value: "https://obs.prod.panic.haus/" - name: GF_SERVER_DOMAIN value: "obs.prod.panic.haus" # External database configuration (example using PostgreSQL) - name: GF_DATABASE_TYPE value: "postgres" - name: GF_DATABASE_HOST value: "postgres-base-rw.postgres:5432" # Change to your external DB service address - name: GF_DATABASE_NAME value: "grafanadb" - name: GF_DATABASE_USER valueFrom: secretKeyRef: name: grafana-db-secret key: username - name: GF_DATABASE_PASSWORD valueFrom: secretKeyRef: name: grafana-db-secret key: password - name: GF_SESSION_PROVIDER value: "redis" - name: GF_SESSION_PROVIDER_CONFIG value: "redis://redis-lb.redis.svc.cluster.local:6379" resources: requests: cpu: 250m memory: 750Mi volumeMounts: - name: grafana-datasources mountPath: /etc/grafana/provisioning/datasources/datasources.yaml subPath: datasources.yaml volumes: - name: grafana-datasources configMap: name: grafana-datasources