All Products
Search
Document Center

Container Service for Kubernetes:Backup dan pulihkan aplikasi menggunakan Terraform

Last Updated:Apr 21, 2026

Gunakan CLI Terraform untuk men-deploy custom resources (CRs) guna mengelola repositori backup, backup aplikasi, dan pemulihan aplikasi di kluster ACK Anda. Pendekatan ini memungkinkan Anda mengelola seluruh alur kerja backup dan migrasi sebagai infrastruktur kode.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Catatan penggunaan

  • Jangan gunakan kubectl delete untuk menghapus pekerjaan backup atau pemulihan. Sumber daya cloud terkait mungkin tidak sepenuhnya dibersihkan. Untuk menghapus sumber daya terkait backup, ikuti Langkah 5: Hapus sumber daya dari pusat cadangan.

  • Perbarui komponen migrate-controller ke versi terbaru. Untuk informasi lebih lanjut, lihat Kelola komponen.

  • Jangan hapus parameter dari kode contoh. Parameter yang hilang dapat mencegah backup dipulihkan.

Langkah 1: Asosiasikan kluster

Gunakan provider Kubernetes untuk menghubungkan Terraform ke kluster Anda. Untuk informasi lebih lanjut, lihat Kubernetes Provider.

Contoh berikut menggunakan file kubeconfig untuk mengasosiasikan kluster.

  1. Buat direktori kerja Terraform.

  2. Di direktori kerja, buat file konfigurasi bernama csdr.tf. Tambahkan konten berikut untuk mengonfigurasi provider Kubernetes:

    provider "kubernetes" {
      config_path = "~/.kube/config"
    }
  3. Jalankan perintah berikut untuk menginisialisasi lingkungan runtime Terraform:

    terraform init

    Output berikut menunjukkan bahwa Terraform telah berhasil diinisialisasi:

    Expand to view the output

    Initializing the backend...
    
    Initializing provider plugins...
    - Reusing previous version of hashicorp/alicloud from the dependency lock file
    - Reusing previous version of hashicorp/kubernetes from the dependency lock file
    - Using previously-installed hashicorp/alicloud v1.223.1
    - Using previously-installed hashicorp/kubernetes v2.30.0
    
    ╷
    │ Warning: Additional provider information from registry
    │
    │ The remote registry returned warnings for registry.terraform.io/hashicorp/alicloud:
    │ - For users on Terraform 0.13 or greater, this provider has moved to aliyun/alicloud. Please
    │ update your source in required_providers.
    ╵
    
    Terraform has been successfully initialized!

Langkah 2: Buat repositori backup

  1. Tambahkan konten berikut ke csdr.tf dan sesuaikan parameter sesuai kebutuhan:

    ParameterWajibDeskripsi
    nameYaNama repositori backup. Harus mematuhi konvensi penamaan Kubernetes.
    networkYaMode jaringan untuk mengakses bucket OSS. Nilai yang valid: internal (semua kluster yang diasosiasikan harus berada di wilayah yang sama dengan bucket) dan public (tidak ada batasan wilayah).
    regionYaWilayah tempat bucket OSS berada.
    bucketYaNama bucket OSS. Harus diawali dengan cnfs-oss-.
    prefixTidakSubdirektori dalam bucket OSS. Jika ditentukan, backup disimpan di subdirektori ini.
    resource "kubernetes_manifest" "backuplocation-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "BackupLocation"
        metadata = {
          name = "<yourBackupLocationName>"
          namespace = "csdr"
        }
    
        spec = {
          backupSyncPeriod = "0s"
          config = {
            network = "internal"
            region  = "cn-beijing"
          }
          objectStorage = {
            bucket  = "<cnfs-oss-yourBucketName>"
            prefix  = "<subDir>"
          }
          provider = "alibabacloud"
        }
      }
      wait {
        fields = {
          "status.phase" = "Available"
        }
      }
    
      timeouts {
        create = "10m"
      }
    }
  2. Jalankan perintah berikut untuk melihat pratinjau paket sumber daya:

    terraform plan
  3. Jalankan perintah berikut untuk membuat repositori backup:

    terraform apply

    Output berikut menunjukkan bahwa repositori backup telah dibuat:

    Expand to view the response

    kubernetes_manifest.backuplocation-demo: Creating...
    kubernetes_manifest.backuplocation-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Langkah 3: Buat pekerjaan backup

