Belajar Kubernetes Shared Filesystem RWX - Snapshot & Restore PVC NFS
Episode 17 of 28

Belajar Kubernetes Shared Filesystem RWX - Snapshot & Restore PVC NFS

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

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

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.

CSI Snapshot

Kubernetes mendukung snapshot volume lewat API snapshot.storage.k8s.io. Dua komponen yang harus ada:

  • CRDs (volumesnapshotclasses, volumesnapshots, volumesnapshotcontents) dari project external-snapshotter.
  • snapshot-controller — controller in-cluster yang mengoordinasikan snapshot.

Install dengan manifest resmi:

KubernetesInstall snapshot CRDs dan controller
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.yaml

Selanjutnya butuh VolumeSnapshotClass yang menunjuk ke driver NFS:

volumesnapshotclass-nfs.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: nfs-snapshot-class
driver: nfs.csi.k8s.io
deletionPolicy: Delete

VolumeSnapshot & Restore

Buat snapshot dari PVC rwx-media:

volumesnapshot-laravel-media.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: laravel-media-snap
spec:
  volumeSnapshotClassName: nfs-snapshot-class
  source:
    persistentVolumeClaimName: rwx-media
KubernetesBuat dan cek snapshot
kubectl apply -f volumesnapshot-laravel-media.yaml
kubectl get volumesnapshot
kubectl get volumesnapshotcontent

Snapshot siap bila READYTOUSE: true.

Restore: PVC Baru dari Snapshot

Restore artinya membuat PVC baru yang mengambil data dari snapshot:

pvc-restore.yaml
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: 10Gi
KubernetesRestore volume
kubectl apply -f pvc-restore.yaml
kubectl get pvc rwx-media-restored

Setelah Bound, mount PVC baru ke Pod sementara untuk memverifikasi isi:

KubernetesVerifikasi isi restore
kubectl exec deploy/laravel -- ls /var/www/storage/app/uploads

Batasan Snapshot NFS

Jujur tentang keterbatasan: snapshot NFS CSI masih terbatas dibanding block storage.

  • Implementasi snapshot driver NFS umumnya menyalin file (bukan block-level copy), sehingga snapshot besar bisa lambat dan memakan duplikat ruang.
  • Konsistensi "instant" bukan berarti atomik penuh — untuk aplikasi yang sedang menulis banyak file, snapshot sebaiknya dibuat saat aplikasi diam atau di-coordinate dengan maintenance.
  • Dukungan penuh (misal cross-region, incremental) bervariasi antar rilis driver — verifikasi dukungan versi pada rilis yang kalian pakai (logika upgrade di episode 25).

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 Reconciliation

Snapshot bukan pengganti backup — ini perlindungan kecepatan, bukan keamanan jarak. Rutinitas sehat:

  • Snapshot harian untuk volume media (cepat pulih ke kondisi kemarin).
  • rsync/restic mingguan ke offsite (selamat dari kehilangan server).
  • Velero bulanan untuk resources + data (uji restore kuartalan).

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.

Penutup

Pada episode 17 ini, kalian memiliki perlindungan titik-waktu:

Inti yang harus dibawa pulang:

  • Install snapshot-controller + CRDs external-snapshotter.
  • Buat VolumeSnapshotClass → VolumeSnapshot dari PVC RWX.
  • Restore = PVC baru dengan dataSource: VolumeSnapshot.
  • Snapshot NFS masih terbatas: lambat untuk data besar, tidak selalu atomik — verifikasi dukungan driver.
  • Kombinasikan snapshot + backup offsite + Velero; jangan hanya satu lapis.

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!

Belajar Kubernetes Shared Filesystem RWX - Snapshot & Restore PVC NFS | Belajar Kubernetes Shared Filesystem RWX