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

Zastosuj ConfigMap:

oc apply -f backup-config.yaml

Włą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: false

To ustawienie instruuje operatora, aby automatycznie tworzył zasoby kopii zapasowych i zarządzał nimi.

Zastosuj zaktualizowany zasób niestandardowy:

oc apply -f bob-cr.yaml

Sprawdź, czy operator pomyślnie utworzył zaplanowaną infrastrukturę kopii zapasowych.

Sprawdź CronJobs:

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

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

Sprawdź PVC:

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

Sprawdź 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.meta

Pomyś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

ParametrWymaganyWartość domyślnaOpis
scheduleTak—Wyrażenie harmonogramu cron (strefa czasowa UTC).
backupStorageClassTak—Klasa pamięci masowej dla PVC kopii zapasowych.
retentionNie7Liczba kopii zapasowych do zachowania na klaster.
pvcSizeNie10GiRozmiar PVC na klaster.
postgresImageNieAutomatycznie wykrywanyObraz PostgreSQL dla zadań tworzenia kopii zapasowych.
clustersNieDomyślne klastryLista 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 danychZalecany PVCRetencja
Poniżej 1 GB5 Gi7
1–5 GB10 Gi7
5–20 GB50 Gi7
20–50 GB100 Gi5
Powyżej 50 GBNiestandardowy3–5
Jak oceniasz ten temat?