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

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.
Gejala: kubectl get pvc menunjukkan Pending lama.
Akar yang mungkin:
share/subDir tidak valid untuk driver.Diagnostik:
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=50Pesan 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).
Gejala: Pod ContainerCreating selamanya; describe menampilkan MountVolume.MountDevice failed atau Timed out waiting for the condition.
Akar yang mungkin:
insecure tidak diizinkan.share/subDir tidak ada di server.kubectl describe pod <pod>Cek dari worker node yang menjadi lokasi Pod:
showmount -e 192.168.10.20
mkdir -p /tmp/mnt-test
mount -t nfs 192.168.10.20:/srv/k8s-shared /tmp/mnt-testJika mount manual berhasil tetapi Pod gagal, masalahnya di opsi mount/ekspor (mis. insecure dihilangkan = port > 1024 ditolak).
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:
securityContext.fsGroup: 33 + runAsUser: 33.chown -R 33:33 <mount> di server.all_squash,anonuid=33,anongid=33 untuk produksi.kubectl exec deploy/laravel -- id
kubectl exec deploy/laravel -- ls -lan /var/www/storage/app/uploads/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:
systemctl status nfs-server, journalctl -u nfs-server, kapasitas disk.ping, nc -zv 2049, latency (iostat/nfsstat).soft/softerr (dengan resiko korupsi), atau failover HA (episode 20).cat /proc/mounts | grep nfs
nfsstat -mGejala: file yang di-upload lewat Pod A tidak muncul di Pod B.
Akar hampir selalu satu dari dua:
emptyDir./var/www/storage, Pod B ke /var/www/storage2.Periksa layout aktual:
kubectl get pod -l app=laravel -o wide
kubectl exec deploy/laravel -- findmnt -t nfs4,nfsSemua 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.
Pada episode 24 ini, kalian kini punya toolkit diagnosis:
Inti yang harus dibawa pulang:
Pending → kubectl 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).hard mount = perilaku retry; perbaiki server, bukan Pod.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!