تنفيذ نسخة احتياطية
هيّئ نسخًا احتياطية تلقائية لـ PostgreSQL لقواعد بيانات IBM Bob وتحقق من تشغيل مهام النسخ الاحتياطي بشكل صحيح.
استخدم هذا الإجراء لتكوين النسخ الاحتياطية التلقائية لـ PostgreSQL لقواعد بيانات IBM Bob. بعد تكوين النسخ الاحتياطية، يُنشئ المُشغِّل مهام النسخ الاحتياطي المجدوَلة ويديرها تلقائيًا.
قبل البدء
قبل تكوين النسخ الاحتياطية، تحقق من المتطلبات الأساسية التالية:
- فئة تخزين مدعومة متاحة في المجموعة.
- أسرار بيانات اعتماد قاعدة البيانات موجودة.
- سعة تخزين كافية مخصصة.
- مجموعات PostgreSQL تعمل وفي حالة صحية.
تكوين النسخ الاحتياطية وتفعيلها
أنشئ ConfigMap للنسخ الاحتياطي يُعرّف جدول النسخ الاحتياطي وسياسة الاستبقاء وتكوين التخزين ومجموعات قواعد البيانات المستهدفة.
يكتشف المُشغِّل تلقائيًا أي ConfigMap يحمل التسمية:
bob.ibm.com/backup-config: "true"أنشئ ملف التكوين:
apiVersion: v1
kind: ConfigMap
metadata:
name: bob-postgres-backup-config
namespace: <bob-instance-namespace>
labels:
bob.ibm.com/backup-config: "true" # Required
app.kubernetes.io/name: bob
app.kubernetes.io/component: postgres-backup
data:
config.yaml: |
# Backup schedule in cron format (UTC timezone)
schedule: "0 2 * * *"
# Storage class for backup PVCs
backupStorageClass: "nfs-storage"
# Number of backups to retain per cluster (default: 7)
retention: 7
# Size of backup PVC per cluster (default: 10Gi)
pvcSize: "10Gi"
# Optional: PostgreSQL image override
# If not specified, image is auto-detected from running clusters
# postgresImage: "icr.io/cpopen/ibm-postgresql:16.4"
# Clusters to back up
# If omitted, defaults to bob-db and bob-keycloak-db
clusters:
- name: bob-db
database: bob
secretName: bob-db-app
- name: bob-keycloak-db
database: app # Note: Keycloak database is named "app"
secretName: bob-keycloak-db-appطبّق ConfigMap:
oc apply -f backup-config.yamlفعّل إدارة النسخ الاحتياطي في المورد المخصص لـ Bob:
apiVersion: bob.ibm.com/v1beta1
kind: Bob
metadata:
name: bob-instance
namespace: <bob-instance-namespace>
spec:
postgresBackup:
enabled: true
suspend: falseيُرشد هذا الإعداد المُشغِّل إلى إنشاء موارد النسخ الاحتياطي وإدارتها تلقائيًا.
طبّق المورد المخصص المحدَّث:
oc apply -f bob-cr.yamlتحقق من أن المُشغِّل أنشأ بنية النسخ الاحتياطي المجدوَلة بنجاح.
افحص CronJobs:
oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupالمخرجات المتوقعة:
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افحص PVCs:
oc get pvc -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backupافحص ConfigMap لسكريبت النسخ الاحتياطي:
oc get configmap postgres-backup-script -n <bob-instance-namespace>افحص أحداث Bob CR:
oc describe bob bob-instance -n <bob-instance-namespace>توصي IBM بتشغيل نسخة احتياطية يدوية بعد التكوين الأولي. تُتيح نسخة احتياطية اختبارية التحقق من الاتصال والأذونات وتكوين التخزين وتنفيذ النسخ الاحتياطي قبل الاعتماد على النسخ الاحتياطية المجدوَلة.
أنشئ مهمة نسخ احتياطي لمرة واحدة من CronJob المُولَّد:
# Manually create a job from the CronJob
oc create job --from=cronjob/bob-db-backup-cronjob manual-backup-$(date +%s) -n <bob-instance-namespace>
# Monitor the job
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# View job logs
oc logs -n <bob-instance-namespace> job/manual-backup-<timestamp>بعد انتهاء النسخة الاحتياطية، تحقق من إنشاء ملفات النسخ الاحتياطي بنجاح.
تحقق مما يلي:
- اكتملت المهمة بنجاح.
- ملف النسخة الاحتياطية موجود.
- ملف بيانات الوصف موجود.
- حجم النسخة الاحتياطية منطقي.
- لا توجد أخطاء في سجلات المهمة.
# Check job status
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# View backup logs
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup --tail=50
# Access backup files
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"
}
}]
}
}'
# Inside the pod:
ls -lh /backups/bob-db/
cat /backups/bob-db/backup_bob_*.sql.gz.metaتُنتج نسخة احتياطية ناجحة مخرجات مشابهة للتالي:
==========================================
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
==========================================معاملات التكوين
| المعامل | مطلوب | الافتراضي | الوصف |
|---|---|---|---|
schedule | نعم | — | تعبير جدول cron (بتوقيت UTC). |
backupStorageClass | نعم | — | فئة التخزين لـ PVCs الخاصة بالنسخ الاحتياطية. |
retention | لا | 7 | عدد النسخ الاحتياطية المُبقاة لكل مجموعة. |
pvcSize | لا | 10Gi | حجم PVC لكل مجموعة. |
postgresImage | لا | مكتشف تلقائيًا | صورة PostgreSQL لمهام النسخ الاحتياطي. |
clusters | لا | المجموعات الافتراضية | قائمة المجموعات المراد نسخها احتياطيًا. |
إرشادات تحديد حجم التخزين
لحساب التخزين المطلوب لكل مجموعة:
Required size = (database size × 0.3) × retention × 1.5
Example:
- Database: 5 GB
- Compression: 0.3 (70% compression)
- Retention: 7 backups
- Safety factor: 1.5
Required: 5 × 0.3 × 7 × 1.5 = 15.75 GB ≈ 20 GB| حجم قاعدة البيانات | PVC الموصى به | الاستبقاء |
|---|---|---|
| أقل من 1 GB | 5 Gi | 7 |
| 1–5 GB | 10 Gi | 7 |
| 5–20 GB | 50 Gi | 7 |
| 20–50 GB | 100 Gi | 5 |
| أكبر من 50 GB | مخصص | 3–5 |