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-app

Terapkan ConfigMap:

oc apply -f backup-config.yaml

Aktifkan 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: false

Pengaturan ini menginstruksikan operator untuk membuat dan mengelola resource backup secara otomatis.

Terapkan custom resource yang diperbarui:

oc apply -f bob-cr.yaml

Verifikasi bahwa operator berhasil membuat infrastruktur backup terjadwal.

Periksa CronJob:

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

Output 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>          1m

Periksa PVC:

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

Periksa 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.meta

Backup 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

ParameterWajibDefaultDeskripsi
scheduleYa—Ekspresi jadwal cron (timezone UTC).
backupStorageClassYa—Storage class untuk PVC backup.
retentionTidak7Jumlah backup yang disimpan per cluster.
pvcSizeTidak10GiUkuran PVC per cluster.
postgresImageTidakDideteksi otomatisImage PostgreSQL untuk pekerjaan backup.
clustersTidakCluster defaultDaftar 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 databasePVC yang direkomendasikanRetensi
Kurang dari 1 GB5 Gi7
1–5 GB10 Gi7
5–20 GB50 Gi7
20–50 GB100 Gi5
Lebih dari 50 GBKustom3–5
Bagaimana topik ini?