Applications
Plateforme
| Composant | Namespace | Fonction |
|---|---|---|
| Flux CD | flux-system |
Réconcilie Git vers Kubernetes |
| Traefik | kube-system |
Ingress HA : 3 réplicas, un sur chacun des trois control-plane, PDB 2 |
| cert-manager | cert-manager |
Certificats Let's Encrypt |
| KEDA + HTTP add-on | keda |
Autoscaling HTTP et réveil depuis zéro de Stirling-PDF |
| CloudNativePG | cnpg-system + notrecouple + plane + n8n + agent-runtime |
Opérateur PostgreSQL avec 2 réplicas de contrôleur ; data plane NotreCouple actif sur PostgreSQL 17.11 avec 3 instances et une Kustomization Flux dédiée. Plane et n8n possèdent chacun leur propre Cluster ; celui de n8n est à instance unique et épinglé sur le worker UK, donc sans haute disponibilité |
| CoreDNS | kube-system |
DNS interne du cluster |
| metrics-server | kube-system |
CPU/mémoire pour Kubernetes |
| Dagger Engine | dagger |
Backend CI K3s actif après #331/#345 ; garde egress enfant fail-closed validée runtime. Test des runs distants short/standard : 4 runs prioritaires sur vps-f0621bb1, puis seulement à saturation un run sur vps-7a702a91 et un sur vps-b49e4e6f ; CPU ≤70 % / RAM ≤80 % par cible, plafond global 6, FIFO au-delà ; 1 CPU / 1 GiB max par Job |
| CI Dispatcher | ci-dispatcher |
CI déportée validée E2E : GitHub -> Cloudflare Access ci.djayzone.com -> dispatcher -> K3s/Dagger -> Check GitHub. GitHub App opérationnelle (app_configured=true), PR path-aware depuis #401 ; le webhook GitHub App (/ci/v1/webhooks/github) est activé dans la policy GitOps et traite les événements signés sans utiliser GitHub Actions comme déclencheur normal ; rollback contrôlé par policy et soumission manuelle ; backend cloud RunPod activé uniquement pour runner=cloud explicite avec budget/timeout/teardown bornés. La qualification RunPod reste en cours tant qu'un lifecycle réel création -> exécution -> statut terminal -> teardown n'a pas été prouvé |
| n8n | n8n |
Orchestration du MVP agentique (#337) : événements, workflows, retries et dispatch sur n8n.lab.djayzone.com. L'état durable des tâches, leurs checkpoints et leurs leases sont portés par Task Runtime (agent-runtime) et exposés par task.*. Un OAuth2 Proxy GitHub sert de portail d'accès devant l'application, sauf sur /webhook* ; il ne remplace pas l'authentification interne de n8n. Épinglé sur le worker UK os-uk2 avec sa propre base et sans HA. L'archivage WAL et les sauvegardes PostgreSQL vers B2 sont actifs ; au 7 octobre 2026 les catalogues exposent une fenêtre de récupération et les backups quotidiens récents sont completed. n8n reste exclu comme dépendance runtime d'un produit |
| Agent Runtime / Task Runtime | agent-runtime |
Coordination durable des tâches multi-agents : état, checkpoints, résultats et leases via PostgreSQL CNPG. Runtime 2 réplicas, base 1 instance sur le worker UK ; non critique pour les produits et exploitable manuellement sans MCP. |
| ChatGPT browser relay | n8n |
Contrôleur HTTP léger permanent ; navigateurs à 0 au repos, réveil sur appel autorisé et veille après 15 min. Mode config déclenché à l’ouverture de la page locale via le port-forward habituel, puis arrêt avec Terminer ou après 20 min. Profil persistant et Secrets conservés ; aucune automatisation CAPTCHA/MFA. |
| Plane | plane |
Pilotage projet et roadmap sur plane.lab.djayzone.com, authentification native Plane ; runtime stabilisé après le bootstrap du 02/09/2026, outil non critique et jamais dépendance runtime d'un produit |
| Mail Gateway | mail-system |
Point de sortie SMTP interne commun. NotreCouple est activé avec provider dédié et identité de caller par token ; les credentials SMTP restent confinés dans mail-system |
| Hyundai Bluelink bridge | bluelink |
Bridge interne ClusterIP vers l'état et les commandes Hyundai Inster. Il expose santé, statut, position privée en cache, capacités et des commandes gardées consommées par le domaine vehicle.* du Gateway ; aucun Ingress public n'expose directement le bridge. |
| Cluster Operator MCP | cluster-observer |
Backend Kubernetes interne du Gateway. Le Gateway masque les primitives mutantes génériques et ne publie que les actions opérateur ciblées prévues par le contrat ; ce backend n'est jamais configuré directement auprès d’un consommateur externe. |
| MCP Gateway unifié | cluster-observer |
Point d’entrée MCP unique pour les agents. Le runtime expose actuellement 11 domaines actifs : ai.*, github.*, cluster.*, n8n.*, notrecouple.*, plane.*, slack.*, dagger.*, task.*, vehicle.* et gateway.*. cluster.* ajoute les wrappers ciblés deployments_restart et pods_kill sans exposer leurs primitives génériques ; vehicle.* porte les lectures et commandes Bluelink ; plane.* lit et écrit directement l’API Plane ; n8n.* administre et déclenche les workflows explicitement exposés ; task.* porte l’état durable et les leases ; slack.* passe par le pont interne slack-mcp. |
| Pont MCP Slack | slack-mcp |
Pont HTTP interne entre le domaine slack.* du Gateway et l’API Slack. Détient seul le jeton de bot ; expose la lecture des canaux/messages, l'envoi, les réponses de thread et la publication d'événements opérationnels dédupliqués. Slack reste un bus de communication, jamais une source de vérité durable. |
CI distante Dagger
La GitHub App envoie les événements au dispatcher, qui classe les fichiers modifiés et soumet les validations Dagger. Le compute est exécuté sur K3s, ou sur cloud uniquement après sélection explicite, et le résultat est publié via le Check GitHub dagger/<pipeline>.
Classification principale :
- CI Dispatcher ->
dispatcher; - Mail Gateway ->
mail-gateway; - Cluster Observer ->
cluster-observer-render; - WebWars ->
webwars; - NotreCouple code/manifests PROD/DEV ->
notrecouple(suite canonique avec PostgreSQL, rendus du produit et OAuth NotreCouple uniquement) ; - autre produit -> gate dédiée ou
product-<nom>(rendu et contrats de ce produit uniquement) ; - changements GitOps ->
gitops; - PR multi-produit -> un check indépendant par périmètre touché ;
- changement transverse,
.dagger/**ou inconnu ->cicomplet.
Le classifieur est issu de la base de confiance de la PR : le code de la PR ne peut pas désactiver ses propres contrôles. Le retour arrière du webhook se fait par la policy GitOps après qualification ; la variable historique DAGGER_REMOTE_CI_ENABLED ne constitue pas à elle seule un rollback complet du chemin GitHub App.
Observabilité
Retrait B2 : Thanos Query sert seulement les donnees locales Prometheus (3 jours, plafond 3 GB). L'archivage WAL et les backups B2 n8n, Plane et NotreCouple sont retires ; les relevés datés ci-dessus restent historiques. Voir le runbook de retrait.
| Composant | Namespace | Données |
|---|---|---|
| Prometheus | monitoring |
Séries temporelles, PVC 5 GiB |
| Grafana | monitoring |
1 réplica stateless en mode capacité PLAT-76, dashboards provisionnés, authentification via OAuth2 Proxy |
| kube-state-metrics | monitoring |
État des objets Kubernetes |
| node-exporter | monitoring |
Métriques des quatre nœuds Kubernetes |
| Gatus | status |
2 réplicas, contrôles internes et publics ; rollout lié à la révision Git blob de la configuration |
Interfaces et applications
| Application | Namespace | Réplicas | Exposition |
|---|---|---|---|
| Portail administrateur | admin-dashboard |
2 | SSO, admin.lab.djayzone.com |
| Portail de maintenance | maintenance |
1 contrôleur + 2 proxies | GitHub SSO, maintenance.lab.djayzone.com |
| OAuth2 Proxy | sso, monitoring, admin-dashboard, maintenance, stirling-pdf, notrecouple, n8n |
2 pour les interfaces critiques ; 1 pour Stirling-PDF, l'admin NotreCouple et n8n | Authentification GitHub ou Google selon l'application ; la DEV NotreCouple réutilise le middleware sso-github-sso du namespace sso. Devant n8n, le proxy est un portail d'accès et non la session applicative |
| Portfolio Jemimah | jemimah |
2 | jemimah.fr et www.jemimah.fr |
| Atelier Jemimah | jemimah |
1 pod, 2 conteneurs | Actif sur config.jemimah.fr, file SQLite persistante et sidecar MCP borné |
| Wiki | docs |
2 | docs.lab.djayzone.com |
| Stirling-PDF | stirling-pdf |
0 à 2 | SSO Google ; moteur lourd réveillé par KEDA HTTP, pdf.lab.djayzone.com |
Mon Couple V1 (1.5.0) |
moncouple |
0 web + 0 notifier | Retiré : rappels suspendus, PVC SQLite conservé et anciens domaines moncouple.jemimah.fr / moncouple.djayzone.com redirigés vers notrecouple.fr |
Notre Couple (1.1.1) |
notrecouple |
2 web + 0 à 3 overflow KEDA + 1 notifier + 1 admin + 1 OAuth2 Proxy admin + 2 maintenance ; PostgreSQL 3 instances | Application multi-couple PostgreSQL avec reminders planifiés ; notrecouple.fr pour l'application et admin.notrecouple.fr pour l'administration Google SSO |
| Notre Couple DEV | notrecouple-dev |
Socle DEV + PostgreSQL CNPG 1 instance | Overlay Alpine isolé sur notrecouple-dev.lab.djayzone.com derrière le SSO GitHub partagé ; données uniquement de test, aucun restore PROD ; depuis #664 la source Flux DEV dédiée suit directement main. L'ancien flux preview env/notrecouple-dev est désactivé en attente de redéfinition dans Plane NC-1 |
| WebWars | webwars |
0 jeu + 1 maintenance | Suspendu volontairement ; endpoint public maintenu avec une page d'information |
| Squash TM | squash-tm |
0 application + 1 maintenance | Suspendu volontairement ; PVC PostgreSQL conservé et endpoint public maintenu avec une page d'information |
Les anciens dossiers du dépôt situés hors de apps/ovh-primary ne sont pas synchronisés par le cluster actuel.
Services retirés
| Service | Date | Motif | Conséquence |
|---|---|---|---|
| Mon Couple V1 | 28 août 2026 | Remplacé par Notre Couple | Runtime web/notifier à 0, rappels suspendus, données SQLite conservées et anciens domaines redirigés vers notrecouple.fr |
| Headlamp | 21 août 2026 | Console Kubernetes redondante avec kubectl, K9s et le portail de maintenance |
Namespace, route, SSO dédié et contrôles Gatus supprimés par Flux |
| Whoami | 21 août 2026 | Outil de test devenu inutile en exploitation courante | Deux routes publiques et contrôles Gatus supprimés par Flux |
| AEON | 23 septembre 2026 | Source amont supprimée (fetch HTTP 404), service en Init:CrashLoopBackOff |
Namespace, Deployment, Service, Ingress, NetworkPolicy, Job et ConfigMap retirés par Flux. Aucune donnée serveur/PVC ; éventuelles sauvegardes IndexedDB restent dans les navigateurs, mais l'origine n'est plus servie. DNS dynamique : aucun enregistrement propre à AEON à supprimer ; le nom peut encore résoudre vers le cluster, sans route Traefik après suppression de l’Ingress. |
| NukeGrid | 2 octobre 2026 | Projet archivé hors du GitOps actif | Namespace/runtime retirés du cluster ; le projet public reste disponible pour forks et contributions |
| SIM.lab | 2 octobre 2026 | Projet archivé hors du GitOps actif | Namespace/runtime retirés du cluster ; le projet public reste disponible pour forks et contributions |
Squash TM n'est pas supprimé : application, proxy et PostgreSQL restent à zéro, le PVC PostgreSQL est conservé et une page de maintenance légère répond sur son endpoint public.