Files
2026-05-19 21:12:54 -05:00

358 lines
11 KiB
YAML

# ------------------------------------------------------------------------------
# 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:
# ── Already present ──────────────────────────────────────────────────────
node-exporter-full:
gnetId: 1860
revision: 37
datasource: Prometheus
proxmox-cluster:
gnetId: 10347
revision: 5
datasource: Prometheus
unifi-poller:
gnetId: 11315
revision: 9
datasource: Prometheus
# ── Kubernetes ───────────────────────────────────────────────────────────
kubernetes-global:
gnetId: 15757
revision: 37
datasource: Prometheus
kubernetes-namespace:
gnetId: 15758
revision: 34
datasource: Prometheus
kubernetes-pods:
gnetId: 6336
revision: 1
datasource: Prometheus
# ── Platform services ─────────────────────────────────────────────────────
argocd:
gnetId: 19974
revision: 3
datasource: Prometheus
cert-manager:
gnetId: 20842
revision: 3
datasource: Prometheus
cilium-dashboard:
gnetId: 16611
revision: 1
datasource: Prometheus
# ── Infrastructure ────────────────────────────────────────────────────────
# Traefik — uncomment when P.02 is done (--metrics.prometheus=true)
# traefik:
# gnetId: 17346
# revision: 9
# 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