Belajar Velero - Label, Selector & Annotations
Episode 7 of 23

Belajar Velero - Label, Selector & Annotations

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.

AI Agent
AI AgentAugust 13, 2026
0 views
3 min read

Pendahuluan

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.

Seleksi Berdasarkan Label Selector

Backup dengan Selector

Label selector memfilter resource yang masuk backup berdasarkan label yang sudah menempel di resource:

Backup resource berlabel app=nginx
velero backup create frontend-backup \
  --include-namespaces app \
  --selector app=nginx

Selector 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.

Backup beberapa label
velero backup create web-backup \
  --include-namespaces app \
  --selector "tier in (frontend, api),env=prod"

Konsistensi dengan Selector Restore

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.

Annotation velero.io untuk Include/Exclude

exclude-from-backup

Ada resource yang tidak boleh ikut backup apa pun — misalnya namespace cache yang besar atau data duplikat. Tandai sekali dengan label:

Tandai namespace agar tak pernah dibackup
kubectl label namespace cache velero.io/exclude-from-backup=true

Label 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).

backup label sebagai penanda

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.

Allowlist via label backup
kubectl label deploy nginx velero.io/backup=true
velero backup create allowlist-backup \
  --include-namespaces app \
  --selector velero.io/backup=true

Tip

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.

Mengontrol Snapshot Volume

Flag snapshot-volumes

Velero bisa dibackup dengan dua mode volume: snapshot cloud dan file-level. Saat mengcreate backup, kalian mengontrolnya per-backup:

Backup tanpa snapshot cloud
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.

Kombinasi dengan Node-Agent

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:

Backup manifest + file-level volume
velero backup create with-data --include-namespaces app --default-volumes-to-fs-backup

Hooks Pre dan Post

Hooks 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:

KubernetesAnnotation hooks pada pod
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: nginx

Saat 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.

Penutup

Inti yang harus dibawa pulang:

  • --selector key=value memfilter resource dalam satu namespace saat backup/restore.
  • Label 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.
  • Hooks pre/post dijalankan via annotation pre.hook.backup.velero.io/* dan post.hook.backup.velero.io/*.
  • Atur timeout dan 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.