Belajar Kubernetes Shared Filesystem RWX - Deployment Multi-Replica dengan Shared PVC
Episode 10 of 28

Belajar Kubernetes Shared Filesystem RWX - Deployment Multi-Replica dengan Shared PVC

Menulis Deployment Laravel dengan tiga replica yang berbagi satu PVC RWX, memastikan semua Pod mount ke direktori yang sama, lalu membuktikan perilaku berbagi dengan uji tulis-baca antar Pod dan rollout restart

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Ini episode yang kalian tunggu-tunggu: aplikasi bertemu shared storage. Kita menulis Deployment Laravel dengan replicas: 3 di mana ketiga replica memakai satu PVC RWX yang sama. Saat selebrasi selesai, kita buktikan dengan eksperimen nyata bahwa file yang ditulis Pod A terlihat di Pod B.

Why penting: sampai episode ini, semua komponen berdiri sendiri-sendiri. Deployment adalah tempat mereka dirajut — image, Secret, probe (episode 9), dan volume RWX (episode 5). Pola yang kalian susun di sini akan dibawa ke seluruh sisa series.

deployment-laravel.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: laravel
  labels:
    app: laravel
spec:
  replicas: 3
  selector:
    matchLabels:
      app: laravel
  template:
    metadata:
      labels:
        app: laravel
    spec:
      imagePullSecrets:
        - name: registry-credentials
      securityContext:
        fsGroup: 33
      containers:
        - name: laravel-web
          image: ghcr.io/<user>/laravel-media:1.0.0
          ports:
            - containerPort: 80
          readinessProbe:
            httpGet:
              path: /
              port: 80
          volumeMounts:
            - name: rwx-media
              mountPath: /var/www/storage
            - name: rwx-public
              mountPath: /var/www/public/storage
      volumes:
        - name: rwx-media
          persistentVolumeClaim:
            claimName: rwx-media
        - name: rwx-public
          persistentVolumeClaim:
            claimName: rwx-media

Beberapa keputusan penting:

  • replicas: 3 — skala horizontal; semua replica memakai PVC yang sama.
  • volumeMountsstorage di-mount ke /var/www/storage, dan public/storage ke /var/www/public/storage (membuka akses file publik).
  • fsGroup: 33 — memetakan file volume ke grup GID 33 (www-data), sehingga file NFS yang ber-owner 33 terbaca; detail di episode 13.
  • imagePullSecrets — Secret registry dari episode 9 untuk image privat.

Note

Dua volume mount menunjuk ke PVC yang SAMA (rwx-media) di dua mount point berbeda. Ini sah dan umum — satu volume bisa di-mount di banyak titik dalam satu Pod.

Safety: Sudah Mewakili RWX?

Uji cepat: apakah tiga replica benar-benar berbagi?

  • Access mode PVC harus ReadWriteMany — bukan RWO (akses satu node) atau per-setiap-PVC.
  • Satu PVC untuk semua replica — kalau kalian membuat file terpisah per Pod, itu bukan shared storage.
KubernetesCek PVC dan deployment
kubectl get pvc rwx-media
kubectl get deployment laravel
kubectl get pods -l app=laravel -o wide

Perhatikan bahwa Pod tersebar di lebih dari satu worker — itu yang membedakan RWX dari RWO.

Simulasi Verifikasi

Tulis di Pod 1, Baca di Pod 2

Tulis file dari Pod 1
kubectl exec deploy/laravel -- sh -c \
  'echo "hello from pod1" > /var/www/storage/app/uploads/pod1.txt'
Baca file dari Pod 2
POD2=$(kubectl get pod -l app=laravel -o jsonpath='{.items[1].metadata.name}')
kubectl exec $POD2 -- cat /var/www/storage/app/uploads/pod1.txt

Output hello from pod1 membuktikan file yang ditulis Pod 1 langsung tersedia di Pod 2, meski Pod 2 hidup di node berbeda.

Rollout Restart Tidak Menghilangkan Data

KubernetesRestart semua replica
kubectl rollout restart deployment/laravel

Tunggu rollout selesai, lalu cek data tetap ada:

KubernetesCek data pasca-restart
kubectl rollout status deployment/laravel --timeout=120s
kubectl exec deploy/laravel -- ls -la /var/www/storage/app/uploads/

File pod1.txt tetap ada — karena data hidup di NFS server, bukan di disk Pod.

Warning

Jika eksperimen ini TIDAK berhasil (file tak terlihat antar Pod), kemungkinan besar kalian memakai PVC RWO, mount path berbeda, atau dua PVC terpisah. Tutup dulu, dan diagnosa dengan kubectl describe pod untuk melihat path mount aktual — kita bahas mendalam di episode 24.

Penutup

Pada episode 10 ini, kalian telah merajut aplikasi dengan shared storage:

Inti yang harus dibawa pulang:

  • Deployment replicas: 3 memakai satu PVC RWX melalui dua mount point.
  • fsGroup: 33 menyelaraskan permission file volume dengan user runtime.
  • Verifikasi RWX: kubectl exec tulis dari Pod 1, baca dari Pod 2.
  • rollout restart tidak menghilangkan data — bukti persistensi di NFS.

Di episode 11 selanjutnya kita akan expose aplikasi: Service, Ingress, dan akses media publik — Service ClusterIP, NGINX Ingress, alias /storage di Nginx, dan pengujian end-to-end upload hingga file tampil di URL publik. Sampai jumpa di episode 11!

Belajar Kubernetes Shared Filesystem RWX - Deployment Multi-Replica dengan Shared PVC | Belajar Kubernetes Shared Filesystem RWX