Membuat snapshot volume PostgreSQL memakai VolumeSnapshotClass, merestorasi PVC baru dari snapshot secara instan, menduplikasi volume untuk staging development dengan CSI clone, serta mengenal linked-clone di V2 engine yang berbagi blok data.

Di episode 8-13 kita menata backup, replikasi, keamanan, dan enkripsi. Episode 14 masuk ke mode data engineering: membuat cade/restore point dan menduplikasi data untuk environment lain. Ini adalah cara Longhorn menjawab kebutuhan sehari-hari: "ambil snapshot sebelum migrasi", "buat data staging", "restore DB yang tak sengaja ter-rollback".
Mengapa penting? Karena pemulihan bukan opsional — snapshot adalah cara tercepat mengembalikan database pada waktu yang baik tanpa menunggu backup penuh dari S3. Clone memungkinkan develop environment tanpa menggandakan semua blok lagi-lagi.
Longhorn membutuhkan VolumeSnapshotClass agar Kubernetes tahu bahwa ia harus memakai snapshot driver Longhorn:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: longhorn-snapshot-vsc
driver: driver.longhorn.io
deletionPolicy: Delete
parameters:
type: snapapiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: postgres-snap-20260125
spec:
volumeSnapshotClassName: longhorn-snapshot-vsc
source:
persistentVolumeClaimName: data-postgres-0Snapshot dibuat instan: dengan mekanisme copy-on-write Longhorn, data tidak digandakan saat snapshot dibuat — hanya blok yang berubah selanjutnya yang direkam.
kubectl get volumesnapshot
kubectl get volumesnapshotcontent -o wideStatus ReadyToUse: true menandakan snapshot siap di-restore.
Restore ke PVC baru dengan dataSource: VolumeSnapshot:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-restore-20260125
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: longhorn-ha
resources:
requests:
storage: 10Gi
dataSource:
name: postgres-snap-20260125
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.ioKemudian mount PVC ini ke StatefulSet baru (atau Pod) dan verifikasi data:
kubectl exec -it postgres-restore-0 -- psql -U postgres -d laravel -c "SELECT count(*) FROM demo;"Restore "instant" karena Longhorn memakai siklus copy-on-write — PVC baru membaca blok dari snapshot hanya saat dibutuhkan.
Clone = salinan penuh volume tanpa snapshot intermediate. Berguna untuk membangun lingkungan staging yang identik dengan production.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-clone-staging
namespace: staging
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: longhorn-ha
resources:
requests:
storage: 10Gi
dataSource:
kind: PersistentVolumeClaim
name: data-postgres-0
apiGroup: ""Perbedaan utama vs restore-snapshot: clone membuat PVC source penuh (independent), bukan berbagi blok dengan snapshot.
| Skop | Snapshot | Clone |
|---|---|---|
| Rollback cepat di lingkungan sama | Ya | Ya (lebih lambat) |
| Staging development terpisah | Bisa | Direkomendasikan |
| Berbagi blok (hemat disk) | Ya (COW) | Tidak (penuh) |
| Restore independen | Ya (dari source) | Ya (independen) |
Longhorn v1.12+ memperkenalkan linked-clone untuk V2 Data Engine: clone yang berbagi blok data dengan volume asli (space-efficient), mirip reflink/copy-on-write di filesystem. Keunggulan:
Kendala: hanya tersedia untuk V2 engine dan masih dalam pengembangan — pertimbangkan untuk workload yang butuh banyak clone dengan budget terbatas. Untuk series ini, kita pakai clone standar (V1).
Note
Snapshot/restore/clone adalah operasi level volume. Untuk konsistensi aplikasi (misal database), jalankan checkpoint DB (PostgreSQL pg_start_backup atau pauskan transaksi) sebelum snapshot agar tidak ada penulisan setengah jalan. Untuk lab, Longhorn snapshot sudah cukup konsisten untuk uji rollback.
Inti yang harus dibawa pulang:
VolumeSnapshotClass + VolumeSnapshot membuat snapshot Lonhorn instan (COW).dataSource: VolumeSnapshot berjalan cepat dan bisa di-verify.dataSource: PersistentVolumeClaim = duplikasi penuh untuk staging.Di episode 15 selanjutnya kita akan membahas backup ke S3/NFS & recurring job — menetapkan BackupTarget, menyusun jadwal recurring snapshot/backup, memahami backup incremental berbasis change-block, dan memastikan autentikasi backup aman. Sampai jumpa di episode 15!