Soixante conteneurs sur un seul serveur
Une seule machine bare-metal fait tourner des dizaines à des centaines de conteneurs Hoody. La déduplication KSM et BTRFS rend le coût marginal quasi nul.
Ajoute une entrée hoody-cron qui se déclenche cinq minutes avant le job de migration de 03:00. Elle curl l'URL des snapshots et marque l'artéfact 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 snapshots gèle. Aucun ne sait pour le job de migration qui tourne cinq minutes plus tard, et c'est tout l'intérêt.
# enregistre le job snapshot récurrent (setup 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 snapshots → 200 OK · snap-2026-05-04 created in 8s
L'entrée cron est une row dans une table Postgres quelque part chez Hoody. L'URL snapshots écrit un blob content-addressed dans le backend de stockage du container. Les deux sont durables, les deux sont versionnés, et aucun ne demande un processus long sur votre laptop.
Quatre moments, quatre URLs et un écart de cinq minutes entre le filet de sécurité et le changement. La migration finit avant le premier réveil de la plupart des ingénieurs.
Si l'étape 03 échoue, le rollback est `PATCH /snapshots/snap-2026-05-04` et te voilà à 02:55:08Z. La timeline d'audit ci-dessus est la même donnée, servie en JSON.
Pas le snapshot lui-même. La forme : un backup qui existe avant le changement, adressé 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 un backup ». Quand le backup est une entrée cron, vous ne peux 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 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 content-addressed et stockés en deltas. Un delta de 412 MB par-dessus un disque de base inchangé est ce que vous payez, et seulement pour la fenêtre de rétention de 7 jours. Les migrations réussies laissent presque aucune empreinte.
Ce à quoi ressemblait le runbook, et ce en quoi il s'effondre quand le snapshot est nommé pour la date du jour et adressable comme 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, prenez un backup » parce que le backup existe déjà.
Le plan de rollback est une URL que vous avez planifiée pour exister.
Le cargo-cult autour des backups pré-migration. Planifie le snapshot, dors avec la fenêtre de migration.
Le plan de rollback est une URL que vous avez planifiée pour exister.