All Products
Search
Document Center

Container Service for Kubernetes:Backup dan pulihkan aplikasi kluster dengan kubectl

Last Updated:Jun 16, 2026

Terapkan resource kustom (CR) BackupLocation, ApplicationBackup, BackupSchedule, ApplicationRestore, dan DeleteRequest dengan kubectl untuk mengelola operasi backup dan pemulihan secara langsung.

Prasyarat

Pastikan Anda telah:

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 delete tidak menghapus data backup terkait. Gunakan CR DeleteRequest sebagai 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 BackupLocation tidak 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.

  1. 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: alibabacloud
  2. Terapkan manifes pada kedua kluster:

    kubectl apply -f backuplocation.yaml
  3. Verifikasi repositori tersedia di setiap kluster:

    kubectl describe backuplocation <your-backup-location-name> -n csdr

    Repositori siap digunakan ketika Phase menampilkan Available:

    ...
    Status:
      Last Validation Time:  2022-12-08T04:00:22Z
      Message:               success by csdr-controller
      Phase:                 Available

    Available mengonfirmasi 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

  1. Buat applicationbackup.yaml di kluster backup:

    Penting

    Konfigurasikan salah satu dari includedResources atau excludedResources, jangan keduanya. Jika keduanya kosong, semua tipe resource akan dibackup.

    Untuk pekerjaan backup yang dibuat melalui Konsol, nilai default includeClusterResources adalah false.
    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 1572864h0m0s
  2. Terapkan manifes di kluster backup:

    kubectl apply -f applicationbackup.yaml
  3. Periksa status backup:

    kubectl describe applicationbackup <your-application-backup-name> -n csdr

    Backup selesai ketika Phase berubah dari Inprogress menjadi Completed:

    ...
    Status:
      Completion Timestamp:  2022-12-05T15:02:35Z
      Expiration:            2023-01-04T15:02:25Z
      Message:               success
      Phase:                 Completed

Backup terjadwal

  1. Buat backupschedule.yaml di 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: 720h0m0s

    Lihat Cara menentukan jadwal backup.

  2. Terapkan manifes di kluster backup:

    kubectl apply -f backupschedule.yaml
  3. Verifikasi jadwal aktif:

    kubectl describe backupschedule <your-backup-schedule-name> -n csdr

    Jadwal sedang berjalan jika Phase menampilkan Enabled:

    ...
    Status:
      Last Backup:          2022-12-07T20:01:11Z
      Last Processed Time:  2022-12-08T13:05:37Z
      Phase:                Enabled
  4. Daftar backup titik waktu yang dibuat oleh jadwal:

    kubectl get applicationbackup -n csdr | grep <your-backup-schedule-name>

    Setiap eksekusi terjadwal membuat resource ApplicationBackup dengan 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   17h

    Catat 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

  1. Buat applicationbackup.yaml di kluster backup:

    Penting

    Jika pvcList dan storageClassList keduanya ditentukan, storageClassList akan 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: 720h0m0s
  2. Terapkan manifes di kluster backup:

    kubectl apply -f applicationbackup.yaml
  3. Periksa status backup:

    kubectl describe applicationbackup <your-application-backup-name> -n csdr

    Output yang diharapkan saat selesai:

    ...
    Status:
      Completion Timestamp:  2025-03-25T08:20:24Z
      Expiration:            2025-04-24T08:18:03Z
      Message:               success
      Phase:                 Completed

Backup terjadwal

  1. Buat backupschedule.yaml di 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: 720h0m0s
  2. Terapkan manifes di kluster backup:

    kubectl apply -f backupschedule.yaml
  3. Verifikasi jadwal aktif:

    kubectl describe backupschedule <your-backup-schedule-name> -n csdr

    Output yang diharapkan saat aktif:

    ...
    Status:
      Last Backup:  2025-03-25T09:24:38Z
      Phase:        Enabled

Langkah 3: Buat tugas pemulihan

  1. Buat applicationrestore.yaml di kluster pemulihan:

    appRestoreOnly, preserveNodePorts, includedResources, dan excludedResources hanya berlaku untuk Application Backup dan diabaikan dalam Data Protection.
    Untuk mengetahui nama PVC dan tipe data, jalankan kubectl -ncsdr describe <backup-name> dan periksa status.resourceList.dataResource.pvcBackupInfo. dataType menampilkan FileSystem atau Snapshot; nameSpace dan pvcName mengidentifikasi 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-oss
  2. Terapkan manifes di kluster pemulihan:

    kubectl apply -f applicationrestore.yaml
  3. Periksa status pemulihan:

    kubectl describe applicationrestore <your-application-restore-name> -n csdr

    Pemulihan selesai ketika Phase berubah dari Inprogress menjadi Completed:

    ...
    Status:
      Completion Timestamp:  2022-12-05T15:52:19Z
      Phase:                 Completed
      Start Timestamp:       2022-12-05T15:52:09Z

Langkah 4: Hapus resource backup dan pemulihan

Penting

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 csdr

Hapus pekerjaan backup atau tugas pemulihan

  1. Buat deleterequest.yaml di 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 ApplicationRestore
  2. Terapkan permintaan penghapusan:

    kubectl apply -f deleterequest.yaml
  3. Verifikasi penghapusan. Baik resource target maupun CR DeleteRequest akan dihapus secara otomatis. Untuk pekerjaan backup:

    kubectl get applicationbackup <your-application-backup-name> -n csdr

    Output yang diharapkan:

    Error from server (NotFound): applicationbackups.csdr.alibabacloud.com "your-application-backup-name" not found
    kubectl get deleterequest <your-application-backup-name>-dbr -n csdr

    Output yang diharapkan:

    Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-backup-name-dbr" not found

    Untuk tugas pemulihan:

    kubectl get applicationrestore <your-application-restore-name> -n csdr

    Output yang diharapkan:

    Error from server (NotFound): applicationrestores.csdr.alibabacloud.com "your-application-restore-name" not found
    kubectl get deleterequest <your-application-restore-name>-dbr -n csdr

    Output yang diharapkan:

    Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-restore-name-dbr" not found

Langkah selanjutnya