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-appAppliquez la ConfigMap :
oc apply -f backup-config.yamlActivez 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: falseCe 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.yamlVé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-backupSortie 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> 1mVérifiez les PVC :
oc get pvc -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupVé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.metaUne 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ètre | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|
schedule | Oui | — | Expression de planification cron (fuseau horaire UTC). |
backupStorageClass | Oui | — | Classe de stockage pour les PVC de sauvegarde. |
retention | Non | 7 | Nombre de sauvegardes à conserver par cluster. |
pvcSize | Non | 10Gi | Taille du PVC par cluster. |
postgresImage | Non | Détecté automatiquement | Image PostgreSQL pour les tâches de sauvegarde. |
clusters | Non | Clusters par défaut | Liste 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ées | PVC recommandé | Rétention |
|---|---|---|
| Moins de 1 Go | 5 Gi | 7 |
| 1–5 Go | 10 Gi | 7 |
| 5–20 Go | 50 Gi | 7 |
| 20–50 Go | 100 Gi | 5 |
| Supérieure à 50 Go | Personnalisé | 3–5 |