
Ce guide sauvegarde et restaure une instance Pulp sans rien perdre, en conteneur podman comme sur Kubernetes. Public visé : administrateurs responsables de la continuité d'un dépôt d'artefacts. Prérequis : une instance Pulp en fonctionnement. Le point à comprendre avant tout : chez Pulp, les données sont réparties sur trois emplacements distincts, et sauvegarder l'un sans les autres donne une restauration cassée.
Beaucoup pensent que « tout est dans la base ». C'est faux, et cette erreur coûte cher le jour de la restauration. Comprendre où vivent les données est le préalable à toute stratégie de sauvegarde fiable.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Identifier les trois emplacements de données de Pulp.
- Sauvegarder une instance en conteneur (base, artefacts, clés).
- Restaurer dans le bon ordre pour éviter les liens morts.
- Automatiser la sauvegarde et la restauration sur Kubernetes.
Où vivent les données : trois emplacements, pas un
Section intitulée « Où vivent les données : trois emplacements, pas un »Pulp ne stocke pas tout au même endroit. Une sauvegarde complète doit couvrir les trois :
| Emplacement | Contenu | Sans lui, à la restauration |
|---|---|---|
| PostgreSQL | Métadonnées : dépôts, versions, publications, distributions, tâches, RBAC | Plus aucune structure : les artefacts existent mais rien ne sait les servir |
File storage (/var/lib/pulp/media, ou objet S3) | Les artefacts eux-mêmes (binaires, adressés par sha256) | La base pointe vers des fichiers absents : liens morts |
Clés de chiffrement (/etc/pulp/certs) | La clé qui chiffre les champs sensibles (identifiants des remotes) et le secret key | Les identifiants chiffrés sont irrécupérables |
La base contient donc uniquement des métadonnées. Les binaires vivent séparément, sur un système de fichiers ou un stockage objet. Redis, lui, ne sert que de file de tâches éphémère et n'a pas besoin d'être sauvegardé.
Sauvegarder une instance en conteneur
Section intitulée « Sauvegarder une instance en conteneur »En déploiement podman, les trois emplacements sont des volumes montés. La sauvegarde consiste à figer la base et à archiver les volumes.
-
Dumper la base PostgreSQL. Le dump texte est portable :
Fenêtre de terminal podman exec pulp bash -c 'pg_dump -U pulp pulp' > pulp-db.sqlLa sortie doit produire un fichier de plusieurs milliers de lignes commençant par
-- PostgreSQL database dump. -
Archiver les artefacts depuis le volume de stockage :
Fenêtre de terminal podman exec pulp tar czf - -C /var/lib/pulp media > pulp-artifacts.tar.gz -
Copier les clés de chiffrement et de session :
Fenêtre de terminal podman exec pulp tar czf - -C /etc/pulp certs > pulp-certs.tar.gz
Ces trois fichiers (pulp-db.sql, pulp-artifacts.tar.gz, pulp-certs.tar.gz) forment une sauvegarde complète et cohérente. Stockez-les ensemble, chiffrés, hors de la machine Pulp.
Restaurer une instance en conteneur, dans le bon ordre
Section intitulée « Restaurer une instance en conteneur, dans le bon ordre »L'ordre de restauration n'est pas indifférent. On restaure les artefacts et les clés d'abord, la base en dernier.
-
Restaurer les clés et les artefacts dans les volumes de la nouvelle instance :
Fenêtre de terminal tar xzf pulp-certs.tar.gz -C /chemin/volume/etc-pulptar xzf pulp-artifacts.tar.gz -C /chemin/volume/var-lib-pulp -
Recharger la base :
Fenêtre de terminal podman exec -i pulp bash -c 'psql -U pulp pulp' < pulp-db.sql -
Vérifier que l'API répond et que les dépôts sont là :
Fenêtre de terminal pulp statuspulp file repository list
La logique : une base restaurée qui pointe vers un artefact absent casse le service, tandis qu'un artefact présent sans enregistrement en base est simplement orphelin (inoffensif, nettoyé plus tard par l'orphan cleanup). On privilégie donc les données immuables d'abord.
Sur Kubernetes : PulpBackup et PulpRestore
Section intitulée « Sur Kubernetes : PulpBackup et PulpRestore »L'operator automatise tout le cycle via deux custom resources. Vous décrivez une sauvegarde, l'operator capture base, artefacts et secrets vers une PVC dédiée ; une ressource de restauration recrée l'instance complète depuis cette PVC.
Sauvegarder avec PulpBackup
Section intitulée « Sauvegarder avec PulpBackup »-
Créer une PVC de destination pour la sauvegarde :
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: pulp-backup-claimnamespace: pulpspec:accessModes: ["ReadWriteOnce"]storageClassName: local-pathresources:requests:storage: 5Gi -
Déclarer la sauvegarde avec une ressource
PulpBackup:apiVersion: repo-manager.pulpproject.org/v1kind: PulpBackupmetadata:name: sauvegarde-pulpnamespace: pulpspec:deployment_name: pulpbackup_pvc: pulp-backup-claimFenêtre de terminal kubectl apply -f pulpbackup.yamlL'operator lance un job qui, une fois terminé, passe la condition
BackupCompleteàTrue. La PVC contient alors un dossier horodaté avec le dumppulp.db, lecr_object(la définition de l'instance) et tous les secrets, dontdb_fields_encryption_secret.yaml(la clé de chiffrement) etpulp_secret_key.yaml.
Restaurer avec PulpRestore
Section intitulée « Restaurer avec PulpRestore »La restauration se déclare de façon tout aussi déclarative. Elle recrée l'instance complète et recharge base et secrets depuis la PVC de sauvegarde.
apiVersion: repo-manager.pulpproject.org/v1kind: PulpRestoremetadata: name: restauration-pulp namespace: pulpspec: deployment_name: pulp backup_name: sauvegarde-pulp backup_pvc: pulp-backup-claimkubectl apply -f pulprestore.yamlLe champ backup_name est obligatoire : il désigne la ressource PulpBackup à restaurer. L'operator recrée alors la base, l'API, le contenu, les workers et le reverse proxy, puis recharge le dump et les secrets. Vérifiez ensuite que vos dépôts sont bien revenus :
kubectl -n pulp port-forward svc/pulp-api-svc 24817:24817 &curl -s -u admin:MOT_DE_PASSE \ http://localhost:24817/pulp/api/v3/repositories/file/file/À retenir
Section intitulée « À retenir »- Les données de Pulp vivent à trois endroits : base (métadonnées), file storage (artefacts), clés de chiffrement.
- La base ne contient pas les artefacts : les binaires sont sur un système de fichiers ou un stockage objet.
- La clé
database_fields.symmetric.keyest indispensable : sans elle, les identifiants chiffrés des remotes sont perdus. - En conteneur, on restaure artefacts et clés d'abord, base en dernier (les artefacts sont immuables et adressés par empreinte).
- Sur Kubernetes,
PulpBackup/PulpRestoreautomatisent le cycle complet ; la base doit être en PostgreSQL 15 pour que la sauvegarde fonctionne.