Menjawab tantangan database yang terus membesar: mengapa StorageClass wajib mengaktifkan allowVolumeExpansion, cara Longhorn melakukan online expansion tanpa memutus I/O, memperbesar PVC, dan memverifikasi hasil resize pada filesystem di dalam Pod.

Di episode 19 kita membahas scaling dan kapan memperbesar disk. Episode 20 menyelami mekanisme intinya dengan cukup dalam: volume expansion — mengapa fitur yang tampak sepele ini bisa menjadi pembeda antara downtime dan jalan terus.
Mengapa penting? Database adalah binatang yang tidak pernah puas: log, index, dan data tumbuh seiring waktu. Jika volume "fixed" (tidak bisa di-expand), saat penuh kalian dipaksa migrasi volume — operasi berat berisiko downtime. Dengan allowVolumeExpansion + Longhorn, resizing adalah operasi online ringan. Sayangnya, fitur ini sering terlupakan saat StorageClass pertama dibuat.
Volume data-postgres-0 dibuat 10Gi. Enam bulan kemudian, tabel transaksi membengkak:
kubectl exec -it postgres-0 -- df -h /var/lib/postgresql/dataFilesystem Size Used Avail Use% Mounted on
/dev/vol-xxx 9.8G 9.3G 468M 95% /var/lib/postgresql/dataJika StorageClass tidak mengaktifkan ekspansi, PVC tidak bisa diperbesar → database berhenti menulis (Postgres mengunci saat disk penuh), downtime mulai.
allowVolumeExpansion: true harus ditetapkan di StorageClass sebelum membuat PVC. Mengubah StorageClass tidak mempengaruhi PVC yang sudah ada — jadi pastikan sejak pertama.
Longhorn mendukung online expansion:
Tidak seperti sebagian storage lain (yang mengunci volume saat expand), Longhorn melakukan capaian resize yang aman.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn
provisioner: driver.longhorn.io
allowVolumeExpansion: true
parameters:
numberOfReplicas: "3"
dataLocality: "best-effort"
fsType: "ext4"Field allowVolumeExpansion: true adalah kuncinya. Cek StorageClass yang sudah ada:
kubectl get storageclass longhorn -o jsonpath='{.allowVolumeExpansion}{"\n"}'kubectl edit pvc data-postgres-0Ubah dari 10Gi menjadi 20Gi:
spec:
resources:
requests:
storage: 20Gicsi-resizer memanggil NodeExpandVolume.kubectl get pvc data-postgres-0
kubectl exec -it postgres-0 -- df -h /var/lib/postgresql/dataJika df -h menampilkan kapasitas baru, resize selesai. Selama proses, PVC bisa dikunjungi status FilesystemResizePending sesaat.
Important
Expansion tidak bisa dikurangi — hanya diperbesar. Rencanakan pertumbuhan (mis. tambah 50% dari yang diperkirakan) dan jangan lupa kapasitas fisik: 20Gi volume berarti butuh ruang 3× untuk replica (60Gi di pool), jadi pastikan node punya ruang.
Inti yang harus dibawa pulang:
allowVolumeExpansion: true di StorageClass sejak awal.requests.storage di PVC → Longhorn resize block + filesystem → verifikasi dengan df -h.Di episode 21 selanjutnya kita akan membahas upgrade Longhorn, non-disruptive release & compatibility matrix — strategi upgrade dua langkah, prosedur helm upgrade aman, tinjauan breaking changes, rollback, dan matriks kompatibilitas versi di 2026. Sampai jumpa di episode 21!