Effectuer une sauvegarde

Configurez les sauvegardes automatiques PostgreSQL pour les bases de données IBM Bob et vérifiez que les tâches de sauvegarde s'exécutent correctement.

Utilisez cette procédure pour configurer les sauvegardes automatiques PostgreSQL pour les bases de données IBM Bob. Une fois les sauvegardes configurées, l'opérateur crée et gère automatiquement les tâches de sauvegarde planifiées.

Avant de commencer

Avant de configurer les sauvegardes, vérifiez les prérequis suivants :

  • Une classe de stockage prise en charge est disponible dans le cluster.
  • Les secrets contenant les identifiants de la base de données existent.
  • Une capacité de stockage suffisante est allouée.
  • Les clusters PostgreSQL sont en cours d'exécution et sains.

Configurer et activer les sauvegardes

Créez une ConfigMap de sauvegarde qui définit la planification de sauvegarde, la politique de rétention, la configuration du stockage et les clusters de bases de données cibles.

L'opérateur découvre automatiquement toute ConfigMap portant le label :

bob.ibm.com/backup-config: "true"

Créez le fichier de configuration :

apiVersion: v1
kind: ConfigMap
metadata:
  name: bob-postgres-backup-config
  namespace: <bob-instance-namespace>
  labels:
    bob.ibm.com/backup-config: "true"  # Obligatoire
    app.kubernetes.io/name: bob
    app.kubernetes.io/component: postgres-backup
data:
  config.yaml: |
    # Planification de sauvegarde au format cron (fuseau horaire UTC)
    schedule: "0 2 * * *"

    # Classe de stockage pour les PVC de sauvegarde
    backupStorageClass: "nfs-storage"

    # Nombre de sauvegardes à conserver par cluster (par défaut : 7)
    retention: 7

    # Taille du PVC de sauvegarde par cluster (par défaut : 10Gi)
    pvcSize: "10Gi"

    # Optionnel : Remplacement de l'image PostgreSQL
    # Si non spécifié, l'image est détectée automatiquement à partir des clusters en cours d'exécution
    # postgresImage: "icr.io/cpopen/ibm-postgresql:16.4"

    # Clusters à sauvegarder
    # Si omis, les valeurs par défaut sont bob-db et bob-keycloak-db
    clusters:
      - name: bob-db
        database: bob
        secretName: bob-db-app
      - name: bob-keycloak-db
        database: app  # Remarque : la base de données Keycloak est nommée "app"
        secretName: bob-keycloak-db-app

Appliquez la ConfigMap :

oc apply -f backup-config.yaml

Activez la gestion des sauvegardes dans la ressource personnalisée Bob :

apiVersion: bob.ibm.com/v1beta1
kind: Bob
metadata:
  name: bob-instance
  namespace: <bob-instance-namespace>
spec:
  postgresBackup:
    enabled: true
    suspend: false

Ce paramètre indique à l'opérateur de créer et de gérer automatiquement les ressources de sauvegarde.

Appliquez la ressource personnalisée mise à jour :

oc apply -f bob-cr.yaml

Vérifiez que l'opérateur a créé avec succès l'infrastructure de sauvegarde planifiée.

Vérifiez les CronJobs :

oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

Sortie attendue :

NAME                              SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
bob-db-backup-cronjob             0 2 * * *   False     0        <none>          1m
bob-keycloak-db-backup-cronjob    0 2 * * *   False     0        <none>          1m

Vérifiez les PVC :

oc get pvc -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

Vérifiez la ConfigMap du script de sauvegarde :

oc get configmap postgres-backup-script -n <bob-instance-namespace>

Vérifiez les événements de la CR Bob :

oc describe bob bob-instance -n <bob-instance-namespace>

IBM recommande d'exécuter une sauvegarde manuelle après la configuration initiale. Une sauvegarde de test valide la connectivité, les autorisations, la configuration du stockage et l'exécution de la sauvegarde avant de dépendre des sauvegardes planifiées.

Créez une tâche de sauvegarde ponctuelle à partir du CronJob généré :

# Créer manuellement un job à partir du CronJob
oc create job --from=cronjob/bob-db-backup-cronjob manual-backup-$(date +%s) -n <bob-instance-namespace>

# Surveiller le job
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

# Afficher les journaux du job
oc logs -n <bob-instance-namespace> job/manual-backup-<timestamp>

Une fois la sauvegarde terminée, vérifiez que les fichiers de sauvegarde ont été créés avec succès.

Vérifiez les points suivants :

  • Le job s'est terminé avec succès.
  • Le fichier de sauvegarde existe.
  • Le fichier de métadonnées existe.
  • La taille de la sauvegarde semble raisonnable.
  • Aucune erreur n'apparaît dans les journaux du job.
# Vérifier l'état du job
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

# Afficher les journaux de sauvegarde
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup --tail=50

# Accéder aux fichiers de sauvegarde
oc run backup-check -n <bob-instance-namespace> --image=busybox --rm -it --restart=Never \
  --overrides='{
    "spec": {
      "containers": [{
        "name": "backup-check",
        "image": "busybox",
        "command": ["sh"],
        "stdin": true,
        "tty": true,
        "volumeMounts": [{
          "name": "backup",
          "mountPath": "/backups"
        }]
      }],
      "volumes": [{
        "name": "backup",
        "persistentVolumeClaim": {
          "claimName": "bob-db-backup-pvc"
        }
      }]
    }
  }'

# À l'intérieur du pod :
ls -lh /backups/bob-db/
cat /backups/bob-db/backup_bob_*.sql.gz.meta

Une sauvegarde réussie produit une sortie similaire à la suivante :

==========================================
PostgreSQL Backup Script
==========================================
Cluster: bob-db
Database: bob
Timestamp: 20260902_020000
Backup file: /backups/bob-db/backup_bob_20260902_020000.sql.gz
Retention: 7 backups
==========================================
Starting pg_dump...
✓ Backup completed successfully
  Size: 1.2G
✓ Metadata file created
Cleaning up old backups...
  Current backup count: 7
✓ Cleanup completed
==========================================
✓ Backup process completed successfully
==========================================

Paramètres de configuration

ParamètreObligatoireValeur par défautDescription
scheduleOui—Expression de planification cron (fuseau horaire UTC).
backupStorageClassOui—Classe de stockage pour les PVC de sauvegarde.
retentionNon7Nombre de sauvegardes à conserver par cluster.
pvcSizeNon10GiTaille du PVC par cluster.
postgresImageNonDétecté automatiquementImage PostgreSQL pour les tâches de sauvegarde.
clustersNonClusters par défautListe des clusters à sauvegarder.

Directives de dimensionnement du stockage

Pour calculer le stockage requis par cluster :

Taille requise = (taille de la base de données × 0.3) × rétention × 1.5

Exemple :
- Base de données : 5 Go
- Compression : 0.3 (70 % de compression)
- Rétention : 7 sauvegardes
- Facteur de sécurité : 1.5

Requis : 5 × 0.3 × 7 × 1.5 = 15.75 Go ≈ 20 Go
Taille de la base de donnéesPVC recommandéRétention
Moins de 1 Go5 Gi7
1–5 Go10 Gi7
5–20 Go50 Gi7
20–50 Go100 Gi5
Supérieure à 50 GoPersonnalisé3–5
Comment trouvez-vous ce sujet ?