apiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease metadata: name: kube-prometheus-stack namespace: monitoring spec: interval: 30m chart: spec: chart: kube-prometheus-stack version: "63.x" sourceRef: kind: HelmRepository name: prometheus-community namespace: monitoring interval: 12h targetNamespace: monitoring install: createNamespace: true crds: Create upgrade: crds: CreateReplace driftDetection: mode: enabled ignore: - paths: ["/metadata/annotations/prometheus-operator-validated"] target: kind: PrometheusRule values: # Alertmanager disabled - using Grafana-native alerting alertmanager: enabled: false # Prometheus configuration prometheus: prometheusSpec: retention: 7d # Monitor pods from all namespaces (needed for CNPG, vLLM, etc.) podMonitorNamespaceSelector: {} podMonitorSelectorNilUsesHelmValues: false probeSelectorNilUsesHelmValues: false ruleSelectorNilUsesHelmValues: false serviceMonitorSelectorNilUsesHelmValues: false storageSpec: volumeClaimTemplate: spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 10Gi # ServiceMonitor for Prometheus itself serviceMonitor: selfMonitor: true # Grafana configuration - NO PUBLIC INGRESS, internal only grafana: # Admin credentials adminUser: admin # Password injected from monitoring-grafana-admin secret adminPassword: "change-me-after-deploy" # No ingress - accessed via Tailscale port-forward or kubectl port-forward ingress: enabled: false # Service - internal only (ClusterIP) service: type: ClusterIP port: 3000 annotations: tailscale.com/proxy-group: grafana # Sidecar to auto-load dashboards from ConfigMaps sidecar: dashboards: enabled: true label: grafana_dashboard labelValue: "1" searchNamespace: all folderAnnotation: grafana_folder provider: allowUiUpdates: true folders: - folder: Kubernetes orgId: 1 type: file datasources: enabled: true