How-To
Configure Automated Backups¶
Configure automated backup schedules and retention policies for CNPG PostgreSQL clusters.
Overview¶
CloudNativePG provides automated backups using Barman Cloud to S3-compatible storage. Backups include:
Full backups (complete database snapshot)
WAL archiving (continuous backup for point-in-time recovery)
Configurable retention policies
Automated cleanup of old backups
Configure Backup Schedule¶
Backups are configured in the Cluster spec:
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: myapp-postgres
namespace: myapp
spec:
# ... other spec fields ...
backup:
barmanObjectStore:
destinationPath: s3://myapp-postgres-backup-kup6s/
endpointURL: https://fsn1.your-objectstorage.com
s3Credentials:
accessKeyId:
name: myapp-postgres-s3-creds
key: ACCESS_KEY_ID
secretAccessKey:
name: myapp-postgres-s3-creds
key: SECRET_ACCESS_KEY
wal:
compression: gzip # Compress WAL files
encryption: AES256 # Encrypt WAL files
data:
compression: gzip # Compress backup files
encryption: AES256 # Encrypt backup files
retentionPolicy: "30d" # Keep backups for 30 days
target: prefer-standby # Backup from standby to reduce primary load
Scheduled Backups¶
Create a ScheduledBackup resource for automated backups:
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
name: myapp-postgres-daily-backup
namespace: myapp
spec:
cluster:
name: myapp-postgres
schedule: "0 2 * * *" # Daily at 2 AM UTC
backupOwnerReference: self # Backup lifecycle tied to ScheduledBackup
immediate: true # Take first backup immediately
Common schedules:
Daily:
0 2 * * *Every 6 hours:
0 */6 * * *Weekly:
0 2 * * 0
Verify Backup Configuration¶
Check backup status:
# List backups
kubectl get backup -n myapp
# Check scheduled backup status
kubectl get scheduledbackup -n myapp
# Check backup details
kubectl describe backup <backup-name> -n myapp
Monitor Backup Jobs¶
View backup job logs:
# List backup jobs
kubectl get jobs -n myapp -l cnpg.io/cluster=myapp-postgres
# View job logs
kubectl logs -n myapp job/<job-name>
Troubleshooting¶
Backup Job Failing¶
Check S3 connectivity:
# Test S3 credentials
kubectl exec -it myapp-postgres-1 -n myapp -- \
barman-cloud-wal-archive --test s3://myapp-postgres-backup-kup6s/
WAL Archiving Issues¶
Check WAL archive status:
kubectl exec -it myapp-postgres-1 -n myapp -- \
psql -U postgres -c "SELECT * FROM pg_stat_archiver;"