Episode ini membahas kontrol granular backup: memilih resource lewat label selector, menandai resource yang wajib/selalu dikecualikan dengan annotation velero.io, mengatur `--snapshot-volumes`, serta memperkenalkan hooks pre dan post untuk backup.

Hingga episode 6, scope backup kita tentukan lewat flag saat menjalankan perintah — --include-namespaces, --include-resources. Namun di dunia nyata, kebutuhan lebih halus: "backup semua yang berlabel tier=frontend", atau "resource ini tidak boleh ikut backup apa pun". Di episode 7 kita melompat ke level kontrol berikutnya: label, selector, dan annotations.
Label dan annotation adalah bahasa Kubernetes untuk "memberi tanda". Kalian meletakkan tanda itu sekali di resource, lalu Velero membaca tanda tersebut berulang kali — tanpa perlu mengingat flag panjang di setiap perintah. Ini pola yang sama dengan memberi tag "URGENT" pada berkas: sekali tulis, berfungsi di mana pun.
Label selector memfilter resource yang masuk backup berdasarkan label yang sudah menempel di resource:
velero backup create frontend-backup \
--include-namespaces app \
--selector app=nginxSelector mendukung ekspresi key=value dan kombinasi key in (v1, v2), key != v. Ini sangat berguna saat satu namespace berisi banyak aplikasi: backup cukup satu aplikasi tanpa perlu memecah namespace.
velero backup create web-backup \
--include-namespaces app \
--selector "tier in (frontend, api),env=prod"Selector yang sama juga bekerja di restore (episode 5). Kombinasi paling andal di produksi: backup per-application dengan selector, sehingga restore juga bisa dilakukan per-application. Ini pola yang sama dengan cara tim SRE memulihkan satu layanan tanpa menunggu seluruh namespace.
Ada resource yang tidak boleh ikut backup apa pun — misalnya namespace cache yang besar atau data duplikat. Tandai sekali dengan label:
kubectl label namespace cache velero.io/exclude-from-backup=trueLabel velero.io/exclude-from-backup=true pada sebuah namespace berarti namespace tersebut dikecualikan otomatis dari semua backup yang scope-nya mencakup namespace itu. Label yang sama bisa dipasang pada resource individual (misal PVC besar yang dibackup lewat mekanisme lain).
Kebalikan arah, kalian juga bisa menandai resource yang pasti ingin dibackup dengan label velero.io/backup=true, lalu memilihnya lewat --selector velero.io/backup=true — menjadi "allowlist" eksplisit yang mudah dibaca orang lain di cluster.
kubectl label deploy nginx velero.io/backup=true
velero backup create allowlist-backup \
--include-namespaces app \
--selector velero.io/backup=trueTip
Konsistenlah dengan satu konvensi. Kebanyakan tim memakai velero.io/exclude-from-backup=true sebagai mekanisme pengecualian default dan selector tier/app untuk memilih scope — dua-duanya bisa dipakai bersamaan tanpa konflik.
Velero bisa dibackup dengan dua mode volume: snapshot cloud dan file-level. Saat mengcreate backup, kalian mengontrolnya per-backup:
velero backup create metadata-only --include-namespaces app --snapshot-volumes=false--snapshot-volumes=false berarti hanya manifest — tidak ada data volume yang disalin. Kasus pakai: backup konfigurasi berkala yang murah (misal hourly) sementara data volume ditangani schedule lain, atau ketika node-agent tidak tersedia di cluster target.
Jika Velero diinstall dengan node-agent (--use-node-agent), flag lain yang mengatur file-level backup adalah --default-volumes-to-fs-backup. Tanpa flag ini, PVC tetap dibackup sebagai manifest saja kecuali diminta:
velero backup create with-data --include-namespaces app --default-volumes-to-fs-backupHooks adalah perintah yang dijalankan di dalam container sebelum dan sesudah backup. Ini jembatan menuju episode 9 yang detail; untuk episode 7 cukup kenali mekanismenya lewat annotation:
annotations:
pre.hook.backup.velero.io/command: '["/bin/sh", "-c", "echo pre-backup > /tmp/hook.log"]'
pre.hook.backup.velero.io/container: nginx
post.hook.backup.velero.io/command: '["/bin/sh", "-c", "echo post-backup >> /tmp/hook.log"]'
post.hook.backup.velero.io/container: nginxSaat backup dimulai, Velero menjalankan command pre di dalam container nginx, lalu membackup, lalu menjalankan command post. Kasus klasik: pg_dump sebelum backup dan resume setelahnya — kita praktikkan penuh di episode 9.
Warning
Hook pre/post menambah waktu backup dan bisa gagal (misal container mati atau timeout). Selalu set pre.hook.backup.velero.io/timeout dan tentukan perilaku on-error (Continue/Fail) — default Fail akan menggagalkan backup jika hook bermasalah.
Inti yang harus dibawa pulang:
--selector key=value memfilter resource dalam satu namespace saat backup/restore.velero.io/exclude-from-backup=true mengecualikan resource/namespace dari semua backup.--snapshot-volumes=false = backup manifest saja; --default-volumes-to-fs-backup = tambah file-level volume.pre.hook.backup.velero.io/* dan post.hook.backup.velero.io/*.on-error hook agar backup tidak gagal diam-diam.Di episode 8 selanjutnya kita bedah tuntas volume backup: perbandingan mendalam cloud snapshot (EBS/PD, cepat, butuh VSL) vs restic/kopia node-agent (file-level, portable, cocok untuk NFS) — lengkap dengan kapan memakai yang mana.