Yedekleme gerçekleştirme

IBM Bob veritabanları için otomatik PostgreSQL yedeklemelerini yapılandırın ve yedekleme işlerinin düzgün çalıştığını doğrulayın.

IBM Bob veritabanları için otomatik PostgreSQL yedeklemelerini yapılandırmak üzere bu prosedürü kullanın. Yedeklemeler yapılandırıldıktan sonra operatör, zamanlanmış yedekleme işlerini otomatik olarak oluşturur ve yönetir.

Başlamadan önce

Yedeklemeleri yapılandırmadan önce aşağıdaki önkoşulları doğrulayın:

  • Kümede desteklenen bir storage class mevcuttur.
  • Veritabanı kimlik bilgisi secret'ları mevcuttur.
  • Yeterli depolama kapasitesi ayrılmıştır.
  • PostgreSQL kümeleri çalışır durumda ve sağlıklıdır.

Yedeklemeleri yapılandırın ve etkinleştirin

Yedekleme zamanlamasını, saklama ilkesini, depolama yapılandırmasını ve hedef veritabanı kümelerini tanımlayan bir yedekleme ConfigMap'i oluşturun.

Operatör, şu etiketle etiketlenmiş tüm ConfigMap'leri otomatik olarak bulur:

bob.ibm.com/backup-config: "true"

Yapılandırma dosyasını oluşturun:

apiVersion: v1
kind: ConfigMap
metadata:
  name: bob-postgres-backup-config
  namespace: <bob-instance-namespace>
  labels:
    bob.ibm.com/backup-config: "true"  # Gerekli
    app.kubernetes.io/name: bob
    app.kubernetes.io/component: postgres-backup
data:
  config.yaml: |
    # Cron formatında yedekleme zamanlaması (UTC saat dilimi)
    schedule: "0 2 * * *"

    # Yedekleme PVC'leri için storage class
    backupStorageClass: "nfs-storage"

    # Küme başına saklanacak yedekleme sayısı (varsayılan: 7)
    retention: 7

    # Küme başına yedekleme PVC boyutu (varsayılan: 10Gi)
    pvcSize: "10Gi"

    # İsteğe bağlı: PostgreSQL image geçersiz kılma
    # Belirtilmezse, çalışan kümelerden image otomatik olarak algılanır
    # postgresImage: "icr.io/cpopen/ibm-postgresql:16.4"

    # Yedeklenecek kümeler
    # Belirtilmezse, varsayılan olarak bob-db ve bob-keycloak-db kullanılır
    clusters:
      - name: bob-db
        database: bob
        secretName: bob-db-app
      - name: bob-keycloak-db
        database: app  # Not: Keycloak veritabanının adı "app"tir
        secretName: bob-keycloak-db-app

ConfigMap'i uygulayın:

oc apply -f backup-config.yaml

Bob özel kaynağında (custom resource) yedekleme yönetimini etkinleştirin:

apiVersion: bob.ibm.com/v1beta1
kind: Bob
metadata:
  name: bob-instance
  namespace: <bob-instance-namespace>
spec:
  postgresBackup:
    enabled: true
    suspend: false

Bu ayar, operatöre yedekleme kaynaklarını otomatik olarak oluşturmasını ve yönetmesini bildirir.

Güncellenen özel kaynağı uygulayın:

oc apply -f bob-cr.yaml

Operatörün zamanlanmış yedekleme altyapısını başarıyla oluşturduğunu doğrulayın.

CronJob'ları kontrol edin:

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

Beklenen çıktı:

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

PVC'leri kontrol edin:

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

Yedekleme script'i ConfigMap'ini kontrol edin:

oc get configmap postgres-backup-script -n <bob-instance-namespace>

Bob CR event'lerini kontrol edin:

oc describe bob bob-instance -n <bob-instance-namespace>

IBM, ilk yapılandırmadan sonra manuel bir yedekleme çalıştırmanızı önerir. Test amaçlı bir yedekleme, zamanlanmış yedeklemelere güvenmeden önce bağlantıyı, izinleri, depolama yapılandırmasını ve yedekleme yürütmesini doğrular.

Oluşturulan CronJob'tan tek seferlik bir yedekleme işi (job) oluşturun:

# CronJob'tan manuel olarak bir job oluşturun
oc create job --from=cronjob/bob-db-backup-cronjob manual-backup-$(date +%s) -n <bob-instance-namespace>

# Job'ı izleyin
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

# Job loglarını görüntüleyin
oc logs -n <bob-instance-namespace> job/manual-backup-<timestamp>

Yedekleme tamamlandıktan sonra, yedekleme dosyalarının başarıyla oluşturulduğunu doğrulayın.

Aşağıdakileri doğrulayın:

  • Job başarıyla tamamlandı.
  • Yedekleme dosyası mevcut.
  • Meta veri dosyası mevcut.
  • Yedekleme boyutu makul görünüyor.
  • Job loglarında hiçbir hata görünmüyor.
# Job durumunu kontrol edin
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

# Yedekleme loglarını görüntüleyin
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup --tail=50

# Yedekleme dosyalarına erişin
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"
        }
      }]
    }
  }'

# Pod içinde:
ls -lh /backups/bob-db/
cat /backups/bob-db/backup_bob_*.sql.gz.meta

Başarılı bir yedekleme şuna benzer bir çıktı üretir:

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

Yapılandırma parametreleri

ParametreGerekliVarsayılanAçıklama
scheduleEvet—Cron zamanlama ifadesi (UTC saat dilimi).
backupStorageClassEvet—Yedekleme PVC'leri için storage class.
retentionHayır7Küme başına saklanacak yedekleme sayısı.
pvcSizeHayır10GiKüme başına PVC boyutu.
postgresImageHayırOtomatik algılanırYedekleme işleri için PostgreSQL image'ı.
clustersHayırVarsayılan kümelerYedeklenecek kümelerin listesi.

Depolama boyutlandırma yönergeleri

Küme başına gereken depolama alanını hesaplamak için:

Gereken boyut = (veritabanı boyutu × 0.3) × saklama × 1.5

Örnek:
- Veritabanı: 5 GB
- Sıkıştırma: 0.3 (%70 sıkıştırma)
- Saklama (retention): 7 yedekleme
- Güvenlik faktörü: 1.5

Gereken: 5 × 0.3 × 7 × 1.5 = 15.75 GB ≈ 20 GB
Veritabanı boyutuÖnerilen PVCSaklama
1 GB'den az5 Gi7
1–5 GB10 Gi7
5–20 GB50 Gi7
20–50 GB100 Gi5
50 GB'den fazlaÖzel3–5
Bu konu nasıl?