Membangun perlindungan data titik-waktu: memasang snapshot-controller dan CRD external-snapshotter, membuat VolumeSnapshot dari PVC RWX, merestore PVC dari snapshot, serta memahami keterbatasan snapshot NFS dan strategi bauran dengan backup file-level

Mengubah file di NFS itu mudah; mengembalikannya ke kondisi semula jauh lebih susah. Snapshot adalah mekanisme titik-waktu (point-in-time) yang memungkinkan kalian menggulung balik volume ke kondisi sebelumnya — alat penting saat kode baru menghapus data, atau user meng-upload sesuatu yang menyesal.
Di episode 17 kita aktifkan CSI Snapshot untuk PVC RWX NFS kita: install controller, buat VolumeSnapshot, restore, dan pasang ekspektasi yang realistis tentang keterbatasannya.
Kubernetes mendukung snapshot volume lewat API snapshot.storage.k8s.io. Dua komponen yang harus ada:
volumesnapshotclasses, volumesnapshots, volumesnapshotcontents) dari project external-snapshotter.Install dengan manifest resmi:
kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yamlSelanjutnya butuh VolumeSnapshotClass yang menunjuk ke driver NFS:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: nfs-snapshot-class
driver: nfs.csi.k8s.io
deletionPolicy: DeleteBuat snapshot dari PVC rwx-media:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: laravel-media-snap
spec:
volumeSnapshotClassName: nfs-snapshot-class
source:
persistentVolumeClaimName: rwx-mediakubectl apply -f volumesnapshot-laravel-media.yaml
kubectl get volumesnapshot
kubectl get volumesnapshotcontentSnapshot siap bila READYTOUSE: true.
Restore artinya membuat PVC baru yang mengambil data dari snapshot:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rwx-media-restored
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-rwx
dataSource:
name: laravel-media-snap
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
resources:
requests:
storage: 10Gikubectl apply -f pvc-restore.yaml
kubectl get pvc rwx-media-restoredSetelah Bound, mount PVC baru ke Pod sementara untuk memverifikasi isi:
kubectl exec deploy/laravel -- ls /var/www/storage/app/uploadsJujur tentang keterbatasan: snapshot NFS CSI masih terbatas dibanding block storage.
Warning
Jangan jadikan snapshot sebagai satu-satunya lapis data protection. Baurkan tiga lapis: snapshot (cepat, titik-waktu) + backup file-level (rsync/restic offsite) + resource backup (Velero, episode 21). Satu lapis melindungi kesalahan dari yang lain.
Snapshot bukan pengganti backup — ini perlindungan kecepatan, bukan keamanan jarak. Rutinitas sehat:
Saat snapshot dibuat, catat bahwa ia "berada" di NFS server yang sama — jika server mati total, snapshot ikut mati. Inilah alasan bauran dengan lapis offsite.
Pada episode 17 ini, kalian memiliki perlindungan titik-waktu:
Inti yang harus dibawa pulang:
external-snapshotter.dataSource: VolumeSnapshot.Di episode 18 selanjutnya kita akan membangun monitoring & observability storage: kube-prometheus-stack, cadvisor & node_exporter, alerting untuk PVC hampir penuh dan NFS down, serta dashboards yang disarankan. Sampai jumpa di episode 18!