← Retour à l'accueil

Argos

Outil de monitoring multi-cluster Kubernetes, développé pour un usage personnel et interne.

Flask PostgreSQL / SQLAlchemy kubernetes-python flask-login flask-limiter flask-session

Le problème

Les outils existants pour piloter des clusters Kubernetes (Lens, k9s, Grafana) exposent la complexité de l'API Kubernetes telle quelle. En débutant sur Kubernetes, ce niveau de complexité ralentissait plus qu'il n'aidait.

Le besoin était une interface qui reste puissante mais qui absorbe cette complexité au lieu de l'exposer, utilisable aussi bien par un profil développeur que par un profil infra, technique ou non.

Options envisagées et écartées

Lens et k9s ont été écartés pour la même raison : ce sont des outils pensés pour quelqu'un qui maîtrise déjà Kubernetes, pas pour un utilisateur qui débute ou qui n'est pas technique.

Grafana a été écarté parce qu'il suppose une stack Prometheus et des exporters déjà en place à opérer en plus, ce qui représentait une infrastructure supplémentaire pour un besoin qui, au départ, restait personnel.

La décision a été de construire un outil dédié plutôt que d'adapter un outil existant, avec une philosophie d'interface proche de ce que fait Apple : simple en surface, mais puissante en dessous. L'objectif était qu'il reste utilisable aussi bien par un profil technique que non technique.

Architecture

                    +---------------+
   Navigateur -->  | Load Balancer |
                    +-------+-------+
                            |
        +----------+--------+--------+----------+
        |          |                 |          |
     Flask #1   Flask #2         Flask #3   Flask #4   (4 replicas)
        +----------+--------+--------+----------+
                            |
              +-------------+--------------+
              |                            |
        PostgreSQL                  Kubernetes API
   (sessions, historique            (multi-cluster,
    de scans, health score)          lecture / actions)
              |
              v
     Alerting (Discord, mail)

Décisions difficiles

Le passage à 4 replicas pour absorber la charge a provoqué des déconnexions permanentes. Les sessions étaient stockées en mémoire, propres à chaque process. Le load balancer, en répartissant les requêtes, envoyait régulièrement l'utilisateur vers une replica qui ne connaissait pas sa session.

Cela a déclenché une migration vers flask-session avec un backend PostgreSQL, suivie d'une migration du reste de l'état applicatif (historique de scans, health scoring) qui était lui aussi en mémoire.

En parallèle, le fichier principal de l'application (app.py) a été découpé de 1170 à 199 lignes, pour limiter la dette de code et faciliter les évolutions futures plutôt que de laisser un monolithe difficile à naviguer.

Vérification

La vérification a été manuelle : reconnexions répétées après la mise en place de flask-session avec PostgreSQL. Les déconnexions, systématiques avant le correctif, ont cessé.

Ce que je ferais autrement

Concevoir l'état partagé (sessions, historique de scans) en base dès le départ, plutôt que de découvrir le problème seulement au moment de scaler horizontalement.