Terapkan resource kustom (CR) BackupLocation, ApplicationBackup, BackupSchedule, ApplicationRestore, dan DeleteRequest dengan kubectl untuk mengelola operasi backup dan pemulihan secara langsung.
Prasyarat
Pastikan Anda telah:
Add-on migrate-controller terinstal dan izin yang diperlukan telah dikonfigurasi.
Catatan penggunaan
Perbarui migrate-controller secara berkala. Versi lama dapat menyebabkan perilaku tak terduga. Lihat Kelola komponen.
Gunakan DeleteRequest untuk menghapus pekerjaan backup dan pemulihan.
kubectl deletetidak menghapus data backup terkait. Gunakan CRDeleteRequestsebagai gantinya. Lihat Langkah 4: Hapus resource backup dan pemulihan.Jangan hapus parameter dari file YAML contoh. Menghapus field wajib menyebabkan kegagalan backup dan pemulihan.
Resource
BackupLocationtidak dapat dihapus dari Backup Center karena repositori mungkin digunakan bersama oleh beberapa kluster.
Langkah 1: Buat repositori backup
Repositori backup (BackupLocation) menentukan bucket OSS tempat data backup disimpan. Buat BackupLocation yang sama pada kluster backup dan kluster pemulihan agar keduanya berbagi data yang sama.
Buat
backuplocation.yaml:apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupLocation metadata: name: <your-backup-location-name> # Harus mengikuti konvensi penamaan Kubernetes namespace: csdr spec: backupSyncPeriod: 0s config: network: internal # internal: kluster dan bucket harus berada di wilayah yang sama # public: tidak ada batasan wilayah region: cn-beijing # Wilayah tempat bucket OSS berada objectStorage: bucket: <cnfs-oss-your-bucket-name> # Harus diawali dengan cnfs-oss-; buat terlebih dahulu prefix: <your-subdirectory-name> # Opsional: simpan backup di subdirektori ini provider: alibabacloudTerapkan manifes pada kedua kluster:
kubectl apply -f backuplocation.yamlVerifikasi repositori tersedia di setiap kluster:
kubectl describe backuplocation <your-backup-location-name> -n csdrRepositori siap digunakan ketika
PhasemenampilkanAvailable:... Status: Last Validation Time: 2022-12-08T04:00:22Z Message: success by csdr-controller Phase: AvailableAvailablemengonfirmasi bahwa kluster dapat mengakses bucket OSS.
Langkah 2: Buat pekerjaan backup
Backup Center mendukung dua jenis backup:
Application Backup: Membuat backup resource Kubernetes (seperti StatefulSet dan Deployment) beserta Persistent Volume (PV)-nya.
Data Protection: Membuat backup hanya PV, tanpa resource aplikasi.
Lihat Skenario untuk Application Backup dan Data Protection.
Masing-masing jenis mendukung backup sesuai permintaan (on-demand) dan terjadwal.
Application backup
Backup sesuai permintaan
Buat
applicationbackup.yamldi kluster backup:PentingKonfigurasikan salah satu dari
includedResourcesatauexcludedResources, jangan keduanya. Jika keduanya kosong, semua tipe resource akan dibackup.Untuk pekerjaan backup yang dibuat melalui Konsol, nilai default
includeClusterResourcesadalahfalse.apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationBackup metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-backup-name> namespace: csdr spec: includedNamespaces: - default # Namespace yang dimasukkan dalam backup includedResources: - statefulset # Tipe resource yang dimasukkan (konfigurasikan hanya salah satu dari excludedResources: # includedResources atau excludedResources; jika keduanya - deployment # kosong, semua tipe resource akan dibackup) labelSelector: matchLabels: app: mysql-sts # Hanya resource dengan label ini yang dibackup includeClusterResources: false # false: hanya resource tingkat kluster yang direferensikan # oleh resource namespace terpilih yang dibackup # (misalnya ClusterRoles, CRDs) # true: semua resource tingkat kluster dibackup pvBackup: defaultPvBackup: false # false: hanya backup resource aplikasi # true: backup resource aplikasi dan PV storageLocation: <your-backup-repository-name> # Catatan: Jika kluster Anda sudah menggunakan Velero, bergabunglah # dengan grup pengguna DingTalk (Nomor Grup: 35532895) untuk bantuan. ttl: 720h0m0s # Periode retensi; rentang: 24h0m0s hingga 1572864h0m0sTerapkan manifes di kluster backup:
kubectl apply -f applicationbackup.yamlPeriksa status backup:
kubectl describe applicationbackup <your-application-backup-name> -n csdrBackup selesai ketika
Phaseberubah dariInprogressmenjadiCompleted:... Status: Completion Timestamp: 2022-12-05T15:02:35Z Expiration: 2023-01-04T15:02:25Z Message: success Phase: Completed
Backup terjadwal
Buat
backupschedule.yamldi kluster backup:apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupSchedule metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-backup-schedule-name> namespace: csdr spec: schedule: 1 4 * * * # Ekspresi cron: # ┌── menit (0–59) # │ ┌── jam (0–23) # │ │ ┌── tanggal (1–31) # │ │ │ ┌── bulan (1–12) # │ │ │ │ ┌── hari dalam minggu (0–6, Minggu=0) # │ │ │ │ │ # 1 4 * * * → dijalankan pukul 04:01 setiap hari # Untuk contoh cron lainnya, lihat Cara menentukan jadwal backup. template: includedNamespaces: - default includedResources: - statefulset excludedResources: - deployment labelSelector: matchLabels: app: mysql-sts includeClusterResources: false pvBackup: defaultPvBackup: true # Wajib untuk backup terjadwal; true: backup aplikasi + PV storageLocation: <your-backup-repository-name> # Catatan: Jika kluster Anda sudah menggunakan Velero, bergabunglah # dengan grup pengguna DingTalk (Nomor Grup: 35532895) untuk bantuan. ttl: 720h0m0sTerapkan manifes di kluster backup:
kubectl apply -f backupschedule.yamlVerifikasi jadwal aktif:
kubectl describe backupschedule <your-backup-schedule-name> -n csdrJadwal sedang berjalan jika
PhasemenampilkanEnabled:... Status: Last Backup: 2022-12-07T20:01:11Z Last Processed Time: 2022-12-08T13:05:37Z Phase: EnabledDaftar backup titik waktu yang dibuat oleh jadwal:
kubectl get applicationbackup -n csdr | grep <your-backup-schedule-name>Setiap eksekusi terjadwal membuat resource
ApplicationBackupdengan cap waktu:<your-backup-schedule-name>-20221205225845 2d22h <your-backup-schedule-name>-20221206040104 2d17h <your-backup-schedule-name>-20221207040137 41h <your-backup-schedule-name>-20221208040111 17hCatat nama-nama ini—Anda memerlukannya untuk membuat tugas pemulihan.
Data protection
Data Protection hanya membuat backup PV. Gunakan kind: ApplicationBackup dengan backupType: PvBackup (nilai tetap).
Backup sesuai permintaan
Buat
applicationbackup.yamldi kluster backup:PentingJika
pvcListdanstorageClassListkeduanya ditentukan,storageClassListakan diabaikan. Jika keduanya tidak ditentukan, semua PV di namespace yang ditentukan akan dibackup.apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationBackup metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-backup-name> namespace: csdr spec: backupType: PvBackup # Nilai tetap untuk Data Protection includedNamespaces: - default pvBackup: # Opsi 1: tentukan PVC berdasarkan nama pvcList: - name: essd-pvc-0 namespace: default - name: essd-pvc-1 namespace: default # Opsi 2: tentukan PVC berdasarkan kelas penyimpanan (diabaikan jika pvcList juga ditentukan) storageClassList: - disk-essd - disk-ssd # Jika pvcList maupun storageClassList tidak ditentukan, semua PV di namespace akan dibackup. storageLocation: <your-backup-repository-name> # Catatan: Jika kluster Anda sudah menggunakan Velero, bergabunglah # dengan grup pengguna DingTalk (Nomor Grup: 35532895) untuk bantuan. ttl: 720h0m0sTerapkan manifes di kluster backup:
kubectl apply -f applicationbackup.yamlPeriksa status backup:
kubectl describe applicationbackup <your-application-backup-name> -n csdrOutput yang diharapkan saat selesai:
... Status: Completion Timestamp: 2025-03-25T08:20:24Z Expiration: 2025-04-24T08:18:03Z Message: success Phase: Completed
Backup terjadwal
Buat
backupschedule.yamldi kluster backup:apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupSchedule metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-backup-schedule-name> namespace: csdr spec: schedule: 1 4 * * * template: backupType: PvBackup # Nilai tetap untuk Data Protection includedNamespaces: - default pvBackup: pvcList: - name: essd-pvc-0 namespace: default - name: essd-pvc-1 namespace: default storageClassList: - disk-essd - disk-ssd storageLocation: <your-backup-repository-name> ttl: 720h0m0sTerapkan manifes di kluster backup:
kubectl apply -f backupschedule.yamlVerifikasi jadwal aktif:
kubectl describe backupschedule <your-backup-schedule-name> -n csdrOutput yang diharapkan saat aktif:
... Status: Last Backup: 2025-03-25T09:24:38Z Phase: Enabled
Langkah 3: Buat tugas pemulihan
Buat
applicationrestore.yamldi kluster pemulihan:appRestoreOnly,preserveNodePorts,includedResources, danexcludedResourceshanya berlaku untuk Application Backup dan diabaikan dalam Data Protection.Untuk mengetahui nama PVC dan tipe data, jalankan
kubectl -ncsdr describe <backup-name>dan periksastatus.resourceList.dataResource.pvcBackupInfo.dataTypemenampilkanFileSystematauSnapshot;nameSpacedanpvcNamemengidentifikasi PVC tersebut.apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationRestore metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-restore-name> namespace: csdr spec: backupName: <your-application-backup-name> # Untuk backup terjadwal, tentukan nama # titik waktu, misalnya: # <your-backup-schedule-name>-20221205225845 includedNamespaces: - default # Namespace yang dipulihkan; biarkan kosong untuk memulihkan semua namespace appRestoreOnly: false # Hanya untuk Application Backup; diabaikan dalam Data Protection # false (default): pulihkan resource aplikasi dan data PV # true: hanya pulihkan resource aplikasi (gunakan saat membuat # PVC secara manual sebelum pemulihan) preserveNodePorts: true # Hanya untuk Application Backup; diabaikan dalam Data Protection # false: tetapkan nilai NodePort acak (gunakan saat memulihkan # ke kluster yang sama untuk menghindari konflik port) # true: pertahankan nilai NodePort asli (gunakan saat # memulihkan ke kluster berbeda) includedResources: - statefulset # Hanya untuk Application Backup; tipe resource yang dipulihkan excludedResources: - secret # Hanya untuk Application Backup; tipe resource yang dilewati namespaceMapping: <source-namespace>: <target-namespace> # Petakan ulang namespace selama pemulihan; # namespace target dibuat jika belum ada imageRegistryMapping: <old-image-registry>: <new-image-registry> # Petakan ulang registri image untuk semua # image yang alamatnya diawali dengan # awalan sumber convertedarg: # Konversi StorageClass untuk volume bertipe sistem file # (OSS, Penyimpanan File NAS (NAS), Cloud Parallel File # Storage (CPFS), atau penyimpanan lokal) ke StorageClass # Cloud Disk atau Penyimpanan File NAS - convertToStorageClassType: alicloud-disk-topology-alltype # StorageClass target # (harus ada di kluster) convertToAccessModes: - ReadWriteOnce # Wajib saat mengonversi PV dengan mode akses ReadWriteMany atau # ReadOnlyMany ke StorageClass Cloud Disk namespace: nas persistentVolumeClaim: pvc-nas - convertToStorageClassType: alicloud-disk-topology-alltype namespace: oss persistentVolumeClaim: pvc-ossTerapkan manifes di kluster pemulihan:
kubectl apply -f applicationrestore.yamlPeriksa status pemulihan:
kubectl describe applicationrestore <your-application-restore-name> -n csdrPemulihan selesai ketika
Phaseberubah dariInprogressmenjadiCompleted:... Status: Completion Timestamp: 2022-12-05T15:52:19Z Phase: Completed Start Timestamp: 2022-12-05T15:52:09Z
Langkah 4: Hapus resource backup dan pemulihan
Jangan gunakan kubectl delete untuk menghapus resource ApplicationBackup atau ApplicationRestore. kubectl delete tidak menghapus data terkait. Gunakan CR DeleteRequest sebagai gantinya.
Hapus rencana backup terjadwal
Hapus resource BackupSchedule untuk menghentikan jadwal dan mencegah backup di masa depan:
kubectl delete backupschedule <your-backup-schedule-name> -n csdrHapus pekerjaan backup atau tugas pemulihan
Buat
deleterequest.yamldi kluster tempat resource berada:Menghapus pekerjaan backup tidak memengaruhi replika yang telah disinkronkan. Menghapus tugas pemulihan tidak memengaruhi resource yang telah dipulihkan.
apiVersion: csdr.alibabacloud.com/v1beta1 kind: DeleteRequest metadata: name: <object-name>-dbr # Tambahkan -dbr ke nama resource yang akan dihapus namespace: csdr spec: deleteObjectName: <object-name> # Nama resource ApplicationBackup atau # ApplicationRestore yang akan dihapus deleteObjectType: "Backup" # "Backup": menghapus pekerjaan ApplicationBackup # "Restore": menghapus tugas ApplicationRestoreTerapkan permintaan penghapusan:
kubectl apply -f deleterequest.yamlVerifikasi penghapusan. Baik resource target maupun CR
DeleteRequestakan dihapus secara otomatis. Untuk pekerjaan backup:kubectl get applicationbackup <your-application-backup-name> -n csdrOutput yang diharapkan:
Error from server (NotFound): applicationbackups.csdr.alibabacloud.com "your-application-backup-name" not foundkubectl get deleterequest <your-application-backup-name>-dbr -n csdrOutput yang diharapkan:
Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-backup-name-dbr" not foundUntuk tugas pemulihan:
kubectl get applicationrestore <your-application-restore-name> -n csdrOutput yang diharapkan:
Error from server (NotFound): applicationrestores.csdr.alibabacloud.com "your-application-restore-name" not foundkubectl get deleterequest <your-application-restore-name>-dbr -n csdrOutput yang diharapkan:
Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-restore-name-dbr" not found
Langkah selanjutnya
Untuk mengelola backup dari Konsol ACK alih-alih
kubectl:Lihat Gunakan Backup Center untuk migrasi aplikasi dari kluster Kubernetes versi lama.