apiVersion: v1 kind: Secret metadata: name: grafana-admin namespace: monitoring type: Opaque data: admin-user: YWRtaW4= admin-password: Y2hhbmdlLW1l --- apiVersion: v1 kind: ConfigMap metadata: name: grafana-datasources namespace: monitoring data: datasources.yaml: | apiVersion: 1 datasources: - name: Prometheus type: prometheus access: proxy url: http://prometheus:9090 isDefault: true - name: Loki type: loki access: proxy url: http://loki:3100 --- apiVersion: apps/v1 kind: Deployment metadata: name: grafana namespace: monitoring spec: replicas: 1 selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: containers: - name: grafana image: grafana/grafana:10.4.6 ports: - name: http containerPort: 3000 env: - name: GF_SECURITY_ADMIN_USER valueFrom: secretKeyRef: name: grafana-admin key: admin-user - name: GF_SECURITY_ADMIN_PASSWORD valueFrom: secretKeyRef: name: grafana-admin key: admin-password volumeMounts: - name: datasources mountPath: /etc/grafana/provisioning/datasources volumes: - name: datasources configMap: name: grafana-datasources --- apiVersion: v1 kind: Service metadata: name: grafana namespace: monitoring spec: type: ClusterIP ports: - name: http port: 3000 targetPort: http selector: app: grafana