Belajar Kubernetes Simple Shared Storage - Backup & Restore (Lab-Safe)
Episode 20 of 28

Belajar Kubernetes Simple Shared Storage - Backup & Restore (Lab-Safe)

Melindungi data lab dengan strategi berlapis yang terjangkau: pg_dump berjadwal untuk database, rsync untuk media, instalasi dan penggunaan Velero sebagai proteksi seluruh cluster, serta uji restore berkala sebagai bagian dari disiplin mingguan

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

Pendahuluan

Melindungi data lab tidak berarti membeli solusi mahal — itu berarti disiplin berlapis dengan alat yang klasik: rutin dump database, sinkronisasi file media, dan proteksi cluster menyeluruh dengan Velero. Episode 20 merangkai semuanya menjadi jadwal yang realistis.

Strategi Berlapis

Tidak satu pun alat meng-cover segalanya. Kombinasi yang tepat untuk stack kita:

LapisDataAlatFrekuensi
1Database (PostgreSQL)pg_dump + cron/K8s CronJob6 jam / harian
2Media (NFS RWX)rsync ke lokasi node lainmalam hari
3Cluster resources + PVCVeleroharian

Backup PostgreSQL

CronJob K8s yang mengeksekusi pg_dump terkompresi:

cronjob-pgdump.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: pgdump
spec:
  schedule: "0 */6 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: pgdump
              image: postgres:16-alpine
              env:
                - name: PGPASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: db-secret
                      key: DB_PASSWORD
              command:
                - /bin/sh
                - -c
                - |
                  PGPASSWORD=$PGPASSWORD pg_dump -h postgres -U laravel laravel \
                    | gzip > /backup/laravel-$(date +\%F_\%H).sql.gz
              volumeMounts:
                - name: backup
                  mountPath: /backup
          volumes:
            - name: backup
              persistentVolumeClaim:
                claimName: backup-storage
KubernetesApply CronJob
kubectl apply -f cronjob-pgdump.yaml
kubectl get cronjob

Note

Penyimpanan backup di PVC RWX aman — PVC dijamin tidak diakses dari aplikasi lain (isolasi satu PVC per aplikasi, episode 12). Simpan backup di PVC yang berbeda dari data aslinya.

Backup Media

Media di NFS RWX disinkronkan ke folder node lain (mis. node 2) tiap malam:

rsync media dari dalam Pod NFS
kubectl exec deploy/rwx-writer -- sh -c \
  'rsync -avz --delete /shared/ pokok:/mnt/backups/media/'

Atau CronJob yang menyalin dari volume NFS ke folder node:

CronJob rsync media
schedule: "0 1 * * *"
# container utama: rsync -av /media/ /backup-lokasi/
command: ["rsync", "-av", "/media/", "/backup-lokasi/"]

Sekali lagi target adalah lokasi berbeda dari sumber — mencegah satu kejadian menghapus keduanya.

Velero

Velero mencadangkan resources cluster DAN volume (fs-backup untuk hostpath):

Install Velero
velero install \
  --provider aws --bucket <bucket-velero> \
  --backup-location-config region=<region> \
  --snapshot-location-config region=<region> \
  --plugins velero/velero-plugin-for-aws:v1.9.0 \
  --default-volumes-to-fs-backup

Backup harian seluruh namespace apps:

KubernetesBuat backup terjadwal
velero schedule create daily-apps \
  --schedule "0 2 * * *" \
  --include-namespaces apps \
  --ttl 720h
KubernetesLihat backup
velero get backups

Restore cepat:

KubernetesRestore dari backup terakhir
velero restore create from-schedule --from-schedule daily-apps
kubectl get pvc -A

Warning

Backup yang tidak pernah di-restore bukanlah backup. Jadwalkan uji restore bulanan: restore ke namespace terpisah, bandingkan data, lalu bersihkan. Baru saat itulah proteksi benar-benar terverifikasi.

Jadwal dan Runbook

Rangkuman jadwal mingguan yang realistis:

text
Setiap 6 jam  : pg_dump CronJob
Pukul 01.00   : rsync media lane node lain
Pukul 02.00   : Velero backup resources + PVC (fs-backup)
Ahad          : uji restore cepat database ke namespace test pool

Tulis runbook di repo tim: nama backup yang dipakai, perintah restore, dan kapan harus memanggil siapa.

Penutup

Pada episode 20 ini, data lab tidak lagi berjalan tanpa jaring pengaman:

Inti yang harus dibawa pulang:

  • Strategi berlapis: pg_dump (DB) + rsync (media) + Velero (cluster).
  • CronJob 0 */6 * * * untuk dump gzip terkompresi.
  • Simpan target backup di lokasi fisik berbeda dari sumber.
  • Velero --default-volumes-to-fs-backup untuk volume hostpath.
  • Uji restore bulanan — disiplin inilah yang membuat backup bernilai.

Di episode 21 selanjutnya kita akan mengotomasi semuanya: CI/CD & GitOps — pipeline build image Laravel, penyematan konfigurasi storage, dan sinkronisasi manifest ke cluster secara otomatis. Sampai jumpa di episode 21!