Wykonywanie kopii zapasowej
Skonfiguruj automatyczne kopie zapasowe PostgreSQL dla baz danych IBM Bob i sprawdź, czy zadania tworzenia kopii zapasowych działają poprawnie.
Użyj tej procedury, aby skonfigurować automatyczne kopie zapasowe PostgreSQL dla baz danych IBM Bob. Po skonfigurowaniu kopii zapasowych operator automatycznie tworzy i zarządza zaplanowanymi zadaniami tworzenia kopii zapasowych.
Zanim rozpoczniesz
Przed skonfigurowaniem kopii zapasowych sprawdź następujące wymagania wstępne:
- W klastrze jest dostępna obsługiwana klasa pamięci masowej (storage class).
- Istnieją sekrety z danymi uwierzytelniającymi bazy danych.
- Przydzielono wystarczającą pojemność pamięci masowej.
- Klastry PostgreSQL działają i są w dobrym stanie (healthy).
Konfiguracja i włączanie kopii zapasowych
Utwórz ConfigMap kopii zapasowej, który definiuje harmonogram kopii zapasowych, zasady retencji, konfigurację pamięci masowej oraz docelowe klastry baz danych.
Operator automatycznie wykrywa każdy ConfigMap oznaczony etykietą:
bob.ibm.com/backup-config: "true"Utwórz plik konfiguracyjny:
apiVersion: v1
kind: ConfigMap
metadata:
name: bob-postgres-backup-config
namespace: <bob-instance-namespace>
labels:
bob.ibm.com/backup-config: "true" # Wymagane
app.kubernetes.io/name: bob
app.kubernetes.io/component: postgres-backup
data:
config.yaml: |
# Harmonogram kopii zapasowych w formacie cron (strefa czasowa UTC)
schedule: "0 2 * * *"
# Klasa pamięci masowej dla PVC kopii zapasowych
backupStorageClass: "nfs-storage"
# Liczba kopii zapasowych do zachowania na klaster (domyślnie: 7)
retention: 7
# Rozmiar PVC kopii zapasowej na klaster (domyślnie: 10Gi)
pvcSize: "10Gi"
# Opcjonalnie: nadpisanie obrazu PostgreSQL
# Jeśli nie określono, obraz jest automatycznie wykrywany z działających klastrów
# postgresImage: "icr.io/cpopen/ibm-postgresql:16.4"
# Klastry do utworzenia kopii zapasowej
# Jeśli pominięto, wartości domyślne to bob-db i bob-keycloak-db
clusters:
- name: bob-db
database: bob
secretName: bob-db-app
- name: bob-keycloak-db
database: app # Uwaga: baza danych Keycloak nosi nazwę "app"
secretName: bob-keycloak-db-appZastosuj ConfigMap:
oc apply -f backup-config.yamlWłącz zarządzanie kopiami zapasowymi w zasobie niestandardowym Bob:
apiVersion: bob.ibm.com/v1beta1
kind: Bob
metadata:
name: bob-instance
namespace: <bob-instance-namespace>
spec:
postgresBackup:
enabled: true
suspend: falseTo ustawienie instruuje operatora, aby automatycznie tworzył zasoby kopii zapasowych i zarządzał nimi.
Zastosuj zaktualizowany zasób niestandardowy:
oc apply -f bob-cr.yamlSprawdź, czy operator pomyślnie utworzył zaplanowaną infrastrukturę kopii zapasowych.
Sprawdź CronJobs:
oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupOczekiwane dane wyjściowe:
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> 1mSprawdź PVC:
oc get pvc -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupSprawdź ConfigMap skryptu kopii zapasowej:
oc get configmap postgres-backup-script -n <bob-instance-namespace>Sprawdź zdarzenia Bob CR:
oc describe bob bob-instance -n <bob-instance-namespace>IBM zaleca uruchomienie ręcznej kopii zapasowej po początkowej konfiguracji. Testowa kopia zapasowa weryfikuje łączność, uprawnienia, konfigurację pamięci masowej i wykonanie kopii zapasowej przed poleganiem na zaplanowanych kopiach zapasowych.
Utwórz jednorazowe zadanie kopii zapasowej z wygenerowanego CronJob:
# Ręcznie utwórz zadanie z CronJob
oc create job --from=cronjob/bob-db-backup-cronjob manual-backup-$(date +%s) -n <bob-instance-namespace>
# Monitoruj zadanie
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# Wyświetl dzienniki zadania
oc logs -n <bob-instance-namespace> job/manual-backup-<timestamp>Po zakończeniu tworzenia kopii zapasowej sprawdź, czy pliki kopii zapasowej zostały pomyślnie utworzone.
Zweryfikuj następujące elementy:
- Zadanie zakończyło się pomyślnie.
- Plik kopii zapasowej istnieje.
- Plik metadanych istnieje.
- Rozmiar kopii zapasowej wygląda na rozsądny.
- W dziennikach zadania nie ma błędów.
# Sprawdź status zadania
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# Wyświetl dzienniki kopii zapasowej
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup --tail=50
# Uzyskaj dostęp do plików kopii zapasowej
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"
}
}]
}
}'
# Wewnątrz poda:
ls -lh /backups/bob-db/
cat /backups/bob-db/backup_bob_*.sql.gz.metaPomyślne utworzenie kopii zapasowej generuje dane wyjściowe podobne do poniższych:
==========================================
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
==========================================Parametry konfiguracji
| Parametr | Wymagany | Wartość domyślna | Opis |
|---|---|---|---|
schedule | Tak | — | Wyrażenie harmonogramu cron (strefa czasowa UTC). |
backupStorageClass | Tak | — | Klasa pamięci masowej dla PVC kopii zapasowych. |
retention | Nie | 7 | Liczba kopii zapasowych do zachowania na klaster. |
pvcSize | Nie | 10Gi | Rozmiar PVC na klaster. |
postgresImage | Nie | Automatycznie wykrywany | Obraz PostgreSQL dla zadań tworzenia kopii zapasowych. |
clusters | Nie | Domyślne klastry | Lista klastrów do utworzenia kopii zapasowej. |
Wskazówki dotyczące rozmiarowania pamięci masowej
Aby obliczyć wymaganą pamięć masową na klaster:
Wymagany rozmiar = (rozmiar bazy danych × 0.3) × retencja × 1.5
Przykład:
- Baza danych: 5 GB
- Kompresja: 0.3 (70% kompresji)
- Retencja: 7 kopii zapasowych
- Współczynnik bezpieczeństwa: 1.5
Wymagane: 5 × 0.3 × 7 × 1.5 = 15.75 GB ≈ 20 GB| Rozmiar bazy danych | Zalecany PVC | Retencja |
|---|---|---|
| Poniżej 1 GB | 5 Gi | 7 |
| 1–5 GB | 10 Gi | 7 |
| 5–20 GB | 50 Gi | 7 |
| 20–50 GB | 100 Gi | 5 |
| Powyżej 50 GB | Niestandardowy | 3–5 |