Aller au contenu
Développement medium

Sauvegarder et restaurer Pulp (conteneur et Kubernetes)

9 min de lecture

Logo Pulp

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.

  • 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 :

EmplacementContenuSans lui, à la restauration
PostgreSQLMétadonnées : dépôts, versions, publications, distributions, tâches, RBACPlus 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 keyLes 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é.

En déploiement podman, les trois emplacements sont des volumes montés. La sauvegarde consiste à figer la base et à archiver les volumes.

  1. 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.sql

    La sortie doit produire un fichier de plusieurs milliers de lignes commençant par -- PostgreSQL database dump.

  2. 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
  3. 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.

  1. 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-pulp
    tar xzf pulp-artifacts.tar.gz -C /chemin/volume/var-lib-pulp
  2. Recharger la base :

    Fenêtre de terminal
    podman exec -i pulp bash -c 'psql -U pulp pulp' < pulp-db.sql
  3. Vérifier que l'API répond et que les dépôts sont là :

    Fenêtre de terminal
    pulp status
    pulp 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.

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.

  1. Créer une PVC de destination pour la sauvegarde :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: pulp-backup-claim
    namespace: pulp
    spec:
    accessModes: ["ReadWriteOnce"]
    storageClassName: local-path
    resources:
    requests:
    storage: 5Gi
  2. Déclarer la sauvegarde avec une ressource PulpBackup :

    apiVersion: repo-manager.pulpproject.org/v1
    kind: PulpBackup
    metadata:
    name: sauvegarde-pulp
    namespace: pulp
    spec:
    deployment_name: pulp
    backup_pvc: pulp-backup-claim
    Fenêtre de terminal
    kubectl apply -f pulpbackup.yaml

    L'operator lance un job qui, une fois terminé, passe la condition BackupComplete à True. La PVC contient alors un dossier horodaté avec le dump pulp.db, le cr_object (la définition de l'instance) et tous les secrets, dont db_fields_encryption_secret.yaml (la clé de chiffrement) et pulp_secret_key.yaml.

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/v1
kind: PulpRestore
metadata:
name: restauration-pulp
namespace: pulp
spec:
deployment_name: pulp
backup_name: sauvegarde-pulp
backup_pvc: pulp-backup-claim
Fenêtre de terminal
kubectl apply -f pulprestore.yaml

Le 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 :

Fenêtre de terminal
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/
  • 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.key est 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 / PulpRestore automatisent le cycle complet ; la base doit être en PostgreSQL 15 pour que la sauvegarde fonctionne.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn