Belajar Kubernetes Shared Filesystem RWX - Troubleshooting & Common Issues
Episode 24 of 28

Belajar Kubernetes Shared Filesystem RWX - Troubleshooting & Common Issues

Menghadapi masalah storage paling umum di lapangan: PVC pending yang tak kunjung bound, pod hang karena mount gagal, permission denied akibat UID mismatch, NFS hang dengan mount hard, serta data tak terlihat antar replica

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

Pendahuluan

Storage yang tenang selama berbulan-bulan bisa meledak dalam satu pagi. Episode 24 mengajarkan cara berpikir diagnostik untuk masalah paling umum di arsitektur NFS + CSI: dari gejala (Pending, MountFailed, Permission denied, hang) ke akar penyebab, lalu ke aksi.

Kunci troubleshooting adalah urutan: lihat → pikir → sentuh. Jangan langsung mengubah konfigurasi sebelum membaca gejala dari objek Kubernetes dan log driver.

PVC Pending / Tidak Bound

Gejala: kubectl get pvc menunjukkan Pending lama.

Akar yang mungkin:

  • StorageClass salah / tidak ada (nama salah ketik, atau class tidak terdaftar).
  • NFS server tidak dapat dijangkau controller (IP salah, firewall).
  • share/subDir tidak valid untuk driver.

Diagnostik:

KubernetesPVC pending: lihat event dan log
kubectl describe pvc <nama>
kubectl get events --field-selector involvedObject.name=<nama>,involvedObject.kind=PersistentVolumeClaim
kubectl logs -n kube-system -l app=csi-nfs-controller -c csi-nfs-plugin --tail=50

Pesan khas: failed to create volume: ... mount ... permission denied → masalah ekspor/permission server; VolumeType mismatched → StorageClass tidak sinkron.

Tip

Opsi cepat untuk memeriksa sisi server: showmount -e <ip> dari client dan exportfs -v di server. Jika daftar export tampak aneh, ekspor belum di-apply (sudo exportfs -ra).

MountFailed di Pod

Gejala: Pod ContainerCreating selamanya; describe menampilkan MountVolume.MountDevice failed atau Timed out waiting for the condition.

Akar yang mungkin:

  • NFS unreachable dari node (firewall worker, CNI, rute).
  • Ekspor berubah atau insecure tidak diizinkan.
  • Path share/subDir tidak ada di server.
KubernetesMount failed: lihat deskripsi pod
kubectl describe pod <pod>

Cek dari worker node yang menjadi lokasi Pod:

LinuxUji mount manual dari worker
showmount -e 192.168.10.20
mkdir -p /tmp/mnt-test
mount -t nfs 192.168.10.20:/srv/k8s-shared /tmp/mnt-test

Jika mount manual berhasil tetapi Pod gagal, masalahnya di opsi mount/ekspor (mis. insecure dihilangkan = port > 1024 ditolak).

Permission Denied di Storage

Gejala: upload Laravel gagal Permission denied, atau file tertulis tapi tak bisa dibaca Pod.

Akar: UID mismatch — owner file di NFS ≠ UID proses (episode 13). File ber-owner 1000 (dari user lokal) vs proses www-data 33.

Perbaikan:

  1. Samakan di sisi Pod: securityContext.fsGroup: 33 + runAsUser: 33.
  2. Samakan di sisi file: chown -R 33:33 <mount> di server.
  3. Selaraskan kebijakan ekspor: all_squash,anonuid=33,anongid=33 untuk produksi.
KubernetesVerifikasi UID dalam Pod
kubectl exec deploy/laravel -- id
kubectl exec deploy/laravel -- ls -lan /var/www/storage/app/uploads/

NFS Hang (hard mount)

Gejala: proses Pod menggantung; dmesg/mount log menunjukkan nfs: server 192.168.10.20 not responding, still trying.

Sebenarnya ini perilaku yang dirancang: mount hard (episode 16) menahan write sampai server kembali. Bukan kegagalan aplikasi — kegagalan server yang tertutup oleh retry.

Langkah:

  • Cek server: systemctl status nfs-server, journalctl -u nfs-server, kapasitas disk.
  • Cek jaringan: ping, nc -zv 2049, latency (iostat/nfsstat).
  • Jika server tidak akan kembali dalam waktu wajar dan kalian lebih memilih error cepat: pertimbangkan soft/softerr (dengan resiko korupsi), atau failover HA (episode 20).
LinuxCek status mount di worker
cat /proc/mounts | grep nfs
nfsstat -m

Data Duplikat / Tak Terlihat antar Replica

Gejala: file yang di-upload lewat Pod A tidak muncul di Pod B.

Akar hampir selalu satu dari dua:

  1. Bukan volume yang sama — tiap replica memakai PVC terpisah atau emptyDir.
  2. Mount path berbeda — misal Pod A mount ke /var/www/storage, Pod B ke /var/www/storage2.

Periksa layout aktual:

KubernetesBandingkan mount semua replica
kubectl get pod -l app=laravel -o wide
kubectl exec deploy/laravel -- findmnt -t nfs4,nfs

Semua replica harus memperlihatkan mount NFS ke path yang sama. Jika tidak, perbaiki Deployment (episode 10) — dan hindari emptyDir untuk bagian data yang harus berbagi.

Important

Aturan emas diagnosis: satu volume, satu path, satu StorageClass. Bila salah satu dari tiga itu tidak konsisten di seluruh replica, gejala "file hilang antar Pod" akan terus muncul meski semua infrastruktur tampak sehat.

Penutup

Pada episode 24 ini, kalian kini punya toolkit diagnosis:

Inti yang harus dibawa pulang:

  • PVC Pendingkubectl describe pvc + log csi-nfs-controller + showmount -e.
  • MountFailed → laut describe pod + uji mount manual dari worker.
  • Permission denied → samakan UID (fsGroup, chown, all_squash).
  • NFS hang dengan hard mount = perilaku retry; perbaiki server, bukan Pod.
  • Data tak terlihat antar replica → cek konsistensi volume, path, dan StorageClass.

Di episode 25 selanjutnya kita akan memperbarui driver: rilis NFS CSI Driver v4.x, breaking changes yang perlu dicek, prosedur upgrade Helm yang aman, dan verifikasi volume lama tetap ter-mount. Sampai jumpa di episode 25!

Belajar Kubernetes Shared Filesystem RWX - Troubleshooting & Common Issues | Belajar Kubernetes Shared Filesystem RWX