Funk-lab/k8s/infra/monitoring/values.yaml
ALI YESILKAYA 514cb89579
feat(grafana): SSO OIDC via Authentik + admin par groupe lab-admins (#86)
- values.yaml monitoring : auth.generic_oauth (auth_url navigateur,
  token/api sur le Service interne), root_url, mapping lab-admins→Admin /
  sinon Viewer. Login local conservé (break-glass).
- vault : vault_grafana_oauth_client_secret (= secret k8s
  monitoring/grafana-oauth-secret, déjà créé)
- doc : runbook « ajouter une app » complété (exemple Grafana concret +
  groupe lab-admins) et procédure SQL pour promouvoir un compte SSO admin
  Guacamole (appliquée à Alkatrazz)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 12:11:00 +02:00

182 lines
4.4 KiB
YAML

# kube-prometheus-stack — cluster Funk
# Ressources limitées pour compute-02/03 (8 GB RAM)
grafana:
initChownData:
enabled: false
grafana.ini:
database:
type: postgres
host: 192.168.10.1:5432
name: grafana
user: grafana
server:
# Requis pour construire le redirect_uri OAuth (LAN : grafana.lab.local)
root_url: http://grafana.lab.local
# SSO OIDC via Authentik (app « grafana » dans l'UI Authentik).
# auth_url = navigateur (auth.lab.local) ; token/api = serveur→serveur (Service
# interne, les pods ne résolvent pas lab.local). Le login local reste actif
# (break-glass : admin / adminPassword ci-dessous) — ne pas mettre disable_login_form.
auth.generic_oauth:
enabled: true
name: Authentik
client_id: grafana
client_secret: $__env{GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET}
scopes: openid profile email
auth_url: http://auth.lab.local/application/o/authorize/
token_url: http://authentik.auth.svc.cluster.local:9000/application/o/token/
api_url: http://authentik.auth.svc.cluster.local:9000/application/o/userinfo/
# Membre du groupe lab-admins → Admin, sinon Viewer
role_attribute_path: contains(groups[*], 'lab-admins') && 'Admin' || 'Viewer'
role_attribute_strict: false
allow_assign_grafana_admin: true
envFromSecrets:
- name: grafana-db-secret
- name: grafana-oauth-secret
ingress:
enabled: true
ingressClassName: traefik
hosts:
- grafana.lab.local
adminPassword: "funk-grafana"
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
memory: 1Gi
persistence:
enabled: true
storageClassName: nfs
size: 2Gi
prometheus:
ingress:
enabled: true
ingressClassName: traefik
hosts:
- prometheus.lab.local
paths:
- /
pathType: Prefix
prometheusSpec:
retention: 15d
retentionSize: "8GB"
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
memory: 1Gi
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: nfs
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 20Gi
# Scrape des nœuds hors cluster (storage-01, gpu-01)
additionalScrapeConfigs:
- job_name: storage-01
static_configs:
- targets: ['192.168.10.1:9100']
labels:
instance: storage-01
role: gateway
- job_name: gpu-01-node
static_configs:
- targets: ['192.168.10.20:9100']
labels:
instance: gpu-01
role: gpu
- job_name: llama-server-gpu
static_configs:
- targets: ['192.168.10.20:1234']
labels:
instance: gpu-01
model: qwen3-8b
type: gpu
alertmanager:
ingress:
enabled: true
ingressClassName: traefik
hosts:
- alertmanager.lab.local
paths:
- /
pathType: Prefix
alertmanagerSpec:
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 128Mi
config:
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'instance']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: hermes-monitor
routes:
# Watchdog (heartbeat interne kube-prometheus-stack) — silencé
- matchers:
- alertname = "Watchdog"
receiver: "null"
repeat_interval: 24h
receivers:
- name: "null"
- name: hermes-monitor
webhook_configs:
- url: 'http://192.168.10.1:9093/webhook'
send_resolved: true
- url: 'http://n8n.lab.local/webhook/alerts'
send_resolved: true
prometheusOperator:
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
memory: 256Mi
kube-state-metrics:
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 128Mi
nodeExporter:
resources:
requests:
cpu: 50m
memory: 32Mi
limits:
memory: 64Mi
prometheus-node-exporter:
extraArgs:
- --collector.rapl
# Désactiver etcd/scheduler monitoring (Talos — non accessible)
kubeEtcd:
enabled: false
kubeScheduler:
enabled: false
kubeControllerManager:
enabled: false
kubeProxy:
enabled: false