Jalon : la chaîne IA en production, prévision et recommandations en cron #188
No reviewers
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!188
Loading…
Reference in a new issue
No description provided.
Delete branch "develop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
33 commits, 78 fichiers. La chaîne IA entre en production : le job de prévision et celui des recommandations tournent pour la première fois sur ce serveur.
Ce que ça pose
Vérifié plutôt que supposé, parce que ce sont les trois choses qui cassent un déploiement :
deps-services.pyréclame sont déjà installés sur le serveur, mlflow 3.16 et scikit-learn 1.9 compris ;public.recommandationqui contient une ligne, et sondefault ''puisdrop defaultest écrit pour ce cas ;postgresn'est plus recréé, contrairement au déploiement d'hier. C'est le retour de Gabriel sur le #176 : la base ne tombe plus à chaque fusion, seulesapietsupervisionsont recréées parce qu'elles seules portent des montages de fichiers.Ce qui entre
La chaîne IA. Prévision H+1 branchée sur le front (#185), job des recommandations sur la zone or (#175), cycle de vie en base (#164, #180), contrôle de rejouabilité sur le serveur (#181).
L'exploitation. Les conteneurs relisent enfin les fichiers du dépôt (#176) : Prometheus tournait depuis quatre jours avec la configuration du 3 septembre. La sauvegarde PostgreSQL redevient observable (#172), et son alerte cessera de se déclencher sur une absence de donnée. Tableau de bord Grafana de la chaîne de données (#112).
L'outillage. Un banc pouvait rendre un rouge sur du code sain (#174) :
producteur | grep -qsouspipefailrend 141 et le contrôle conclut « absent » sur ce qui est présent.Ce que ça ne fait pas
La #182 de Marvin n'entre pas : en conflit et rouge. Le tableau de bord servi reste celui d'hier, ce qui est cohérent puisque sa demande fait justement lire la zone or au front. Elle suivra dans un second déploiement.
À quoi s'attendre
Cinq à dix minutes, la pile
apiest recréée doncnpm cietvite buildrepassent.app_compose_wait_timeoutest à 600 s pour ça.Deux tâches n'ont jamais tourné sur ce serveur :
prevoir.shà :35 etrecommandations-hourly.shà :45. La première passe complète sera donc à 12h35 puis 12h45, et c'est là qu'on saura si la chaîne IA tient de bout en bout.Critères de sortie
failed=0, la pileapin'est pas sautéehttps://app.g2.enervision/api/v1/sitesrépond 200 et le tableau de bord se chargestatut,resolue_aetactionexistentprevoiretrecommandationscomprisesprobe_successrend une série pour l'API, la forge et Grafanaev_ops_sauvegarde_pg_dernier_resultatremonte dans Prometheuspublic.recommandationetpublic.previsionont bougéSi ça tourne mal
mainrevient à4689705et le déploiement se rejoue. Le socle est reconstructible, ça a été fait trois fois hier.Retour de Gabriel en relecture, et il a raison sur le point qui compte. recreate: always sur les cinq piles recréait le conteneur PostgreSQL DE PRODUCTION à chaque fusion. Or postgres ne porte que des montages de répertoire et de volume : sa composition le dit déjà en capitales, avec les deux inodes mesurés. Il n'a pas le défaut qu'on répare, et le couper pendant que la relève tourne à la minute, la zone argent à :00, la zone or à :17 et :27 et les recommandations à :37, c'est tomber au milieu d'une passe à chaque déploiement. Le drapeau vit maintenant dans app_stacks, à côté de build et env : api vrai monte services/api en lecture seule et lance uvicorn sans rechargement : sans recréation, un déploiement ne mettait jamais le nouveau code d'API en service supervision vrai monte le fichier de règles d'alerte de Grafana postgres faux montages de répertoire, déjà à l'abri minio faux monte init-buckets.sh sur un conteneur restart: no ; le recréer le RELANCE à chaque déploiement mlflow faux reconstruite de toute façon par build: true Et le remède d'un mot, que Gabriel a relevé et qui était dans le dépôt depuis avant cette demande : prometheus/ et blackbox/ sont montés en RÉPERTOIRES. Chacun ne contient qu'un fichier, le montage est strictement équivalent, la cause disparaît sans recréer quoi que ce soit. --web.enable-lifecycle redevient vrai : son commentaire promettait un rechargement à chaud qui relisait l'ancien inode. Le contrôle du banc porte sur le drapeau et non sur un littéral : il cherchait « recreate: always » et aurait rougi sur « recreate: "always" », qui est le même réglage. C'est la faute même que la #174 corrige à côté. Éprouvé en rouge sur trois défauts réintroduits un par un : postgres remis en recréation, l'API privée de la sienne, et la tâche qui ignore le drapeau. ansible-lint profil production, yamllint propre, trois playbooks valides, banc du rôle 16 contrôles, dix bancs verts.