Pilih jenis backup berdasarkan skenario Anda:

  • Backup aplikasi: Membuat backup aplikasi yang berjalan di kluster, termasuk sumber daya kluster dan volume persisten yang digunakan oleh aplikasi tersebut.

  • Perlindungan data: Membuat backup hanya data volume persisten. Hanya persistent volume claims (PVCs) dan PVs yang disertakan.

Untuk perbandingan kedua mode ini, lihat Skenario untuk backup aplikasi dan perlindungan data.

Backup aplikasi

Buat backup instan

  1. Tambahkan konten berikut ke csdr.tf dan sesuaikan parameter sesuai kebutuhan:

    Blok wait dikomentari karena durasi backup bervariasi. Untuk membuat Terraform menunggu hingga selesai, hapus komentar pada blok wait dan timeouts serta sesuaikan timeout sesuai kebutuhan.

    ParameterWajibDeskripsi
    csdr.alibabacloud.com/backuplocationsYaInformasi tentang repositori backup. Harus sesuai dengan konfigurasi repositori backup.
    nameYaNama backup instan.
    includedNamespacesYaNamespace yang akan disertakan dalam backup.
    includedResourcesTidakJenis sumber daya kluster yang akan disertakan. Konfigurasikan hanya salah satu dari includedResources atau excludedResources. Jika keduanya dikosongkan, semua jenis sumber daya akan dibackup.
    excludedResourcesTidakJenis sumber daya kluster yang akan dikecualikan. Konfigurasikan hanya salah satu dari includedResources atau excludedResources. Jika keduanya dikosongkan, semua jenis sumber daya akan dibackup.
    matchLabelsTidakLabel yang digunakan untuk memfilter sumber daya. Hanya sumber daya dengan label yang sesuai yang akan dibackup.
    includeClusterResourcesTidakApakah akan membackup sumber daya tingkat kluster (misalnya, StorageClasses, CustomResourceDefinitions (CRDs), dan webhook). true: backup semua sumber daya tingkat kluster. false (default di Konsol ACK): backup hanya sumber daya tingkat kluster yang dirujuk oleh sumber daya tingkat namespace di namespace yang ditentukan — misalnya, cluster role yang digunakan oleh service account pod, atau CRD untuk resource kustom.
    defaultPvBackupTidakApakah akan menyertakan volume persisten. true: backup aplikasi dan volume persistennya. false: backup hanya aplikasi.
    storageLocationYaNama repositori backup. Jika kluster Anda sudah menggunakan Velero, bergabunglah dengan grup DingTalk (ID: 35532895) untuk bantuan.
    ttlYaPeriode retensi. Data tidak dapat dipulihkan setelah backup kedaluwarsa. Format: 720h0m0s. Rentang valid: 24h0m0s hingga 1572864h0m0s.
    resource "kubernetes_manifest" "applicationbackup-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "ApplicationBackup"
        metadata = {
          name      = "<yourApplicationBackupName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          includedNamespaces      = ["default","default1"]
          includedResources       = ["statefulset"]
          excludedResources       = ["excludedResources"]
          labelSelector = {
            matchLabels = {
              "app" = "mysql-sts"
            }
          }
          pvBackup = {
            defaultPvBackup = "false"
          }
          storageLocation          = "<yourBackupLocationName>"
          ttl                      = "720h0m0s"
          includeClusterResources  = "false"
        }
      }
    
      # The backup is complete when status.phase changes to Completed.
      # Backup duration depends on the number of resources and the volume of persistent volume data.
      #wait {
      #  fields = {
      #    "status.phase" = "Completed"
      #  }
      #}
    
      #timeouts {
      #  create = "60m"
      #}
     }
  2. Jalankan perintah berikut untuk melihat pratinjau paket sumber daya:

    terraform plan
  3. Jalankan perintah berikut untuk membuat backup instan:

    terraform apply

    Output berikut menunjukkan bahwa pekerjaan backup telah dibuat:

    kubernetes_manifest.applicationbackup-demo: Creating...
    kubernetes_manifest.applicationbackup-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Buat jadwal backup

  1. Tambahkan konten berikut ke csdr.tf dan sesuaikan parameter sesuai kebutuhan: <details> <summary>View configuration file</summary>

    ParameterWajibDeskripsi
    csdr.alibabacloud.com/backuplocationsYaInformasi tentang repositori backup. Harus sesuai dengan konfigurasi repositori backup.
    nameYaNama jadwal backup.
    scheduleYaJadwal backup dalam format cron. Urutan field cron: menit jam hari-bulan bulan hari-minggu. Misalnya, "1 4 * * *" menjalankan backup setiap hari pukul 04:01. Untuk detail format, lihat Bagaimana cara menentukan siklus backup saat membuat rencana cadangan?. Referensi cepat: # ┌── menit (0–59) ┌── jam (0–23) ┌── hari-bulan (1–31) ┌── bulan (1–12) ┌── hari-minggu (0–6, Minggu=0)
    includedNamespacesYaNamespace yang akan disertakan dalam backup.
    includedResourcesTidakJenis sumber daya kluster yang akan disertakan. Konfigurasikan hanya salah satu dari includedResources atau excludedResources. Jika keduanya dikosongkan, semua jenis sumber daya akan dibackup.
    excludedResourcesTidakJenis sumber daya kluster yang akan dikecualikan. Konfigurasikan hanya salah satu dari includedResources atau excludedResources. Jika keduanya dikosongkan, semua jenis sumber daya akan dibackup.
    matchLabelsTidakLabel yang digunakan untuk memfilter sumber daya. Hanya sumber daya dengan label yang sesuai yang akan dibackup.
    includeClusterResourcesTidakApakah akan membackup sumber daya tingkat kluster. Lihat deskripsi pada tabel parameter backup instan di atas.
    defaultPvBackupYaApakah akan menyertakan volume persisten. true: backup aplikasi dan volume persistennya. false: backup hanya aplikasi.
    storageLocationYaNama repositori backup. Jika kluster Anda sudah menggunakan Velero, bergabunglah dengan grup DingTalk (ID: 35532895) untuk bantuan.
    ttlYaPeriode retensi. Format: 720h0m0s. Rentang valid: 24h0m0s hingga 1572864h0m0s.

    Expand to view the configuration file

    resource "kubernetes_manifest" "backupschedule-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "BackupSchedule"
        metadata = {
          name      = "<yourBackupScheduleName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          schedule = "1 4 * * *"
          template = {
            includedNamespaces      = ["default","default1"]
            includedResources       = ["statefulset"]
            excludedResources       = ["excludedResources"]
            labelSelector = {
              matchLabels = {
                "app" = "mysql-sts"
              }
            }
            pvBackup = {
              defaultPvBackup = "false"
            }
            storageLocation          = "<yourBackupLocationName>"
            ttl                      = "720h0m0s"
            includeClusterResources  = "false"
          }
        }
      }
      wait {
        fields = {
          "status.phase" = "Enabled"
        }
      }
      timeouts {
        create = "10m"
      }
    }
  2. Jalankan perintah berikut untuk melihat pratinjau paket sumber daya:

    terraform plan

    Expand to view the output

      # kubernetes_manifest.backupschedule-demo will be created
      + resource "kubernetes_manifest" "backupschedule-demo" {
          + manifest = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "BackupSchedule"
              + metadata   = {
                  + annotations = {
                      + "csdr.alibabacloud.com/backuplocations" = "{name:<yourBackupLocationName>,region:cn-beijing,bucket:<cnfs-oss-yourBucketName>,prefix:<subDir>,provider:alibabacloud}"
                    }
                  + name        = "<yourBackupScheduleName>"
                  + namespace   = "csdr"
                }
              + spec       = {
                  + schedule = "1 4 * * *"
                  + template = {
                      + excludedResources  = [
                          + "excludedResources",
                        ]
                      + includedNamespaces = [
                          + "default",
                          + "default1",
                        ]
                      + includedResources  = [
                          + "statefulset",
                        ]
                      + labelSelector      = {
                          + matchLabels = {
                              + app = "mysql-sts"
                            }
                        }
                      + pvBackup           = {
                          + defaultPvBackup = "false"
                        }
                      + storageLocation    = "<yourBackupLocationName>"
                      + ttl                = "720h0m0s"
                    }
                }
            }
          + object   = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "BackupSchedule"
              + metadata   = {
                  + annotations                = (known after apply)
                  + creationTimestamp          = (known after apply)
                  + deletionGracePeriodSeconds = (known after apply)
                  + deletionTimestamp          = (known after apply)
                  + finalizers                 = (known after apply)
                  + generateName               = (known after apply)
                  + generation                 = (known after apply)
                  + labels                     = (known after apply)
                  + managedFields              = (known after apply)
                  + name                       = "<yourBackupScheduleName>"
                  + namespace                  = "csdr"
                  + ownerReferences            = (known after apply)
                  + resourceVersion            = (known after apply)
                  + selfLink                   = (known after apply)
                  + uid                        = (known after apply)
                }
              + spec       = {
                  + backupAll = (known after apply)
                  + paused    = (known after apply)
                  + schedule  = "1 4 * * *"
                  + template  = {
                      + backupType              = (known after apply)
                      + excludedNamespaces      = (known after apply)
                      + excludedResources       = [
                          + "excludedResources",
                        ]
                      + includeClusterResources = (known after apply)
                      + includedNamespaces      = [
                          + "default",
                          + "default1",
                        ]
                      + includedResources       = [
                          + "statefulset",
                        ]
                      + labelSelector           = {
                          + matchExpressions = (known after apply)
                          + matchLabels      = {
                              + app = "mysql-sts"
                            }
                        }
                      + orderedResources        = (known after apply)
                      + pvBackup                = {
                          + defaultPvBackup  = false
                          + pvcList          = (known after apply)
                          + pvcSelector      = {
                              + matchExpressions = (known after apply)
                              + matchLabels      = (known after apply)
                            }
                          + snapshotPostRule = (known after apply)
                          + snapshotPreRule  = (known after apply)
                        }
                      + storageLocation         = "<yourBackupLocationName>"
                      + ttl                     = "720h0m0s"
                    }
                }
            }
          + timeouts {
              + create = "10m"
            }
    
          + wait {
              + fields = {
                  + "status.phase" = "Enabled"
                }
            }
        }
  3. Jalankan perintah berikut untuk membuat jadwal backup:

    terraform apply

    Output berikut menunjukkan bahwa jadwal backup telah dibuat:

    kubernetes_manifest.backupschedule-demo: Creating...
    kubernetes_manifest.backupschedule-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Operasi lainnya

