Menyusun strategi backup dan disaster recovery yang seimbang: menetapkan RPO/RTO realistis, membedakan backup database transaksional dan file/konten, memakai Velero untuk workload dan plugin Restic/Kopia untuk data aplikasi, hingga verifikasi restore berkala.

GitOps telah menjaga konfigurasi (episode 23). Episode 24 membahas sisi data: backup dan DR scope — memastikan seluruh isi storage bisa dipulihkan saat terjadi bencana, dengan RPO/RTO yang jujur.
Mengapa penting? Storage yang hebat (Ceph) tetap bisa kehilangan data jika tidak ada backup di luar cluster: human error menghapus PVC, cluster tidak sengaja di-destroy, bencana korupsi pool. Velero + backup file + verifikasi = jaring pengaman terakhir.
| Data | Kategori | Strategi |
|---|---|---|
| PostgreSQL (DB) | Transaksional, kritis | PITR atau backup terencana + RBD snapshots |
| Media aplikasi (CephFS) | Penting, berubah | Velero file backup (Restic/Kopia), jadwal harian |
| Object (RGW) | Besar, arsip | RGW lifecycle / sync ke storage lain |
RPO "0 menit" membutuhkan teknik tertentu (stretch, episode 21). RPO realistis untuk backup file: interval jadwal (mis. 6 jam). Verifikasi bukan hanya mengatur — uji restore menguji klaim.
velero install \
--provider aws \
--bucket velero-backups \
--secret-file ./credentials \
--backup-location-config region=us-east-1,s3ForcePathStyle=true,s3Url=https://rook-ceph-rgw.my-storage:8080 \
--use-volume-snapshots=false \
--use-resticCatatan: file media bisa di-backup ke object store (RGW) — Velero menyimpan blobs di bucket.
velero backup create laravel-backup \
--include-namespaces laravel \
--include-resources pvc,deploy,configmap,secret,service,ingressvelero restore create --from-backup laravel-backup \
--namespace-mappings laravel:laravel-restoredBackup blok (RBD snapshot/velero volume snapshot) untuk DB transaksional bisa membuat data tidak konsisten jika file didapat saat WAL sedang ditulis. Strategi yang benar:
pg_basebackup + WAL archive.# crontab di pod postgres
pgbackrest --stanza=main backup --type=incrKonfigurasi: repo path = RGW S3 (endpoint) — hasilnya ada di bucket, bukan hanya di disk node.
Untuk file media (uploads, galeri):
---
apiVersion: velero.io/v1
kind: Backup
metadata:
name: laravel-media
spec:
includedNamespaces: [laravel]
includedResources: [PersistentVolumeClaim]Restic aktif di node — file dibaca & di-copy ke bucket setiap jadwal.Ide bagus: simpan backup file di klaster lain/RGW berbeda — jangan backup di klaster yang sama (data backup ikut hilang saat bencana).
kubectl -n laravel-restored get pvc
kubectl -n laravel-restored exec deploy/laravel -- ls -la storage/appMelebihi sekadar "file ada" — jalankan aplikasi & verifikasi login/upload.
Warning
Backup yang tidak pernah di-restore adalah berkas yang belum terbukti. Kegagalan tersembunyi (corrupt blob, wrong S3 endpoint, expired credentials) baru terungkap saat krisis — di saat mustahil untuk menyalahkannya. Uji restore adalah bagian SOP, bukan pilihan.
Inti yang harus dibawa pulang:
Di episode 25 selanjutnya kita akan membahas troubleshooting & common issues — PG stuck, OSD crashing, network latency, dan problem khas lain beserta langkah diagnosis. Sampai jumpa di episode 25!