Menskalakan aplikasi Laravel di atas PVC RWX yang sama: menambah replica secara manual dan lewat HPA berbasis CPU, mengenali NFS sebagai bottleneck, memindahkan session dan cache ke Redis, serta menentukan kapan NFS tidak lagi cukup dan harus pindah storage

Traffic naik, aplikasi melambat — saatnya menskalakan. Keindahan desain kita: karena semua replica memakai satu PVC RWX yang sama, scaling hanyalah soal menambah replica. Tidak ada petunjuk data untuk dikoordinasikan, tidak ada reseller per Pod.
Tapi scaling bukan tanpa batas. Episode 19 membahas sisi cerah (skala horizontal dengan HPA) dan sisi gelap (saat NFS menjadi bottleneck dan harus pindah).
Cara paling langsung — scale manual:
kubectl scale deployment laravel --replicas=6
kubectl rollout status deployment/laravel
kubectl get pods -l app=laravel -o wideSemua 6 replica mount ke PVC RWX yang sama — file yang ditulis salah satunya langsung tampak di yang lain, tidak peduli di node mana ia berjalan.
Untuk otomasi, gunakan HPA versi autoscaling/v2:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: laravel
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: laravel
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80kubectl apply -f hpa-laravel.yaml
kubectl get hpa -wHPA menambah replica saat CPU/memoria rata-rata melampaui target — semuanya langsung mendapat akses ke media yang sama.
Note
Pastikan PVC RWX memakai volumeMode: Filesystem dan semua replica setuju pada mount path yang sama. HPA + RWX bekerja dengan baik justru karena tidak ada persyaratan "volume harus ada di node Pod" — tiap replica dijadwalkan mandiri.
NFS adalah titik tunggal. Gejala bottleneck:
Langkah pertama yang hampir selalu benar: pindahkan session & cache dari disk ke Redis sejak awal. Ini memangkas lalu lintas file kecil ke NFS (yang justru paling mahal per operasinya):
CACHE_STORE=redis
SESSION_DRIVER=redisDengan begini, NFS hanya menahan media (upload/thumbnail) — pola yang sehat: media di NFS, cache di Redis.
Tip
Aturan praktis: file yang ditulis sekali dan dibaca (upload, media) cocok di NFS. File yang dibaca 1.000 kali per detik (session, cache, temp) sebaiknya di memori Redis. Ini membagi beban dan memperpanjang umur arsitektur NFS kalian.
Ketika aplikasi tetap lambat setelah Redis dan banyak replica, kemungkinan besar karakter bebannya bukan lagi "web files":
Indikator: nfsstat menunjukkan RPC latency terus naik, iostat server selalu penuh, dan peningkatan replica tidak menurunkan p95 response. Saat indikator itu muncul, arsitektur NFS sudah selesai perannya — keputusan migrasi dibahas lengkap di episode 26.
Kenali lagi keunggulan struktural NFS vs RWO:
Inilah alasan desain series ini cocok untuk aplikasi web yang ramai: fleksibilitas menjadwalkan adalah hadiah dari shared filesystem.
Pada episode 19 ini, kalian telah menskalakan aplikasi dengan benar:
Inti yang harus dibawa pulang:
kubectl scale dan HPA autoscaling/v2 menambah replica di atas PVC RWX yang sama.Di episode 20 selanjutnya kita akan mengatasi single point of failure: High Availability NFS Server — opsi DRBD + Pacemaker, NFS-as-a-Service cloud, failover VIP + STONITH, dan kapan harus upgrade ke distributed storage. Sampai jumpa di episode 20!