
Soixante conteneurs sur un seul serveur
Une machine bare-metal exécute des dizaines à des centaines de conteneurs Hoody. La dédupplication KSM et BTRFS rend le coût marginal quasi nul.
Ajoutez une entrée hoody-cron qui se déclenche cinq minutes avant la tâche de migration de 03:00. Elle fait un curl sur l'URL des snapshots et marque l'artefact comme point de rollback. Si la migration échoue, vous restaurez en 30 secondes avec un seul PATCH.
{ "name": "snap-2026-05-04", "alias": "rollback-point", "created_at": "02:55:08Z" }
UNE NUIT, CINQ ÉVÉNEMENTS, ZÉRO ALERTE
Le service cron planifie un curl. Le service de snapshots fait le gel. Aucun ne sait pour la migration qui tourne cinq minutes plus tard, et c'est tout l'intérêt.
# enregistre la tâche de snapshot récurrente (mise en place unique) curl -X POST \ cron.containers.hoody.com/users/root/entries \ -H "Content-Type: application/json" \ -d '{ "schedule": "55 2 * * *", "command": "curl -X POST $SNAP_URL -d '{\"alias\":\"rollback-point\"}'", "comment": "pre-migration snapshot" }'
# ce que l'entrée cron curl chaque nuit à 02:55 UTC curl -X POST \ api.hoody.com/api/v1/containers/$ID/snapshots \ -H "Authorization: Bearer $TOKEN" \ -d '{"alias": "rollback-point", "expiry": 7}' # réponse du service de snapshots → 200 OK · snap-2026-05-04 created in 8s
L'entrée cron est une ligne dans une table Postgres quelque part chez Hoody. L'URL des snapshots écrit un blob adressé par contenu vers le backend de stockage du conteneur. Les deux sont durables, versionnés, et aucun ne nécessite un processus longue durée sur votre laptop.
Quatre moments, quatre URL, et un écart de cinq minutes entre le filet de sécurité et le changement. La migration termine avant la première alarme de la plupart des ingénieurs.
Si l'étape 03 échoue, le rollback est `PATCH /snapshots/snap-2026-05-04` et vous êtes de retour à 02:55:08Z. La chronologie d'audit ci-dessus, c'est la même donnée, servie en JSON.
Pas le snapshot lui-même. La forme : une sauvegarde qui existe avant le changement, adressée par une URL, avec un nom qui inclut la date du jour.
La plupart des post-mortems d'incident commencent par « on a oublié de prendre une sauvegarde ». Quand la sauvegarde est une entrée cron, vous ne pouvez pas oublier. Le snapshot de 02:55 est la première phrase du runbook, écrite à l'avance.
Restaurer snap-2026-05-04 est un seul appel HTTP contre api.hoody.com. Le conteneur revient à son état de 02:55:08Z en moins de 30 secondes. Pas de ticket, pas d'escalade d'astreinte, pas de « qui a la console AWS ».
Les snapshots sont adressés par contenu et stockés en deltas. Un delta de 412 Mo par-dessus un disque de base inchangé, c'est ce que vous payez, et seulement pour la fenêtre de rétention de 7 jours. Les migrations réussies laissent presque aucune trace.
À quoi ressemblait le runbook auparavant, et en quoi il s'effondre quand le snapshot est nommé pour la date du jour et adressable par une URL.
La nouvelle colonne à droite n'est pas un outil. C'est une phrase dans un runbook. La phrase ne commence pas par « d'abord, prendre une sauvegarde » parce que la sauvegarde existe déjà.
Le plan de rollback est une URL que vous avez planifiée pour exister.
Le culte autour des sauvegardes pré-migration. Planifiez le snapshot, dormez pendant la fenêtre de migration.
Le plan de rollback est une URL que vous avez planifiée pour exister.