Melakukan backup
Konfigurasikan backup PostgreSQL otomatis untuk database IBM Bob dan verifikasi bahwa pekerjaan backup berjalan dengan benar.
Gunakan prosedur ini untuk mengonfigurasi backup PostgreSQL otomatis untuk database IBM Bob. Setelah backup dikonfigurasi, operator secara otomatis membuat dan mengelola pekerjaan backup terjadwal.
Sebelum kamu mulai
Sebelum mengonfigurasi backup, verifikasi prasyarat berikut:
- Storage class yang didukung tersedia di cluster.
- Secret kredensial database sudah ada.
- Kapasitas penyimpanan yang cukup telah dialokasikan.
- Cluster PostgreSQL sedang berjalan dan sehat.
Konfigurasikan dan aktifkan backup
Buat ConfigMap backup yang mendefinisikan jadwal backup, kebijakan retensi, konfigurasi penyimpanan, dan cluster database target.
Operator secara otomatis menemukan ConfigMap mana pun yang diberi label dengan:
bob.ibm.com/backup-config: "true"Buat file konfigurasi:
apiVersion: v1
kind: ConfigMap
metadata:
name: bob-postgres-backup-config
namespace: <bob-instance-namespace>
labels:
bob.ibm.com/backup-config: "true" # Wajib
app.kubernetes.io/name: bob
app.kubernetes.io/component: postgres-backup
data:
config.yaml: |
# Jadwal backup dalam format cron (timezone UTC)
schedule: "0 2 * * *"
# Storage class untuk PVC backup
backupStorageClass: "nfs-storage"
# Jumlah backup yang disimpan per cluster (default: 7)
retention: 7
# Ukuran PVC backup per cluster (default: 10Gi)
pvcSize: "10Gi"
# Opsional: override image PostgreSQL
# Jika tidak ditentukan, image dideteksi otomatis dari cluster yang berjalan
# postgresImage: "icr.io/cpopen/ibm-postgresql:16.4"
# Cluster yang akan di-backup
# Jika dihilangkan, defaultnya adalah bob-db dan bob-keycloak-db
clusters:
- name: bob-db
database: bob
secretName: bob-db-app
- name: bob-keycloak-db
database: app # Catatan: database Keycloak diberi nama "app"
secretName: bob-keycloak-db-appTerapkan ConfigMap:
oc apply -f backup-config.yamlAktifkan manajemen backup dalam custom resource Bob:
apiVersion: bob.ibm.com/v1beta1
kind: Bob
metadata:
name: bob-instance
namespace: <bob-instance-namespace>
spec:
postgresBackup:
enabled: true
suspend: falsePengaturan ini menginstruksikan operator untuk membuat dan mengelola resource backup secara otomatis.
Terapkan custom resource yang diperbarui:
oc apply -f bob-cr.yamlVerifikasi bahwa operator berhasil membuat infrastruktur backup terjadwal.
Periksa CronJob:
oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupOutput yang diharapkan:
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> 1mPeriksa PVC:
oc get pvc -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupPeriksa ConfigMap skrip backup:
oc get configmap postgres-backup-script -n <bob-instance-namespace>Periksa event Bob CR:
oc describe bob bob-instance -n <bob-instance-namespace>IBM merekomendasikan menjalankan backup manual setelah konfigurasi awal. Backup uji coba memvalidasi konektivitas, izin, konfigurasi penyimpanan, dan eksekusi backup sebelum mengandalkan backup terjadwal.
Buat pekerjaan backup satu kali dari CronJob yang dihasilkan:
# Buat job secara manual dari CronJob
oc create job --from=cronjob/bob-db-backup-cronjob manual-backup-$(date +%s) -n <bob-instance-namespace>
# Pantau job
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# Lihat log job
oc logs -n <bob-instance-namespace> job/manual-backup-<timestamp>Setelah backup selesai, validasi bahwa file backup berhasil dibuat.
Verifikasi hal berikut:
- Job berhasil diselesaikan.
- File backup ada.
- File metadata ada.
- Ukuran backup tampak wajar.
- Tidak ada error yang muncul dalam log job.
# Periksa status job
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# Lihat log backup
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup --tail=50
# Akses file backup
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"
}
}]
}
}'
# Di dalam pod:
ls -lh /backups/bob-db/
cat /backups/bob-db/backup_bob_*.sql.gz.metaBackup yang berhasil menghasilkan output yang mirip dengan berikut:
==========================================
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
==========================================Parameter konfigurasi
| Parameter | Wajib | Default | Deskripsi |
|---|---|---|---|
schedule | Ya | — | Ekspresi jadwal cron (timezone UTC). |
backupStorageClass | Ya | — | Storage class untuk PVC backup. |
retention | Tidak | 7 | Jumlah backup yang disimpan per cluster. |
pvcSize | Tidak | 10Gi | Ukuran PVC per cluster. |
postgresImage | Tidak | Dideteksi otomatis | Image PostgreSQL untuk pekerjaan backup. |
clusters | Tidak | Cluster default | Daftar cluster yang akan di-backup. |
Panduan ukuran penyimpanan
Untuk menghitung kapasitas penyimpanan yang diperlukan per cluster:
Ukuran yang diperlukan = (ukuran database × 0,3) × retensi × 1,5
Contoh:
- Database: 5 GB
- Kompresi: 0,3 (70% kompresi)
- Retensi: 7 backup
- Faktor keamanan: 1,5
Diperlukan: 5 × 0,3 × 7 × 1,5 = 15,75 GB ≈ 20 GB| Ukuran database | PVC yang direkomendasikan | Retensi |
|---|---|---|
| Kurang dari 1 GB | 5 Gi | 7 |
| 1–5 GB | 10 Gi | 7 |
| 5–20 GB | 50 Gi | 7 |
| 20–50 GB | 100 Gi | 5 |
| Lebih dari 50 GB | Kustom | 3–5 |