Membuktikan pipeline storage benar-benar bekerja: diagnosis PVC dan log provisioner, meninjau NFS Server Pod beserta service per-PVC, dan melakukan uji mount RWX dengan dua Pod yang saling baca tulis file

StorageClass dan PVC sudah dibuat. Tapi membangun tanpa memverifikasi adalah kebodohan yang mahal — di episode 6 kita memeriksa kesehatan seluruh pipeline storage dan membuktikan dengan eksperimen bahwa dua Pod benar-benar berbagi file lewat NFS.
Ini momen "wah, benar bekerja": sebuah file yang ditulis oleh satu Pod muncul seketika di Pod lain, padahal keduanya hidup di node berbeda. Hasil eksperimen ini menjadi fondasi keyakinan untuk deployment Laravel di episode 7.
Lihat kondisi seluruh komponen storage:
kubectl get pvc -A
kubectl get pods -n openebs -o wide
kubectl get pods -n openebs-nfs -o widePerhatikan kolom READY, STATUS, dan NODE — Pod OpenEBS harus sehat di seluruh worker.
Log provisioner menyimpan riwayat request provisioning. Saat ada PVC yang aneh, mulai dari sini:
kubectl logs -n openebs deploy/openebs-nfs-provisioner --tail=50Pesan sehat tampak seperti provisioning claim default/media-storage diikuti sukses. Error khas: unsupported storage class (StorageClass salah) atau backend storageclass ... not found (backing tidak ada).
Setiap PVC RWX memiliki satu NFS Server Pod — ini jantung model shared OpenEBS:
kubectl -n openebs-nfs get pod -l app.kubernetes.io/name=nfs-provisioner -o wide
kubectl -n openebs-nfs get svcPerhatikan pasangan:
NAME READY STATUS ...
nfs-media-storage-xxxxxxxx 1/1 Running ...Service dengan nama nfs-media-storage-... bertindak sebagai endpoint mount bagi semua Pod aplikasi. Standardnya: satu Pod nfs-<pvc> menjalankan NFS kernel, satu Service nfs-<pvc> mengekspos port 2049.
Note
Perilaku yang wajib dipahami: ketika ada lebih banyak PVC RWX, OpenEBS membuat NFS Server Pod baru per-PVC — bukan menambah replica pada server yang sama. Artinya scaling = menambah PVC, bukan menskalakan Pod NFS horizontal.
Sekarang eksperimen RWX paling meyakinkan. Deploy dua Pod alpine yang memakai PVC yang sama:
apiVersion: apps/v1
kind: Deployment
metadata:
name: rwx-writer
spec:
replicas: 2
selector:
matchLabels:
app: rwx-writer
template:
metadata:
labels:
app: rwx-writer
spec:
containers:
- name: alpine
image: alpine:3.20
command: ["sleep", "infinity"]
volumeMounts:
- name: shared
mountPath: /shared
volumes:
- name: shared
persistentVolumeClaim:
claimName: media-storagekubectl apply -f rwx-mount-test.yaml
kubectl get pod -l app=rwx-writer -o wideTulis dari Pod pertama, baca dari Pod kedua:
POD0=$(kubectl get pod -l app=rwx-writer -o jsonpath='{.items[0].metadata.name}')
POD1=$(kubectl get pod -l app=rwx-writer -o jsonpath='{.items[1].metadata.name}')
kubectl exec $POD0 -- sh -c 'echo "hello shared" > /shared/probe.txt'
kubectl exec $POD1 -- cat /shared/probe.txtOutput hello shared dari pod-1 membuktikan media RWX bekerja antar node.
Konfirmasi bahwa mount benar-benar NFS:
kubectl exec deploy/rwx-writer -- cat /proc/mounts | grep nfskubectl exec deploy/rwx-writer -- nfsstat -m 2>/dev/null || trueJika nfsstat tidak tersedia di image alpine, pemakaian cat /proc/mounts | grep nfs sudah cukup — menunjukkan nfs4 ... :/... sebagai tipe mount.
Important
Simpan output cat /proc/mounts ini sebagai bukti baku. Di episode 24 (troubleshooting), langkah pertama diagnosis selalu "apakah mount benar-benar NFS?" — data ini menjadi pembanding saat masalah muncul.
Pada episode 6 ini, pipeline storage telah dibuktikan berfungsi:
Inti yang harus dibawa pulang:
kubectl get pvc -A + log openebs-nfs-provisioner.nfs-<pvc>).cat /proc/mounts | grep nfs.Di episode 7 selanjutnya kita akan memakai akses RWX untuk deployment Laravel: manifest PVC dan Deployment multi-replica, mount volume ke storage Laravel, dan verifikasi bahwa upload tersedia di semua replica. Sampai jumpa di episode 7!