Temukan backup yang dibuat oleh jadwal backup

Gunakan labelSelector untuk mencantumkan backup yang dibuat oleh jadwal tertentu:

data "kubernetes_resources" "list-applicationbackup" {
  api_version    = "csdr.alibabacloud.com/v1beta1"
  kind           = "ApplicationBackup"
  namespace      = "csdr"
  label_selector = "csdr/schedule-name=terraform-schedule-test"
}

output "applicationbackup-name" {
  value = data.kubernetes_resources.list-applicationbackup.objects
}

Ubah jadwal backup

  1. Atur spec.paused menjadi true untuk menjeda jadwal, lalu ubah field lain seperti spec.schedule:

    Expand to view the configuration file

    resource "kubernetes_manifest" "backupschedule-demo" {
      manifest = {
        apiVersion = "csdr.alibabacloud.com/v1beta1"
        kind       = "BackupSchedule"
        metadata = {
          name      = "<yourBackupScheduleName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          # Pause the backup schedule.
          paused = "true"
          # Modify the backup cycle.
          schedule = "0 5 * * *"
          template = {
            includedNamespaces      = ["default","default1"]
            includedResources       = ["statefulset"]
            excludedResources       = ["excludedResources"]
            labelSelector = {
              matchLabels = {
                "app" = "mysql-sts"
              }
            }
            pvBackup = {
              defaultPvBackup = "false"
            }
            storageLocation          = "vault-a"
            ttl                      = "720h0m0s"
            includeClusterResources  = "false"
          }
        }
      }
      wait {
        fields = {
          # After pausing, the expected status is Paused.
          "status.phase" = "Paused"
        }
      }
      timeouts {
        create = "10m"
      }
    }
  2. Jalankan perintah berikut untuk melihat pratinjau perubahan:

    terraform plan

    Output berikut menunjukkan bahwa paket sumber daya telah dibuat:

    kubernetes_manifest.backupschedule-demo: Refreshing state...
    
    Terraform used the selected providers to generate the following execution plan. Resource actions
    are indicated with the following symbols:
      ~ update in-place
    
    Terraform will perform the following actions:
    
      # kubernetes_manifest.backupschedule-demo will be updated in-place
      ~ resource "kubernetes_manifest" "backupschedule-demo" {
          ~ manifest = {
              ~ spec       = {
                  ~ paused   = "false" -> "true"
                  ~ schedule = "1 4 * * *" -> "0 5 * * *"
                    # (1 unchanged attribute hidden)
                }
                # (3 unchanged attributes hidden)
            }
          ~ object   = {
              ~ spec       = {
                  ~ paused    = false -> true
                  ~ schedule  = "1 4 * * *" -> "0 5 * * *"
                    # (2 unchanged attributes hidden)
                }
                # (3 unchanged attributes hidden)
            }
    
          ~ wait {
              ~ fields = {
                  ~ "status.phase" = "Enabled" -> "Paused"
                }
            }
    
            # (1 unchanged block hidden)
        }
    
    Plan: 0 to add, 1 to change, 0 to destroy.
  3. Jalankan perintah berikut untuk menerapkan perubahan:

    terraform apply

    Output berikut menunjukkan bahwa jadwal backup telah diperbarui:

    kubernetes_manifest.backupschedule-demo: Modifying...
    kubernetes_manifest.backupschedule-demo: Modifications complete after 1s
    
    Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

