Menyusun dua StorageClass inti: openebs-hostpath untuk volume RWO lokal dan openebs-nfs-rwx untuk akses RWX, memahami parameter backendStorageClass dan nfsServerType, lalu membuat PVC RWX pertama hingga berstatus Bound

OpenEBS sudah terpasang, tetapi belum punya "resep" untuk membuat volume sesuai keinginan kita. StorageClass adalah resep itu. Di episode 5 kita menyusun dua resep yang menjadi tulang punggung seluruh series: hostpath (RWO lokal) dan NFS RWX (shared).
Setelah keduanya ada, kalian tinggal membuat PVC dan melihat keajaiban provisioning: NFS server hidup otomatis, data tersimpan di backing volume, dan akses RWX bekerja.
StorageClass bawaan openebs-hostpath sudah ada (episode 4). Manifestnya setara dengan ini:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: openebs-hostpath
provisioner: openebs.io/local
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
allowVolumeExpansion: trueKarakteristik penting:
openebs.io/local — volume ditempel di folder node (/var/lib/openebs/).WaitForFirstConsumer — volume baru dibuat ketika ada Pod pertama yang memakainya; dengan ini, Pod dan volume dijamin di node yang sama.Note
WaitForFirstConsumer adalah kunci Local PV: karena storage menempel node, provisioning dilakukan setelah scheduler memilih node — sehingga volume tidak terkunci di node yang tidak dipakai Pod.
StorageClass kedua menyediakan akses shared. Ini adalah "resep ajaib" series ini:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: openebs-nfs-rwx
provisioner: openebs.io/nfs
parameters:
backendStorageClass: openebs-hostpath
nfsServerType: kernel-nfsParameter bermakna:
backendStorageClass: openebs-hostpath — data NFS disimpan di volume Local PV hostpath (RWO di bawah, RWX di atas).nfsServerType: kernel-nfs — memakai NFS server kernel Linux (ringan). Alternatif: nfsganesha (fitur lebih kaya, lebih berat).kubectl apply -f sc-openebs-hostpath.yaml -f sc-openebs-nfs-rwx.yaml
kubectl get scapiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: media-storage
spec:
accessModes:
- ReadWriteMany
storageClassName: openebs-nfs-rwx
resources:
requests:
storage: 5Gikubectl apply -f pvc-media-storage.yaml
kubectl get pvc media-storageKarena NFS StorageClass memakai backendStorageClass: openebs-hostpath (yang bermode WaitForFirstConsumer), PVC baru Bound setelah ada Pod pertama yang memakainya — ini perilaku normal.
kubectl get pv -o wide
kubectl -n openebs-nfs get pods
kubectl -n openebs-nfs get svcDi namespace storage (openebs-nfs), akan muncul NFS Server Pod bernama nfs-media-storage-... beserta Service-nya — persis seperti desain episode 2.
Warning
Cek kubectl -n openebs get pods -l role=openebs-nfs bila NFS server tidak muncul dalam hitungan menit. Penyebab umum: nfsProvisioner.enabled=false saat install (episode 4) atau nilai nfsServerType tidak didukung.
kubectl get pvc media-storageStatus Bound berarti siklus provisioning sukses: PVC → NFS Server Pod → backing Local PV → PV Bound → Pod siap mount di worker mana pun. Cek juga kapasitas dan node asal data:
kubectl get pv -o jsonpath='{.items[?(@.spec.claimRef.name=="media-storage")].spec.local.path}{"\n"}'Pada episode 5 ini, dua resep storage telah aktif:
Inti yang harus dibawa pulang:
openebs-hostpath: RWO lokal, WaitForFirstConsumer, latensi rendah.openebs-nfs-rwx: RWX dengan backendStorageClass + nfsServerType: kernel-nfs.openebs-nfs.Bound, NFS Pod & Service ada, PV menunjuk folder node.Di episode 6 selanjutnya kita akan memverifikasi controller dan NFS daemon: diagnosa dengan kubectl get pvc dan log provisioner, meninjau Pod NFS server dan Service per-PVC, serta melakukan uji mount dengan dua Pod alpine. Sampai jumpa di episode 6!