Belajar Kubernetes Shared Filesystem RWX - Konsep Dasar NFS & Container Storage Interface (CSI)
Episode 2 of 28

Belajar Kubernetes Shared Filesystem RWX - Konsep Dasar NFS & Container Storage Interface (CSI)

Mengupas fondasi teknis shared filesystem RWX: apa itu NFS, keunggulan NFS v4.2, standar Container Storage Interface beserta sidecar-containernya, serta alur kerja NFS CSI Driver dari PVC sampai Pod mount

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

Pendahuluan

Setelah di episode 1 kita memahami kenapa aplikasi web butuh shared filesystem, pada episode ini kita bedah dua teknologi yang menjadi tulang punggung solusi kita: NFS dan CSI. Keduanya adalah fondasi yang akan kalian pegang terus sampai episode 27.

Mengapa harus paham keduanya? Karena bila kalian hanya hafal manifest tanpa memahami NFS dan CSI, debugging akan terasa seperti menebak. Pesan error seperti nfs: server not responding atau failed to provision volume with StorageClass hanya bisa dimengerti dengan baik bila kalian tahu apa yang terjadi di balik layar.

Apa Itu NFS (Network File System)

NFS adalah protokol berbagi file antar host yang sudah ada sejak 1984 — dikembangkan oleh Sun Microsystems. Usianya lebih tua dari Kubernetes itu sendiri, dan justru itulah kekuatannya: NFS adalah standar mapan yang didukung oleh setiap kernel Linux dan setiap sistem operasi besar.

Versi modern yang kita pakai adalah NFS v4.2, yang membawa peningkatan penting:

  • Atomic operations — operasi seperti rename dan copy yang konsisten.
  • Copy offload — server bisa menyalin file secara internal tanpa data bolak-balik.
  • Extended attributes (xattrs) — dukungan metadata tambahan pada file.

Arsitektur NFS sangat sederhana: satu server mengekspor direktori lewat file /etc/exports, dan banyak client melakukan mount:

text
Client (worker node) --NFS--> Server (export /srv/k8s-shared)
        |                              |
  mount -t nfs                  /etc/exports:
                                 /srv/k8s-shared *(rw,sync,...)
Uji kemampuan NFS client
showmount -e 192.168.10.20
mount -t nfs 192.168.10.20:/srv/k8s-shared /mnt/k8s-shared
df -h /mnt/k8s-shared

Perintah di atas menampilkan export yang tersedia, melakukan mount manual, lalu menampilkan kapasitasnya. Ini adalah uji kelayakan yang selalu kita pakai saat troubleshooting.

Apa Itu CSI (Container Storage Interface)

Containers Storage Interface (CSI) adalah standar industri yang memungkinkan Kubernetes memanggil storage provider melalui gRPC. Sebelum CSI, dukungan storage di Kubernetes berupa kode in-tree — satu driver di-compile ke dalam kubelet. CSI memisahkan ini: vendor menulis driver sebagai Pod biasa yang berkomunikasi dengan Kubernetes.

Driver CSI bekerja dengan bantuan sidecar containers resmi (csi-provisioner, csi-attacher, dst.) yang dikelola komunitas Kubernetes:

SidecarTugas
csi-provisionerMembuat/menghapus volume (provision & delete)
csi-attacherMenangani attach/detach volume
csi-resizerMemperbesar volume (expansion)
csi-snapshotterMembuat/merestore snapshot
csi-node-driver-registrarMendaftarkan plugin ke kubelet di tiap node

Prinsipnya: Kubernetes tidak perlu tahu cara kerja NFS — ia cukup berbicara gRPC ke driver, yang tahu bagaimana berkomunikasi dengan NFS server.

NFS CSI Driver (nfs.csi.k8s.io)

NFS CSI Driver adalah driver GA yang mengubah NFS biasa menjadi storage dynamic di Kubernetes. Kemampuannya yang membuat segalanya mungkin: dynamic provisioning sub-direktori di NFS export, per-PVC.

Artinya, satu NFS server bisa melayani puluhan PVC, masing-masing dengan sub-direktori sendiri — isolasi antar aplikasi tercapai tanpa harus membuat export baru per aplikasi.

Cara Kerja NFS dalam Kubernetes

Berikut alur lengkapnya ketika sebuah Pod memakai PVC RWX:

100%

Tahapannya:

  1. Aplikasi membuat PVC dengan storageClassName: nfs-rwx.
  2. StorageClass mendeklarasikan provisioner nfs.csi.k8s.io.
  3. csi-provisioner memanggil driver → driver membuat subdirektori di NFS export (misal /srv/k8s-shared/<namespace>/<pvc-name>/).
  4. Kubernetes membuat objek PV dan melakukan binding ke PVC.
  5. Saat Pod dijadwalkan di node mana pun, csi-nfs-node (node plugin) melakukan mount NFS ke path subdirektori tersebut.
  6. Karena semua Pod mount ke direktori yang sama, perilaku RWX tercapai.

Note

Keindahan arsitektur ini: NFS tidak peduli node mana yang mount. Asalkan node satu jaringan dengan server, mount berhasil. Di sinilah "RWX" menjadi natural — bukan karena feature khusus, melainkan karena semua Pod melihat file yang sama di server terpusat.

Penutup

Pada episode 2 ini, kalian telah membangun fondasi teknis yang dibutuhkan mengikuti series ini:

Inti yang harus dibawa pulang:

  • NFS adalah protokol berbagi file sejak 1984; versi modern v4.2 dipakai di solusi ini.
  • CSI adalah standar gRPC yang memisahkan storage driver dari kode Kubernetes.
  • Sidecar csi-provisioner, csi-attacher, csi-resizer, csi-snapshotter menjembatani Kubernetes dengan driver.
  • NFS CSI Driver (nfs.csi.k8s.io) memungkinkan dynamic provisioning sub-direktori per PVC.
  • Alur lengkap: PVC → StorageClass → subdirektori di NFS → PV → binding → mount → semua Pod akses direktori sama (RWX).

Di episode 3 selanjutnya kita masuk ke praktik pertama: setup NFS Server untuk Kubernetes — install nfs-kernel-server, konfigurasi /etc/exports dengan flag yang tepat, menyalakan service, dan memverifikasi export dari sisi client. Sampai jumpa di episode 3!