Aller au contenu

Architecture Decision Records (ADR)

Trace pourquoi chaque choix de conception du cluster — pas le comment (couvert par les README/RUNBOOK), mais le contexte, l’alternative écartée et les conséquences assumées.

🗺️ Lecture par thème. Cet index est chronologique (un ADR = une décision datée, immuable). Pour une lecture par domaine (stockage, réseau, sécurité, plan de contrôle, plateforme/GitOps, conventions), voir les vues d’architecture qui agrègent et relient les ADR.

Format léger inspiré de Michael Nygard :

  • Contexte — ce qui a forcé une décision.
  • Décision — ce qui a été acté.
  • Statut — Accepted / Superseded by NNNN / Deprecated.
  • Conséquences — gain, prix à payer, garde-fous à connaître.
#TitreStatut
0001Réplication ×3 pour les workloads bloc (vs EC)Accepted
0002Control plane unique avec --control-plane-endpointAccepted
0003Pas de chiffrement Ceph — sécurité du réseau déléguéeAccepted
0004Erasure coding 2+1 réservé au datalakeAccepted
0005CRI = containerd.io depuis le dépôt DockerAccepted
0006Matrice de versions et politique de bumpAccepted
0007Hyperconvergence : control plane portant OSDsAccepted
0008metadataDevice NVMe unique — SPOF par nœud assuméAccepted
0009Pourquoi 4 nœuds ?Accepted
0010Dashboard Kubernetes en cluster-adminAccepted
0011Registry interne HTTP sans authentificationAccepted
0012RStudio sans authentification (DISABLE_AUTH=true)Accepted
0013Sauvegarde des données applicatives (VolumeSnapshots CSI)Accepted
0014Durcissement du plan de contrôle (kubeadm init nu)Accepted
0015Stratégie d’upgrade Kubernetes (in-place vs rebuild)Accepted
0016Observabilité (metrics-server maintenant, Prometheus plus tard)Accepted
0017Langage des scripts (bash / jq / Python / bats)Superseded by 0049
0018Rook-Ceph plutôt que LonghornAccepted
0019Durcissement réseau Cilium (WireGuard + Hubble)Accepted
0020Exposition réseau tout-Cilium (LB-IPAM + L2 + Gateway API)Accepted
0021cert-manager + CA interne (TLS de bordure)Accepted
0022Argo CD (GitOps applicatif)Accepted
0023Dépôt multi-topologies (plusieurs infra déclarées, une activée)Accepted
0024PostgreSQL managé via CloudNativePG (+ pgvector)Accepted
0025Sécurité active : chaos + attaques contrôlées (D/A/R)Accepted
0026Orchestration des pipelines via DagsterAccepted
0027Bootstrap paramétré multi-cluster (Cilium Cluster Mesh)Accepted
0028Store de lineage OpenLineage via MarquezAccepted
0029Toute page Markdown est atteignable depuis la docAccepted
0030Nomenclature des bancs et topologiesAccepted
0031Terrain d’exécution cloud ARM (cadrage)Accepted
0032OpenTofu pour le provisioning des VM cloudAccepted
0033Orchestration Ansible des addons plateforme DataOpsAccepted
0034La validation = un run e2e from-scratch (pas le lint)Accepted
0035Stratégie de bancs : fidélité vs vitesseAccepted
0036Backing S3 par topologie : SeaweedFS (léger) / RGW (prod)Accepted
0037Stratégie de merge : merge commit (préserver les références)Accepted
0038Lima seul banc local ; provisioning n’est plus un axeAccepted
0039Nomenclature des axes du catalogue (codes par valeur)Accepted
0040Stratégie terrains × topologies (quel terrain monte quoi)Accepted
0041Gouvernance & complétude DataOps (dbt, Airflow, catalogue) — cadrageAccepted
0042Fraîcheur des preuves de banc (garde-fou CI)Accepted
0043Contrat d’interface cluster → atlas (endpoints, SC, secrets)Accepted
0044Topologie du banc atlas (socle consommé, Gitea intra-banc)Accepted
0045Chemins d’installation du banc : couches, dépendances, tests associésAccepted
0046Corriger le code d’installation, pas l’état du clusterAccepted
0047Topologie ha-3cp : CP dédié, VIP kube-vip, etcd 2/3Accepted
0048Accès local développeur (URLs cliquables + secrets + .env)Accepted
0049Doctrine du choix d’outil par action (pondérée)Accepted
0050Modèle de reprise / transactionnalité d’un rôle AnsibleAccepted
0051Options natives Ansible (idempotence, check_mode, server-side, handlers)Accepted
0052Reproductibilité des résultats (principe-chapeau)Accepted
0053Isolation multi-cible : banc Lima et prod sur le même posteAccepted
0054Rollback par phase sur le banc (désinstallation ciblée, jetable)Accepted
0055ha-3cp hyperconvergé : 3 control planes sur 4 nœuds, promotion in-placeSuperseded by 0097
0056Modèle déclaratif unifié des topologies (un fichier décrit, Ansible converge)Accepted
0057Gouvernance documentaire : un ADR décide, un plan met en œuvre, une issue exécuteAccepted
0058Doctrine de l’audit : une grille permanente, des passages datésAccepted
0059Diátaxis : typologie des quatre modes de documentation + câblage inlineAccepted
0060Audit régulier du respect des conventions de gouvernanceAccepted
0061Posture d’adoption des bonnes pratiques (principe-chapeau)Accepted
0062Cultures d’ingénierie revendiquées (principe-chapeau)Accepted
0063ansible-runner pour la boucle « suggère → lance » (P5)Accepted
0064Longhorn comme option de stockage du catalogue (3ᵉ profil)Proposed
0065Variables d’environnement : intention vs état détectableAccepted
0066Rollback atomique : composants + graphe de dépendances uniqueAccepted
0067Workflows multi-agents consignés : 4ᵉ trace empiriqueSuperseded by 0078
0068Profil metrics : palier fin entre base et storeAccepted
0069topology.layers : déclaration explicite des couches (DAG, grain phase)Accepted
0070Renommer test/ en bench/ ; garder bootstrap/ à platAccepted
0071Exposition gateway en hostNetwork (80/443 sur l’IP du nœud)Superseded
0072cluster scale : ajuster les replicas au nombre de nœudsAccepted
0073Hubble UI : activer l’observabilité réseau (opt-in)Proposed
0074cluster discover : reconstruire un topology.yaml depuis un cluster réelAccepted
0075Kyverno CLI en CI : valider nos invariants de manifeste en statiqueProposed
0076cluster refresh : matérialiser une évolution voulue du réel dans la déclarationAccepted
0077cluster next : menu des couches montables (dépendances réelles vs convention)Accepted
0078Passages d’audit : une seule famille, la méthode est une propriétéAccepted
0079Découverte de l’appartenance réelle : socle commun health + removeAccepted
0080Notations externes & badges README : doctrine d’affichageAccepted
0081Socle d’exécution node-side : une brique node_exec, deux usages (discover, remove)Accepted
0082Suivi de modèles via MLflowProposed
0083layers source unique de l’ordre : presets en alias, plus de chemins nommés par défautAccepted
0084Sondes de lecture gatées par target_kind (isolation banc/prod, suite de 0053)Proposed
0085Preuves applicatives sur local-path par défaut ; Ceph validé sur installation seuleProposed
0086Code-location jouet du socle : pipeline Dagster minimal branché en permanenceAccepted
0087Property-based testing des fonctions pures de nestor (Hypothesis)Accepted
0088Signer les releases : tarball source + cosign keyless + provenance SLSAAccepted
0089Migration de la documentation : VitePress → Astro StarlightAccepted
0090nestor lit l’état réel d’un cluster prod (état = K8s, pas VMs)Accepted
0091Portail d’accès aux UI de la plateformeAccepted
0092Exposition des UI par hostPort/NodePort L4 (zéro DNS)Accepted
0093Cache partagé des flux atlas servi par CloudNativePG (pas de Redis)Accepted
0094Frontière de déploiement applicatif : qui orchestre, qui fournit (cluster ↔ atlas)Proposed
0095Build applicatif événementiel in-cluster : fabrique d’images et déploiement GitOps zéro-touchAccepted
0096Graphe de topologie Python figé, vérifié contre AnsibleAccepted
0097Moteur de chemin Python ; bash réduit aux artefacts node-sideAccepted
0098Source unique d’inventaire : nestor dérive l’inventaire, hosts.yaml suppriméProposed
0099Les axes du modèle de topologie : terrain, criticité, exposition, archiProposed
0100Périmètre OS & architecture : poste Unix, nœuds Linux, Windows → WSLAccepted
0101Migration de la zone grise bash → Python (bench/lima/ confort)Proposed