diff --git a/kubernetes/apps/monitoring/helmrelease-prometheus.yaml b/kubernetes/apps/monitoring/helmrelease-prometheus.yaml index 55ed2a46..735f1f98 100644 --- a/kubernetes/apps/monitoring/helmrelease-prometheus.yaml +++ b/kubernetes/apps/monitoring/helmrelease-prometheus.yaml @@ -81,12 +81,17 @@ spec: # (the pre-2026-07 config) ingested every node/guest series 3x — # identical `id`, differing `instance` — a real TSDB cardinality # cost that dashboards had to paper over with max by (id). - # Trade-off: cluster metrics pause if .201 is down; node-local - # metrics below keep flowing from the surviving nodes. + # + # Target the pve Service (apps ns) rather than a hardcoded node IP: + # its EndpointSlice load-balances the PVE API across all three nodes, + # so cluster metrics keep flowing as long as ANY node is up, instead + # of pausing whenever .201 (jupiter) specifically is down. The + # exporter reaches the API on 8006 (verify_ssl:false, so the LB'd + # cert hostname mismatch is a non-issue). - job_name: pve static_configs: - targets: - - "10.2.40.201" + - "pve.apps.svc.cluster.local" metrics_path: /pve params: cluster: ["1"] @@ -103,12 +108,15 @@ spec: # node-local and genuinely distinct per target, so every node is # scraped — this is the split recommended by prometheus-pve-exporter # upstream to avoid the cluster-collector duplication above. + # Targets are the node FQDNs, not raw IPs: the instance label then + # reads jupiter/neptune/saturn.renner.uno, and a renumbered node is + # picked up from DNS without editing this file. - job_name: pve-node static_configs: - targets: - - "10.2.40.201" - - "10.2.40.202" - - "10.2.40.203" + - "jupiter.renner.uno" + - "neptune.renner.uno" + - "saturn.renner.uno" metrics_path: /pve params: cluster: ["0"]