Membangun lini pertahanan data terakhir dengan Velero: menginstall Velero dengan penyimpanan object bucket, membackup namespace beserta volume PVC, merestore resources dan data ke cluster baru, serta menyusun strategi RPO/RTO yang realistis

Semua langkah perlindungan data yang kita buat sejauh ini — snapshot (episode 17), rsync offsite (episode 15) — masih tersebar. Bagaimana kalau seluruh cluster hilang: kode Deployment, Service, Ingress, ConfigMap, DAN data PVC? Di episode 21 kita memakai Velero: alat backup yang menyatukan resources Kubernetes dan volume storage dalam satu alur.
Mengapa ini penting? Karena disaster recovery tidak cukup hanya menyimpan data — kalian butuh cara membangun kembali application stack yang lengkap dan teruji.
Velero menyimpan backup ke object storage (S3, GCS, Azure, MinIO). Contoh untuk AWS S3:
# client
curl -Lo velero.tar.gz https://github.com/vmware-tanzu/velero/releases/latest/download/velero-linux-amd64.tar.gz
tar -xzf velero.tar.gz && sudo mv velero /usr/local/bin/
# server (dengan credentials S3)
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.10.0 \
--bucket devvnull-backups \
--backup-location-config region=ap-southeast-1 \
--snapshot-location-config region=ap-southeast-1 \
--secret-file ./credentials-veleroFile credentials-velero berisi [default] aws_access_key_id=... aws_secret_access_key=.... Untuk MinIO lokal gunakan --backup-location-config s3Url=http://minio:9000.
kubectl -n velero get pods
velero get backup-locationsBackup seluruh namespace aplikasi beserta volume-nya:
velero backup create laravel-app --include-namespaces default
velero backup describe laravel-app
velero backup logs laravel-app | tail -20Yang terjadi di balik layar:
Tip
Dua mode data velero: --snapshot-volumes (blok/snapshot) dan --default-volumes-to-restic / --default-volumes-to-fs-backup (file-level). Untuk NFS RWX, mode file-level lebih portabel — hasil backup bisa direstore ke storage yang berbeda sama sekali.
Simulasi dramatis: hapus namespace default, lalu pulihkan semuanya:
kubectl delete ns default
velero restore create --from-backup laravel-app
velero restore describe laravel-app
kubectl get deploy,svc,ingress,pvc -n defaultSetelah restore, namespace yang hilang terlahir kembali: Deployment, Service, Ingress, dan PVC dengan data yang sama. Tunggu sampai Pod Ready:
kubectl rollout status deployment/laravel -n default --timeout=180s
curl -I https://laravel.example.com/storage/uploads/foto.jpgWarning
Restore pertama di lingkungan kalian hampir pasti menemukan ketidakcocokan kecil (mis. Ingress host beda, PVC tidak langsung Bound). Jangan anggap restore bisa berhasil sebelum kalian mempraktikkannya. Uji restore berkala adalah bagian dari SLA.
Buat jadwal dan target yang realistis:
Jadwal otomatis:
velero schedule create nightly --schedule="0 2 * * *" \
--include-namespaces defaultKombinasi yang lengkap untuk data kita:
Note
Baurkan ketiganya: snapshot untuk pemulihan cepat tanpa keluar cluster, rsync/restic untuk file offsite, Velero untuk resources + konsistensi penuh. Tidak ada satu pukulan yang menyelesaikan semua skenario — desain berlapis inilah yang menyelamatkan di hari-H.
Pada episode 21 ini, arsitektur data kalian kini punya lini pertahanan terakhir:
Inti yang harus dibawa pulang:
velero install dengan bucket object storage (S3/MinIO) membuat backup server.velero backup create --include-namespaces default menyatukan resources + volume.velero restore create --from-backup memulihkan stack setelah bencana.Di episode 22 selanjutnya kita akan mengotomasi build & deploy: pipeline CI/CD GitHub Actions untuk membangun image, kubectl set image rolling update, pola GitOps Argo CD/Flux, dan zero-downtime dengan readiness probe serta maxSurge/maxUnavailable. Sampai jumpa di episode 22!