Strategi scaling di kubectl RWO: memperbanyak replica Laravel sambil menjaga satu primary database, menambahkan read-replica PostgreSQL dengan volume RWO terpisah, mengandalkan HPA dan cache/Redis untuk beban besar, serta kapan harus memperbesar disk.

Semua komponen sudah rampung: database persisten, aplikasi terpenuhi, backup & monitoring jalan. Episode 19 berfokus pada skenario paling umum tim production: beban naik. Bagaimana menskalakan aplikasi dan database dalam model RWO yang "satu primary saja"?
Mengapa penting? Di sini kalian memahami prinsip scaling yang benar: database tidak di-scale dengan menambah writer, melainkan dengan menambah roda baca dan mengoptimalkan aplikasi. Memahami ini mencegah kalian membuat arsitektur yang justru menambah failure.
Aplikasi Laravel adalah stateless. Jumlah replicanya bisa naik-turun bebas:
spec:
replicas: 5 # dari 2DB tetap satu primary (postgres-0) dengan volume RWO. Ini desain yang sehat — tapi database kini menjadi bottleneck: semua replica mengirimi query ke satu instance.
Tambahkan read-replica PostgreSQL dengan volume RWO sendiri:
postgres-replica (replicas 2) dengan template volumeClaimTemplates sendiri.postgres-0 ke replika.Laravel mendukung hal ini via read/write connections:
DB_CONNECTION=pgsql
DB_HOST=postgres # primary (tulis)
DB_READ_HOST=postgres-replica # replika (baca)Dengan pola ini, beban baca menyebar ke replika, dan volume RWO tiap replika tetap eksklusif — tidak ada yang berbagi volume antar Node.
Untuk HA yang lebih matang, gunakan manajer replikasi seperti:
Keduanya berjalan di atas StatefulSet; setiap anggota memakai volume RWO miliknya sendiri. Ini mengubah "satu primary + replika manual" menjadi "cluster yang bisa saling ambil alih".
Catatan: RWO volume tetap per-Pod; hanya data yang direplikasi lewat log (WAL/streaming), bukan lewat berbagi filesystem.
Autoscale untuk aplikasi stateless — bukan DB:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: laravel-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: laravel
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70DB tetap stabil single-writable — tidak ikut auto-scale.
Untuk beban tinggi:
Ini meredam beban langsung ke database, memungkinkan DB session terus kecil.
Rutin cek penggunaan volume:
kubectl exec -it postgres-0 -- df -h /var/lib/postgresql/data
kubectl exec -it postgres-0 -- du -sh /var/lib/postgresql/dataJika tungku disk terlalu besar untuk satu node, tambah node worker + disk baru (episode 10) untuk menambah kapasitas pool.
Warning
Jangan pernah menskalakan DB dengan menambah primary (multi-writer) di atas volume RWO — dua writer di volume yang sama = korupsi. Konsep yang benar: primary + read-replica dengan replikasi streaming. RWO memang memperbolehkan hanya satu writer per volume; multi-primary memerlukan dirancang oleh DB itu sendiri (mis. PostgreSQL logical replication) yang kompleks.
Inti yang harus dibawa pulang:
Di episode 20 selanjutnya kita akan membahas volume expansion & allowVolumeExpansion untuk database yang terus bertumbuh — mengapa fitur ini wajib, cara kerja online expansion di Longhorn, manifest StorageClass dengan allowVolumeExpansion, dan verifikasi resize filesystem. Sampai jumpa di episode 20!