Backup yang hebat tidak berarti apa-apa tanpa rencana. Episode ini membangun Disaster Recovery Plan: menetapkan RPO/RTO, backup off-site ke region berbeda, menyusun runbook restore langkah demi langkah, dan menjalankan DR drill dengan menghapus cluster lalu merestore ke cluster baru.

Delapan episode praktik teknis sudah kalian kuasai: backup, restore, schedule, hooks, migrasi. Episode 12 mengangkat semuanya satu tingkat: strategi. Karena kenyataannya, perusahaan tidak bangkrut karena kehilangan data — mereka bangkrut karena tidak bisa pulih dalam waktu yang dijanjikan.
Bayangkan pemadam kebakaran yang punya selang dan pompa terbaik, tapi tidak pernah menyusun rencana evakuasi. Saat api datang, semua alat ada tapi tidak ada yang tahu urutannya. DR Plan adalah "rencana evakuasi" itu: angka yang disepakati, langkah yang terdokumentasi, dan latihan berkala.
Dua metrik yang wajib disepakati dengan pemangku kepentingan sebelum menyusun apa pun:
+----------------+-------------------------------------+
| RPO 24 jam | schedule harian, TTL cukup panjang |
| RPO 1 jam | schedule per jam, TTL 48h |
| RPO hampir 0 | snapshot cloud + dump logis berkala |
| RTO 4 jam | runbook otomatis, image Velero siap |
| RTO < 1 jam | DR cluster standby + pipeline deploy |
+----------------+-------------------------------------+velero schedule create hourly \
--schedule="0 * * * *" \
--include-namespaces prod \
--ttl 72h \
--default-volumes-to-fs-backupRPO 1 jam = schedule per jam. RTO 4 jam menuntut proses restore yang cepat: Velero terinstall di DR region, credential siap, dan runbook terbukti.
Prinsip backup klasik berlaku juga untuk cluster: 3 salinan, 2 media berbeda, 1 di lokasi lain. Untuk Kubernetes, terjemahannya:
velero backup-location create dr-region \
--provider aws \
--bucket velero-backups-dr \
--config region=ap-southeast-1Atau untuk lintas cloud — BSL GCS yang dibaca saat DR di GCP:
velero backup-location create gcs-dr \
--provider gcp \
--bucket velero-dr-backupsNote
BSL sekunder tidak otomatis menerima backup. Untuk memenuhi RPO lintas region, jadwalkan backup tambahan ke BSL itu (--storage-location dr-region), atau jadwalkan replikasi bucket (misal S3 Replication) di level penyimpanan. Pilih yang sesuai dengan biaya yang sanggup kalian tanggung.
Runbook adalah instruksi yang bisa dieksekusi siapa saja — termasuk orang yang baru jaga malam. Susun minimal langkah berikut:
1. Deteksi insiden dan eskalasi ke on-call.
2. Siapkan cluster DR: cluster baru di region DR, kubectl context benar.
3. Install Velero 1.18 dengan plugin yang sama:
velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.14.0 \
--bucket velero-backups-dr --secret-file ./credentials-velero \
--backup-location-config region=ap-southeast-1
4. Verifikasi BSL Available dan backup tampak:
velero backup-location get && velero backup get
5. Restore dengan mapping yang sesuai:
velero restore create dr-restore --from-backup <latest> \
--storage-class-mappings gp2:gp3
6. Verifikasi: velero restore logs, kubectl get pods, cek data volume.
7. Switch traffic ke cluster DR, update DNS/Ingress.
8. Catat waktu mulai-selesai untuk laporan RTO.Simpan runbook ini di repository (misal GitOps repo) dan jadikan checklist commit-able — bukan di kepala seseorang.
Backup yang tidak pernah direstore di cluster baru hanyalah tebakan. DR drill mengubah asumsi menjadi fakta: apakah credential masih berlaku? Apakah plugin image tersedia? Berapa lama restore benar-benar berlangsung? Semua hanya terjawab dengan latihan.
kubectl config use-context dr-cluster
velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.14.0 \
--bucket velero-backups-dr --secret-file ./credentials-velero \
--backup-location-config region=ap-southeast-1
velero restore create drill-restore --from-backup <latest>Uji juga skenario terburuk: hapus cluster sumber, lalu restore ke cluster baru dari nol. Ini satu-satunya cara membuktikan bahwa backup kalian benar-benar independen dari cluster asalnya.
Warning
DR drill yang baik mencatat durasi aktual (mulai dari cluster kosong sampai traffic kembali). Jika drill memakan 6 jam padahal RTO disepakati 4 jam, maka konfigurasi kalian salah — bukan drill-nya. Gunakan angka drill untuk memperbaiki rencana, bukan membenarkan angka.
Backup yang diam-diam gagal adalah kebocoran paling berbahaya. Jadwalkan pemeriksaan otomatis:
velero backup get | grep -v Completed
kubectl logs -n velero deploy/velero --tail=50Kita bahas monitoring lengkap di episode 20. Untuk episode 12, cukup tanamkan kebiasaan: backup yang tidak dimonitor sama dengan tidak ada backup.
Inti yang harus dibawa pulang:
Di episode 13 selanjutnya kita masuk fase keamanan: Keamanan Credential & RBAC — menyimpan cloud credential dengan benar (jangan di-commit!), memakai IRSA di EKS dan Workload Identity di GKE, serta membatasi akses user ke namespace velero.