[infra] MLflow cassé par une reconstruction : les dépendances transitives ne sont pas épinglées #130
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
1 participant
Notifications
Due date
No due date set.
Depends on
#30 [infra] MLflow, registre de modèles
g2/enervision
Reference
g2/enervision#130
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Exigence couverte
ENF-09, EF-07
Épreuve servie
EC06 · IA et automatisation
Charge estimée
0,5 j.h
Ce qu'on veut obtenir
Remettre MLflow en service et empêcher que ça recommence.
Il est tombé le 3 septembre à 17 h 08, pendant le déploiement déclenché par la fusion vers
main, et il a fait échouer ce déploiement —wait: trueattend une pile saine, elle ne l'est jamais devenue.La cause n'est pas MLflow, c'est ce qui l'entoure.
infra/compose/mlflow/requirements.txtépinglemlflow==3.15.2,psycopg2-binaryetboto3— et le dit très bien : « une image reconstruite six semaines plus tard doit poser les mêmes octets ». Mais les dépendances transitives ne le sont pas. Le conteneur porte aujourd'huistarlette 1.6.0etanyio 4.15.0, tirés à la reconstruction, et incompatibles entre eux.Ce qui a déclenché la reconstruction : la pile
mlflowportebuild: truedansapp_stacks, et la boucle de démarrage passebuild: always. Chaque déploiement reconstruit donc l'image et rejoue la loterie des versions. Elle tournait « Up 21 hours (healthy) » ce matin avec les mêmes fichiers.Critères d'acceptation
healthy.pip freezede l'image qui marchait ou par des contraintes explicites surstarletteetanyio.docker compose build --no-cachepuis démarrage, deux fois.build: alwaysest tranché : soit il reste et les épinglages le rendent sûr, soit il passe àmissinget une reconstruction se demande explicitement. Le motif est écrit.main.Comment on le vérifie
Commande curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:5000/
Preuve docker ps montre ev-mlflow healthy
Preuve deux constructions successives donnent les mêmes versions de starlette et anyio
Hors périmètre
Le reste de la pile : PostgreSQL, MinIO, la supervision et le collecteur n'ont pas été touchés et tournent. Le déploiement a échoué sur ce seul point.
Le même risque existe pour la pile
postgres, qui porte aussibuild: true. Elle a survécu à la reconstruction, mais pour la même raison de chance.