# ------------------------------------------------------------------------------ # kube-prometheus-stack — Helm Values # Chart: https://prometheus-community.github.io/helm-charts # Version: 70.4.2 # ------------------------------------------------------------------------------ # ─── Alertmanager ───────────────────────────────────────────────────────────── alertmanager: enabled: true alertmanagerSpec: storage: volumeClaimTemplate: spec: storageClassName: nfs-emporium accessModes: - ReadWriteOnce resources: requests: storage: 5Gi # ─── Prometheus ─────────────────────────────────────────────────────────────── prometheus: prometheusSpec: retention: 30d retentionSize: "45GB" storageSpec: volumeClaimTemplate: spec: storageClassName: nfs-emporium accessModes: - ReadWriteOnce resources: requests: storage: 50Gi # Scrape all ServiceMonitors/PodMonitors regardless of namespace serviceMonitorSelectorNilUsesHelmValues: false podMonitorSelectorNilUsesHelmValues: false ruleSelectorNilUsesHelmValues: false resources: requests: cpu: 200m memory: 512Mi limits: cpu: 1000m memory: 2Gi # ─── Additional scrape configs — external targets ────────────────────────── additionalScrapeConfigs: # Proxmox nodes — Node Exporter on each hypervisor - job_name: proxmox-nodes scrape_interval: 30s static_configs: - targets: - 10.1.71.11:9100 - 10.1.71.12:9100 - 10.1.71.13:9100 labels: job: proxmox # cinderella-castle — existing VM-side Prometheus host # Remove this once cinderella-castle is decommissioned - job_name: node-cinderella-castle scrape_interval: 30s static_configs: - targets: - 10.1.71.31:9100 labels: hostname: cinderella-castle # Traefik metrics - job_name: traefik scrape_interval: 30s static_configs: - targets: - 10.1.71.35:8080 labels: hostname: lightning-lane # Proxmox VE Exporter — cluster-level metrics (VM states, storage, CPU) # Multi-target pattern: Prometheus passes the cluster address as a param - job_name: proxmox-cluster scrape_interval: 30s metrics_path: /pve params: module: [default] cluster: ["1"] node: [""] static_configs: - targets: - 10.1.71.11 # main-street-usa — cluster API endpoint labels: cluster: magic-kingdom relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: pve-exporter.monitoring.svc.cluster.local:9221 # SNMP — UniFi devices (multi-target pattern) # world-drive (UDM Pro) - job_name: snmp-udm-pro scrape_interval: 60s scrape_timeout: 55s metrics_path: /snmp params: auth: [mk_labs_v2c] module: [if_mib] static_configs: - targets: - 192.168.1.1 labels: device: world-drive model: UDM-Pro relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: snmp-exporter.monitoring.svc.cluster.local:9116 # usw-pro-aggregation - job_name: snmp-usw-pro-aggregation scrape_interval: 60s scrape_timeout: 55s metrics_path: /snmp params: auth: [mk_labs_v2c] module: [if_mib] static_configs: - targets: - 192.168.1.123 labels: device: usw-pro-aggregation model: USW-Pro-Aggregation relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: snmp-exporter.monitoring.svc.cluster.local:9116 # usw-pro-max-24 - job_name: snmp-usw-pro-max-24 scrape_interval: 60s scrape_timeout: 55s metrics_path: /snmp params: auth: [mk_labs_v2c] module: [if_mib] static_configs: - targets: - 192.168.1.226 labels: device: usw-pro-max-24 model: USW-Pro-Max-24 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: snmp-exporter.monitoring.svc.cluster.local:9116 # usw-lite-16-poe - job_name: snmp-usw-lite-16-poe scrape_interval: 60s scrape_timeout: 55s metrics_path: /snmp params: auth: [mk_labs_v2c] module: [if_mib] static_configs: - targets: - 192.168.1.136 labels: device: usw-lite-16-poe model: USW-Lite-16-PoE relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: snmp-exporter.monitoring.svc.cluster.local:9116 # Pure FlashArray — DEFERRED until Purity 6.7+ # Uncomment when utilidor is upgraded. Native OpenMetrics endpoint, # no exporter container needed. Add API token to 1Password as # item "pure-flasharray-utilidor" field "api-token". # - job_name: pure-flasharray-utilidor # scrape_interval: 30s # metrics_path: /metrics/array # scheme: https # tls_config: # insecure_skip_verify: true # authorization: # credentials_file: /etc/prometheus/secrets/pure-api-token/api-token # params: # namespace: ["purefa"] # static_configs: # - targets: # - utilidor.local.mk-labs.cloud # labels: # array: utilidor # array_type: physical # ─── Grafana ────────────────────────────────────────────────────────────────── grafana: enabled: true persistence: enabled: false admin: existingSecret: grafana-admin-secret userKey: admin-user passwordKey: admin-password grafana.ini: server: root_url: https://grafana.local.mk-labs.cloud auth: disable_login_form: false defaultDashboardsEnabled: true defaultDashboardsTimezone: browser dashboardProviders: dashboardproviders.yaml: apiVersion: 1 providers: - name: default orgId: 1 folder: "" type: file disableDeletion: false editable: true options: path: /var/lib/grafana/dashboards/default dashboards: default: node-exporter-full: gnetId: 1860 revision: 37 datasource: Prometheus kubernetes-cluster: gnetId: 7249 revision: 1 datasource: Prometheus kubernetes-pods: gnetId: 6336 revision: 1 datasource: Prometheus unifi-poller: gnetId: 11315 revision: 9 datasource: Prometheus proxmox-cluster: gnetId: 10347 revision: 5 datasource: Prometheus sidecar: dashboards: enabled: true searchNamespace: ALL label: grafana_dashboard labelValue: "1" resources: requests: cpu: 100m memory: 256Mi limits: cpu: 500m memory: 512Mi # ─── Node Exporter ──────────────────────────────────────────────────────────── nodeExporter: enabled: true prometheus-node-exporter: tolerations: - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule # ─── kube-state-metrics ─────────────────────────────────────────────────────── kubeStateMetrics: enabled: true # ─── Prometheus Operator ────────────────────────────────────────────────────── prometheusOperator: enabled: true # ─── Component scraping ─────────────────────────────────────────────────────── kubeApiServer: enabled: true kubelet: enabled: true kubeControllerManager: enabled: true kubeScheduler: enabled: true kubeProxy: enabled: false # Cilium replaces kube-proxy kubeEtcd: enabled: true endpoints: - 10.1.71.66 - 10.1.71.67 - 10.1.71.68 service: enabled: true port: 2381 targetPort: 2381