Le rollout du dashboard prospection (#7) a déclenché un redémarrage de Grafana qui a révélé un problème latent : Grafana tourne en SQLite sur emptyDir (aucun PVC) → il rejoue toute la migration du schéma à chaque démarrage de pod, ce qui dépasse ~160 s sur Raspberry Pi. La livenessProbe (initialDelay 60 s + 10×10 s) tuait donc Grafana en pleine migration → le nouveau pod CrashLoop (RESTARTS qui grimpe, jamais Ready).
Pas de coupure : le Service ne route que vers le pod Ready, donc l'ancien pod a continué de servir. Mais le rollout restait bloqué et tout futur redémarrage aurait planté.
Fix
startupProbe (jusqu'à ~10 min) : la liveness n'est armée qu'après le démarrage → les migrations ont le temps d'aboutir.
livenessProbe.failureThreshold 10 → 60 : filet de sécurité si le chart n'expose pas startupProbe.
Fix pérenne possible (hors scope) : DB Grafana persistante (PVC) ou externe (postgres du lab) → plus de migration complète à chaque démarrage.
Validation
YAML OK (startupProbe.failureThreshold=60, livenessProbe.failureThreshold=60).
Après merge : sync ArgoCD → nouveau pod Grafana migre sans être tué → Ready → dashboard « Prospection » chargé.
## Incident
Le rollout du dashboard prospection ([#7](https://gitea.arcodange.lab/arcodange-org/tools/pulls/7)) a déclenché un redémarrage de Grafana qui a **révélé un problème latent** : Grafana tourne en **SQLite sur `emptyDir`** (aucun PVC) → il rejoue **toute la migration du schéma à chaque démarrage de pod**, ce qui dépasse ~160 s sur Raspberry Pi. La `livenessProbe` (initialDelay 60 s + 10×10 s) tuait donc Grafana **en pleine migration** → le nouveau pod **CrashLoop** (RESTARTS qui grimpe, jamais `Ready`).
Pas de coupure : le Service ne route que vers le pod *Ready*, donc l'ancien pod a continué de servir. Mais le rollout restait bloqué et tout futur redémarrage aurait planté.
## Fix
- **`startupProbe`** (jusqu'à ~10 min) : la liveness n'est armée qu'après le démarrage → les migrations ont le temps d'aboutir.
- **`livenessProbe.failureThreshold` 10 → 60** : filet de sécurité si le chart n'expose pas `startupProbe`.
Fix pérenne possible (hors scope) : DB Grafana persistante (PVC) ou externe (postgres du lab) → plus de migration complète à chaque démarrage.
## Validation
- YAML OK (`startupProbe.failureThreshold=60`, `livenessProbe.failureThreshold=60`).
- Après merge : sync ArgoCD → nouveau pod Grafana migre sans être tué → `Ready` → dashboard « Prospection » chargé.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Grafana tourne en SQLite sur emptyDir → migration complète du schéma à chaque
démarrage de pod, > 160 s sur Raspberry Pi. La liveson (initialDelay 60 + 10×10s)
tuait Grafana en pleine migration → CrashLoop du nouveau pod à chaque rollout
(révélé par le rollout du dashboard prospection). Ajoute une startupProbe (~10 min)
et relève failureThreshold de la liveness (filet si le chart n'expose pas startupProbe).
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Incident
Le rollout du dashboard prospection (#7) a déclenché un redémarrage de Grafana qui a révélé un problème latent : Grafana tourne en SQLite sur
emptyDir(aucun PVC) → il rejoue toute la migration du schéma à chaque démarrage de pod, ce qui dépasse ~160 s sur Raspberry Pi. LalivenessProbe(initialDelay 60 s + 10×10 s) tuait donc Grafana en pleine migration → le nouveau pod CrashLoop (RESTARTS qui grimpe, jamaisReady).Pas de coupure : le Service ne route que vers le pod Ready, donc l'ancien pod a continué de servir. Mais le rollout restait bloqué et tout futur redémarrage aurait planté.
Fix
startupProbe(jusqu'à ~10 min) : la liveness n'est armée qu'après le démarrage → les migrations ont le temps d'aboutir.livenessProbe.failureThreshold10 → 60 : filet de sécurité si le chart n'expose passtartupProbe.Fix pérenne possible (hors scope) : DB Grafana persistante (PVC) ou externe (postgres du lab) → plus de migration complète à chaque démarrage.
Validation
startupProbe.failureThreshold=60,livenessProbe.failureThreshold=60).Ready→ dashboard « Prospection » chargé.🤖 Generated with Claude Code