# =====================================================================
# values.yaml per kube-prometheus-stack su RKE2 (installazione diretta,
# senza Rancher Manager)
#
# Repo: https://prometheus-community.github.io/helm-charts
# Chart: kube-prometheus-stack
#
# Install:
#   helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
#   helm repo update
#   helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
#     -n monitoring --create-namespace \
#     -f 01-kube-prometheus-stack-values.yaml
# =====================================================================

# ---------------------------------------------------------------------
# Prometheus
# ---------------------------------------------------------------------
prometheus:
  prometheusSpec:
    retention: 15d
    retentionSize: "10GB"

    # Adatta alla storageClass disponibile nel tuo cluster RKE2
    # (es. longhorn, local-path-provisioner, ceph-rbd, ecc.)
    storageSpec:
      volumeClaimTemplate:
        spec:
          storageClassName: longhorn   # <-- CAMBIA con la tua storageClass
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 50Gi

    resources:
      requests:
        cpu: 250m
        memory: 1Gi
      limits:
        memory: 2Gi

    # Permette a Prometheus di scoprire ServiceMonitor/PodMonitor
    # creati in QUALSIASI namespace (importante per uno stack "generico"
    # dove le verticali applicative, es. CNPG, vivono in namespace propri)
    serviceMonitorSelectorNilUsesHelmValues: false
    podMonitorSelectorNilUsesHelmValues: false
    ruleSelectorNilUsesHelmValues: false

    # Su RKE2 il control-plane espone metriche ma va abilitato esplicitamente
    # lo scraping (vedi sezioni kubeEtcd/kubeControllerManager/kubeScheduler
    # più sotto). Se il tuo cluster è "hardened" e non espone questi endpoint
    # sui nodi worker, valuta di disabilitare le relative sezioni.

# ---------------------------------------------------------------------
# Control plane RKE2 — di default questi componenti su RKE2 girano come
# pod statici raggiungibili sul nodo server; verificare le porte reali
# con `kubectl get pods -n kube-system` e `netstat` sul nodo se lo
# scraping non trova i target.
# ---------------------------------------------------------------------
kubeEtcd:
  enabled: true
  service:
    port: 2381
    targetPort: 2381

kubeControllerManager:
  enabled: true
  service:
    port: 10257
    targetPort: 10257
  # RKE2 espone il controller-manager in HTTPS con cert self-signed:
  # potrebbe servire scrapeConfig con tlsConfig.insecureSkipVerify: true
  # (vedi kube-prometheus-stack docs, sezione "kubeControllerManager").

kubeScheduler:
  enabled: true
  service:
    port: 10259
    targetPort: 10259

# Traefik è deployato di default su RKE2 ed è considerato componente
# interno. Se lo usi come ingress controller, aggiungi un ServiceMonitor
# dedicato puntato al suo endpoint /metrics (di solito porta 9100).
kubeProxy:
  enabled: true

# ---------------------------------------------------------------------
# Alertmanager
# ---------------------------------------------------------------------
alertmanager:
  alertmanagerSpec:
    retention: 120h
    storage:
      volumeClaimTemplate:
        spec:
          storageClassName: longhorn   # <-- CAMBIA con la tua storageClass
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 5Gi
    resources:
      requests:
        cpu: 50m
        memory: 128Mi
      limits:
        memory: 256Mi

  # Config di base; per la config completa vedi il file
  # 04-alertmanager-config.yaml (AlertmanagerConfig CRD, più gestibile
  # in modo dichiarativo/GitOps rispetto a alertmanager.config qui).

# ---------------------------------------------------------------------
# Grafana (incluso nel chart)
# ---------------------------------------------------------------------
grafana:
  enabled: true
  defaultDashboardsTimezone: Europe/Rome

  persistence:
    enabled: true
    storageClassName: longhorn   # <-- CAMBIA con la tua storageClass
    size: 5Gi

  # Cambia in produzione: usa un Secret invece di plaintext
  adminPassword: "CHANGE_ME"

  # Loki come datasource aggiuntivo (vedi file 03-loki-alloy)
  additionalDataSources:
    - name: Loki
      type: loki
      access: proxy
      url: http://loki.monitoring.svc.cluster.local:3100
      isDefault: false

  resources:
    requests:
      cpu: 100m
      memory: 128Mi
    limits:
      memory: 256Mi

  # Import automatico dashboard CNPG (ID 20417) via sidecar dashboards
  # già incluso nel chart: basta creare un ConfigMap con label
  # grafana_dashboard=1 (vedi file 02-cnpg-monitoring.yaml in fondo,
  # sezione dashboard, oppure importa manualmente da Grafana UI).

# ---------------------------------------------------------------------
# node-exporter
# ---------------------------------------------------------------------
nodeExporter:
  enabled: true

prometheus-node-exporter:
  resources:
    requests:
      cpu: 50m
      memory: 30Mi
    limits:
      memory: 50Mi

# ---------------------------------------------------------------------
# kube-state-metrics
# ---------------------------------------------------------------------
kubeStateMetrics:
  enabled: true

kube-state-metrics:
  resources:
    requests:
      cpu: 50m
      memory: 64Mi
    limits:
      memory: 128Mi