Perlindungan data

Buat backup instan

  1. Tambahkan konten berikut ke csdr.tf dan sesuaikan parameter sesuai kebutuhan:

    resource "kubernetes_manifest" "applicationbackup-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "ApplicationBackup"
        metadata = {
          name      = "<yourApplicationBackupName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          backupType         = "PvBackup"
          includedNamespaces = ["default","default1"]
          pvBackup = {
            pvcList = [
              {
                namespace = "default"
                name      = "pvc-nas"
              },
              {
                namespace = "default1"
                name      = "pvc-oss"
              }
            ]
            storageClassList = ["disk-essd","disk-ssd"]
          }
          storageLocation = "<yourBackupLocationName>"
          ttl             = "720h0m0s"
        }
      }
    
      # The backup is complete when status.phase changes to Completed.
      # Backup duration depends on the volume of persistent volume data.
      #wait {
      #  fields = {
      #    "status.phase" = "Completed"
      #  }
      #}
    
      #timeouts {
      #  create = "60m"
      #}
     }
    }
  2. Jalankan perintah berikut untuk melihat pratinjau paket sumber daya:

    terraform plan
  3. Jalankan perintah berikut untuk membuat backup instan:

    terraform apply

    Output berikut menunjukkan bahwa pekerjaan backup telah dibuat:

    Expand to view the output

    kubernetes_manifest.applicationbackup-demo: Creating...
    kubernetes_manifest.applicationbackup-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Buat rencana backup

  1. Tambahkan konten berikut ke csdr.tf dan sesuaikan parameter sesuai kebutuhan: <details> <summary>View configuration file</summary>

    ParameterWajibDeskripsi
    csdr.alibabacloud.com/backuplocationsYaInformasi tentang repositori backup. Harus sesuai dengan konfigurasi repositori backup.
    nameYaNama rencana backup.
    scheduleYaJadwal backup dalam format cron. Urutan field cron: menit jam hari-bulan bulan hari-minggu. Untuk detail format, lihat Bagaimana cara menentukan siklus backup saat membuat rencana cadangan?.
    includedNamespacesYaNamespace yang akan disertakan dalam backup.
    pvcListTidakMenentukan PVC mana yang akan dibackup berdasarkan nama dan namespace. Jika pvcList dan storageClassList keduanya ditentukan, storageClassList diabaikan. Jika tidak ada yang ditentukan, semua PV di namespace yang ditentukan akan dibackup.
    storageClassListTidakMenentukan StorageClasses dari PV yang akan dibackup.
    storageLocationYaNama repositori backup. Jika kluster Anda sudah menggunakan Velero, bergabunglah dengan grup DingTalk (ID: 35532895) untuk bantuan.
    ttlYaPeriode retensi. Format: 720h0m0s. Rentang valid: 24h0m0s hingga 1572864h0m0s.
    resource "kubernetes_manifest" "backupschedule-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "BackupSchedule"
        metadata = {
          name      = "<yourBackupScheduleName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          schedule = "1 4 * * *"
          template = {
            includedNamespaces = ["default","default1"]
            pvBackup = {
              pvcList = [
                {
                  namespace = "default"
                  name      = "pvc-nas"
                },
                {
                  namespace = "default1"
                  name      = "pvc-oss"
                }
              ]
              storageClassList = ["disk-essd","disk-ssd"]
            }
            storageLocation = "<yourBackupLocationName>"
            ttl             = "720h0m0s"
          }
        }
      }
      wait {
        fields = {
          "status.phase" = "Enabled"
        }
      }
      timeouts {
        create = "10m"
      }
    }
  2. Jalankan perintah berikut untuk melihat pratinjau paket sumber daya:

    terraform plan
  3. Jalankan perintah berikut untuk membuat rencana backup:

    terraform apply

    Output berikut menunjukkan bahwa rencana backup telah dibuat:

    kubernetes_manifest.backupschedule-demo: Creating...
    kubernetes_manifest.backupschedule-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Langkah 4: Buat pekerjaan pemulihan

  1. Tambahkan konten berikut ke csdr.tf dan sesuaikan parameter sesuai kebutuhan:

    Blok wait dikomentari karena durasi pemulihan bervariasi. Untuk membuat Terraform menunggu hingga selesai, hapus komentar pada blok wait dan timeouts serta sesuaikan timeout sesuai kebutuhan.

    ParameterWajibDeskripsi
    csdr.alibabacloud.com/backuplocationsYaInformasi tentang repositori backup. Harus sesuai dengan konfigurasi repositori backup.
    nameYaNama pekerjaan pemulihan.
    appRestoreOnlyTidakBerlaku hanya untuk tugas backup aplikasi (bukan perlindungan data). Menentukan apakah hanya aplikasi yang dipulihkan tanpa memulihkan PVC, PV, atau data volume. true: pulihkan hanya aplikasi (buat manual PVC dan PV terlebih dahulu jika mengubah sumber data). false (default): pulihkan aplikasi dan semua data volume.
    preserveNodePortsTidakBerlaku hanya untuk tugas backup aplikasi (bukan perlindungan data). Menentukan apakah NodePort dipertahankan. Jika kluster backup dan pemulihan menggunakan NodePort yang sama, atur nilai ini menjadi false untuk menetapkan port acak. Dalam kasus lain, atur menjadi true.
    includedNamespacesYaNamespace yang akan dipulihkan. Jika dikosongkan, semua namespace yang dibackup akan dipulihkan.
    includedResourcesTidakBerlaku hanya untuk tugas backup aplikasi. Jenis sumber daya kluster yang akan disertakan dalam pemulihan. Konfigurasikan hanya salah satu dari includedResources atau excludedResources. Jika keduanya dikosongkan, semua jenis sumber daya akan dipulihkan.
    excludedResourcesTidakBerlaku hanya untuk tugas backup aplikasi. Jenis sumber daya kluster yang akan dikecualikan dari pemulihan. Konfigurasikan hanya salah satu dari includedResources atau excludedResources. Jika keduanya dikosongkan, semua jenis sumber daya akan dipulihkan.
    backupNameYaNama backup yang akan dipulihkan. Untuk backup terjadwal, tentukan nama backup titik waktu tertentu. Nama backup mengikuti format <BackupScheduleName>-<Timestamp>, di mana <Timestamp> menggunakan format YYYYMMDDhhmmss (misalnya, my-schedule-20221205225845).
    namespaceMappingTidakMemetakan namespace di kluster backup ke namespace di kluster pemulihan. <backupNamespace>: namespace dari backup. <restoreNamespace>: namespace target di kluster pemulihan. Jika namespace target tidak ada, akan dibuat secara otomatis. Jika parameter ini dikosongkan, sumber daya dipulihkan ke namespace yang sama seperti dalam backup.
    imageRegistryMappingTidakMengubah alamat registri image selama pemulihan. <oldimageregistry></oldimageregistry>: alamat registri asli. <newImageRegistry>: alamat registri target. Jika tidak diatur, konfigurasi image tetap tidak berubah.
    convertedargTidakMengonversi StorageClasses untuk volume tipe filesystem (OSS, NAS, CPFS, dan volume lokal) selama pemulihan. Jenis target yang didukung: StorageClass disk atau NAS. StorageClass harus ada di kluster saat ini. Field wajib: convertToStorageClassType (StorageClass target), namespace (namespace PVC), dan persistentVolumeClaim (nama PVC). Field opsional: convertToAccessModes (mode akses target).
    Penting

    Saat memulihkan volume ReadWriteMany atau ReadOnlyMany ke disk, atur convertToAccessModes menjadi ReadWriteOnce untuk mencegah disk dilepas paksa. Untuk menanyakan informasi PVC dalam backup, jalankan kubectl -ncsdr describe <backup-name> dan periksa status.resourceList.dataResource.pvcBackupInfo.

    resource "kubernetes_manifest" "applicationrestore-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "ApplicationRestore"
        metadata = {
          name      = "<yourApplicationRestoreName>"
          namespace = "csdr"
          annotations = {
            "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackupLocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
          }
        }
        spec = {
          appRestoreOnly     = "false"
          preserveNodePorts  = "true"
          includedNamespaces = ["default","default1"]
          includedResources  = ["statefulset"]
          excludedResources  = ["excludedResources"]
          convertedarg = [
            {
              convertToStorageClassType = "alicloud-disk-topology-alltype"
              namespace                 = "default"
              persistentVolumeClaim     = "pvc-nas"
            },
            {
              convertToStorageClassType = "alicloud-disk-topology-alltype"
              namespace                 = "default1"
              persistentVolumeClaim     = "pvc-oss"
            }
          ]
          backupName       = "<yourApplicationBackupName>"
          namespaceMapping = {
            "<backupNamespace>" = "<restoreNamespace>"
          }
        }
      }
    
      # The restore is complete when status.phase changes to Completed.
      # Restore duration depends on the number of resources and the volume of persistent volume data.
      #wait {
      #  fields = {
      #    "status.phase" = "Completed"
      #  }
      #}
    
      #timeouts {
      #  create = "60m"
      #}
    }
  2. Jalankan perintah berikut untuk melihat pratinjau paket sumber daya:

    terraform plan
  3. Jalankan perintah berikut untuk membuat pekerjaan pemulihan:

    terraform apply

    Output berikut menunjukkan bahwa pekerjaan pemulihan telah dibuat:

    Expand to view returned information

    kubernetes_manifest.applicationrestore-demo: Creating...
    kubernetes_manifest.applicationrestore-demo: Creation complete after 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Langkah 5: Hapus sumber daya dari pusat cadangan

Penting

Kluster lain mungkin juga menggunakan repositori backup yang Anda buat. Menghapus objek BackupLocation tidak didukung.

Hapus jadwal backup

Jalankan terraform destroy untuk menghapus sumber daya BackupSchedule dan menghentikan backup terjadwal.

Hapus pekerjaan backup atau pemulihan

  1. Tambahkan konten berikut ke csdr.tf dan sesuaikan parameter sesuai kebutuhan:

    ParameterWajibDeskripsi
    nameYaNama permintaan penghapusan. Untuk pekerjaan backup, gunakan format <ApplicationBackupName>-dbr. Untuk pekerjaan pemulihan, gunakan format <ApplicationRestoreName>-dbr.
    deleteObjectNameYaNama sumber daya yang akan dihapus.
    deleteObjectTypeYaJenis sumber daya yang akan dihapus. "Backup": menghapus objek ApplicationBackup dan sumber daya terkaitnya. "Restore": menghapus objek ApplicationRestore dan sumber daya terkaitnya. Menghapus pekerjaan backup tidak memengaruhi backup yang sudah dibuat di kluster. Menghapus pekerjaan pemulihan tidak memengaruhi data yang telah dipulihkan.
    resource "kubernetes_manifest" "deleterequest-demo" {
      manifest = {
        apiVersion  = "csdr.alibabacloud.com/v1beta1"
        kind        = "DeleteRequest"
        metadata = {
          name      = "<objectName-dbr>"
          namespace = "csdr"
        }
        spec = {
          deleteObjectName = "<objectName>"
          deleteObjectType = "Backup"
        }
      }
    }
  2. Jalankan perintah berikut untuk melihat pratinjau paket sumber daya:

    terraform plan
  3. Jalankan perintah berikut untuk mengirim permintaan penghapusan:

    terraform apply

    Output berikut menunjukkan bahwa permintaan penghapusan telah diproses:

    Expand to view the output

    kubernetes_manifest.deleterequest-demo: Creating...
    kubernetes_manifest.deleterequest-demo: Creation complete after 0s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

    Setelah pekerjaan backup atau pemulihan dihapus, sumber daya DeleteRequest akan dihapus secara otomatis.

Langkah selanjutnya

Referensi