全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan Terraform untuk mencadangkan dan memulihkan aplikasi

更新时间:Jul 06, 2025

Anda dapat menggunakan Command Line Interface (CLI) dari Terraform untuk menerapkan sumber daya kustom (CR) guna membuat brankas cadangan, melakukan pencadangan aplikasi, serta memulihkan aplikasi dalam kluster cadangan dan kluster pemulihan untuk migrasi aplikasi lintas kluster.

Prasyarat

Catatan penggunaan

  • Jangan jalankan perintah delete menggunakan kubectl untuk menghapus tugas pencadangan dan pemulihan. Jika tidak, sumber daya cloud terkait mungkin gagal dihapus sepenuhnya. Untuk informasi lebih lanjut tentang cara menghapus cadangan, lihat bagian Langkah 5: Hapus sumber daya dari pusat cadangan dari topik ini.

  • Perhatikan rilis baru dari komponen pusat cadangan bernama migrate-controller dan perbarui komponen ke versi terbaru sesegera mungkin. Untuk informasi lebih lanjut, lihat Kelola komponen.

  • Jangan hapus parameter dalam kode contoh berikut agar file cadangan dapat dipulihkan.

Langkah 1: Asosiasikan kluster

Anda dapat menggunakan penyedia Kubernetes untuk mengasosiasikan kluster. Untuk informasi lebih lanjut tentang penyedia Kubernetes, lihat Penyedia Kubernetes.

Dalam contoh ini, file KubeConfig digunakan untuk menggambarkan cara mengasosiasikan kluster.

  1. Buat direktori Terraform.

  2. Buat file konfigurasi bernama csdr.tf di direktori Terraform dan salin konten berikut ke file konfigurasi untuk mengasosiasikannya dengan file KubeConfig.

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

    terraform init

    Keluaran berikut dikembalikan, yang menunjukkan bahwa Terraform telah diinisialisasi.

    Lihat keluaran

    Menginisialisasi backend...
    
    Menginisialisasi plugin penyedia...
    - Menggunakan versi sebelumnya dari hashicorp/alicloud dari file kunci dependensi
    - Menggunakan versi sebelumnya dari hashicorp/kubernetes dari file kunci dependensi
    - Menggunakan hashicorp/alicloud v1.223.1 yang sudah terpasang
    - Menggunakan hashicorp/kubernetes v2.30.0 yang sudah terpasang
    
    ╷
    │ Peringatan: Informasi tambahan penyedia dari registri
    │
    │ Registri jarak jauh mengembalikan peringatan untuk registry.terraform.io/hashicorp/alicloud:
    │ - Untuk pengguna pada Terraform 0.13 atau lebih baru, penyedia ini telah pindah ke aliyun/alicloud. Silakan
    │ perbarui sumber Anda di required_providers.
    ╵
    
    Terraform telah berhasil diinisialisasi!
    

Langkah 2: Buat brankas cadangan

  1. Tambahkan konten berikut ke file konfigurasi csdr.tf dan modifikasi konten berdasarkan kebutuhan bisnis Anda.

    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"
      }
    }

    Parameter

    Wajib

    Deskripsi

    name

    Ya

    Nama brankas cadangan. Nama tersebut harus sesuai dengan konvensi penamaan Kubernetes.

    network

    Ya

    Mode jaringan yang digunakan untuk mengakses Object Storage Service (OSS) bucket yang ditentukan. Nilai valid:

    • internal: mode internal. Semua kluster terkait harus diterapkan di wilayah yang sama dengan bucket OSS.

    • public: mode publik. Mode ini tidak memiliki batasan wilayah.

    region

    Ya

    Wilayah tempat bucket OSS berada.

    bucket

    Ya

    Nama bucket OSS. Pastikan nama bucket OSS ada dan dimulai dengan cnfs-oss-.

    prefix

    Tidak

    Subdirektori di bucket OSS. Jika Anda menentukan parameter ini, cadangan akan disimpan di subdirektori yang ditentukan.

  2. Jalankan perintah berikut untuk membuat perencanaan sumber daya:

    terraform plan

    Keluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.

    Lihat keluaran

      # kubernetes_manifest.backuplocation-demo akan dibuat
      + 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"
                }
            }
          + object   = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "BackupLocation"
              + metadata   = {
                  + annotations                = (diketahui setelah apply)
                  + creationTimestamp          = (diketahui setelah apply)
                  + deletionGracePeriodSeconds = (diketahui setelah apply)
                  + deletionTimestamp          = (diketahui setelah apply)
                  + finalizers                 = (diketahui setelah apply)
                  + generateName               = (diketahui setelah apply)
                  + generation                 = (diketahui setelah apply)
                  + labels                     = (diketahui setelah apply)
                  + managedFields              = (diketahui setelah apply)
                  + name                       = "<yourBackuplocationName>"
                  + namespace                  = "csdr"
                  + ownerReferences            = (diketahui setelah apply)
                  + resourceVersion            = (diketahui setelah apply)
                  + selfLink                   = (diketahui setelah apply)
                  + uid                        = (diketahui setelah apply)
                }
              + spec       = {
                  + accessMode          = (diketahui setelah apply)
                  + backupSyncPeriod    = "0s"
                  + config              = {
                      + network = "internal"
                      + region  = "cn-beijing"
                    }
                  + objectStorage       = {
                      + bucket = "<cnfs-oss-yourBucketName>"
                      + caCert = (diketahui setelah apply)
                      + prefix = "<subDir>"
                    }
                  + provider            = "alibabacloud"
                  + validationFrequency = (diketahui setelah apply)
                }
            }
    
          + timeouts {
              + create = "10m"
            }
    
          + wait {
              + fields = {
                  + "status.phase" = "Available"
                }
            }
        }
  3. Jalankan perintah berikut untuk membuat brankas cadangan:

    terraform apply

    Keluaran berikut dikembalikan, yang menunjukkan bahwa brankas cadangan telah dibuat.

    kubernetes_manifest.backuplocation-demo: Membuat...
    kubernetes_manifest.backuplocation-demo: Pembuatan selesai setelah 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Langkah 3: Buat tugas pencadangan

Buat tugas pencadangan instan

  1. Tambahkan konten berikut ke file konfigurasi csdr.tf dan modifikasi konten berdasarkan kebutuhan bisnis Anda.

    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"
        }
      }
      
      # Jika nilai parameter status.phase berubah menjadi Completed, pencadangan berhasil.
      # Durasi pencadangan bergantung pada jumlah aplikasi di kluster dan jumlah data yang disimpan di volume.
      #wait {
      #  fields = {
      #    "status.phase" = "Completed"
      #  }
      #}
    
      #timeouts {
      #  create = "60m"
      #}
     }
    }
  2. Jalankan perintah berikut untuk membuat perencanaan sumber daya:

    terraform plan

    Keluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.

    Lihat keluaran

      # kubernetes_manifest.applicationbackup-demo akan dibuat
      + resource "kubernetes_manifest" "applicationbackup-demo" {
          + manifest = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "ApplicationBackup"
              + metadata   = {
                  + annotations = {
                      + "csdr.alibabacloud.com/backuplocations" = "{name:<yourBackuplocationName>,region:cn-beijing,bucket:<cnfs-oss-yourBucketName>,prefix:<subDir>,provider:alibabacloud}"
                    }
                  + name        = "<yourApplicationBackupName>"
                  + namespace   = "csdr"
                }
              + spec       = {
                  + excludedResources  = [
                      + "excludedResources",
                    ]
                  + includedNamespaces = [
                      + "default",
                      + "default1",
                    ]
                  + includedResources  = [
                      + "statefulset",
                    ]
                  + labelSelector      = {
                      + matchLabels = {
                          + app = "mysql-sts"
                        }
                    }
                  + pvBackup           = {
                      + defaultPvBackup = "false"
                    }
                  + storageLocation    = "vault-a"
                  + ttl                = "720h0m0s"
                }
            }
          + object   = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "ApplicationBackup"
              + metadata   = {
                  + annotations                = (diketahui setelah apply)
                  + creationTimestamp          = (diketahui setelah apply)
                  + deletionGracePeriodSeconds = (diketahui setelah apply)
                  + deletionTimestamp          = (diketahui setelah apply)
                  + finalizers                 = (diketahui setelah apply)
                  + generateName               = (diketahui setelah apply)
                  + generation                 = (diketahui setelah apply)
                  + labels                     = (diketahui setelah apply)
                  + managedFields              = (diketahui setelah apply)
                  + name                       = "<yourApplicationBackupName>"
                  + namespace                  = "csdr"
                  + ownerReferences            = (diketahui setelah apply)
                  + resourceVersion            = (diketahui setelah apply)
                  + selfLink                   = (diketahui setelah apply)
                  + uid                        = (diketahui setelah apply)
                }
              + spec       = {
                  + backupType              = (diketahui setelah apply)
                  + excludedNamespaces      = (diketahui setelah apply)
                  + excludedResources       = [
                      + "excludedResources",
                    ]
                  + includeClusterResources = (diketahui setelah apply)
                  + includedNamespaces      = [
                      + "default",
                      + "default1",
                    ]
                  + includedResources       = [
                      + "statefulset",
                    ]
                  + labelSelector           = {
                      + matchExpressions = (diketahui setelah apply)
                      + matchLabels      = {
                          + app = "mysql-sts"
                        }
                    }
                  + orderedResources        = (diketahui setelah apply)
                  + pvBackup                = {
                      + defaultPvBackup  = false
                      + pvcList          = (diketahui setelah apply)
                      + pvcSelector      = {
                          + matchExpressions = (diketahui setelah apply)
                          + matchLabels      = (diketahui setelah apply)
                        }
                      + snapshotPostRule = (diketahui setelah apply)
                      + snapshotPreRule  = (diketahui setelah apply)
                    }
                  + storageLocation     = "<yourBackuplocationName>"
                  + ttl                 = "720h0m0s"
                }
            }
        }
    
  3. Jalankan perintah berikut untuk membuat tugas pencadangan instan.

    terraform apply

    Keluaran berikut dikembalikan, yang menunjukkan bahwa tugas pencadangan instan telah dibuat.

    kubernetes_manifest.applicationbackup-demo: Membuat...
    kubernetes_manifest.applicationbackup-demo: Pembuatan selesai setelah 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Buat tugas pencadangan terjadwal

  1. Tambahkan konten berikut ke file konfigurasi csdr.tf dan modifikasi konten berdasarkan kebutuhan bisnis Anda.

    Lihat file konfigurasi

    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 membuat perencanaan sumber daya:

    terraform plan

    Keluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.

    Lihat keluaran

      # kubernetes_manifest.backupschedule-demo akan dibuat
      + 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                = (diketahui setelah apply)
                  + creationTimestamp          = (diketahui setelah apply)
                  + deletionGracePeriodSeconds = (diketahui setelah apply)
                  + deletionTimestamp          = (diketahui setelah apply)
                  + finalizers                 = (diketahui setelah apply)
                  + generateName               = (diketahui setelah apply)
                  + generation                 = (diketahui setelah apply)
                  + labels                     = (diketahui setelah apply)
                  + managedFields              = (diketahui setelah apply)
                  + name                       = "<yourBackupscheduleName>"
                  + namespace                  = "csdr"
                  + ownerReferences            = (diketahui setelah apply)
                  + resourceVersion            = (diketahui setelah apply)
                  + selfLink                   = (diketahui setelah apply)
                  + uid                        = (diketahui setelah apply)
                }
              + spec       = {
                  + backupAll = (diketahui setelah apply)
                  + paused    = (diketahui setelah apply)
                  + schedule  = "1 4 * * *"
                  + template  = {
                      + backupType              = (diketahui setelah apply)
                      + excludedNamespaces      = (diketahui setelah apply)
                      + excludedResources       = [
                          + "excludedResources",
                        ]
                      + includeClusterResources = (diketahui setelah apply)
                      + includedNamespaces      = [
                          + "default",
                          + "default1",
                        ]
                      + includedResources       = [
                          + "statefulset",
                        ]
                      + labelSelector           = {
                          + matchExpressions = (diketahui setelah apply)
                          + matchLabels      = {
                              + app = "mysql-sts"
                            }
                        }
                      + orderedResources        = (diketahui setelah apply)
                      + pvBackup                = {
                          + defaultPvBackup  = false
                          + pvcList          = (diketahui setelah apply)
                          + pvcSelector      = {
                              + matchExpressions = (diketahui setelah apply)
                              + matchLabels      = (diketahui setelah apply)
                            }
                          + snapshotPostRule = (diketahui setelah apply)
                          + snapshotPreRule  = (diketahui setelah apply)
                        }
                      + storageLocation         = "<yourBackuplocationName>"
                      + ttl                     = "720h0m0s"
                    }
                }
            }
          + timeouts {
              + create = "10m"
            }
    
          + wait {
              + fields = {
                  + "status.phase" = "Enabled"
                }
            }
        }
  3. Jalankan perintah berikut untuk membuat tugas pencadangan terjadwal:

    terraform apply

    Keluaran berikut dikembalikan, yang menunjukkan bahwa tugas pencadangan terjadwal telah dibuat.

    kubernetes_manifest.backupschedule-demo: Membuat...
    kubernetes_manifest.backupschedule-demo: Pembuatan selesai setelah 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Operasi terkait

  • Cari cadangan berdasarkan tugas pencadangan terjadwal.

    Gunakan labelSelector untuk menemukan cadangan yang dibuat oleh tugas pencadangan terjadwal.

    data "kubernetes_resources" "list-applicationbackup" {
      api_version 			= "csdr.alibabacloud.com/v1beta1"
      kind       				= "ApplicationBackup"
      namespace         = "csdr"
      label_selector    = "csdr/schedule-name=terraform-schedule-test"
    }
    
    # Kembalikan keluaran. 
    output "applicationbackup-name" {
      value = data.kubernetes_resources.list-applicationbackup.objects
    }
  • Modifikasi tugas pencadangan terjadwal.

    1. Atur parameter spec.paused ke true untuk menjeda tugas pencadangan terjadwal, lalu modifikasi parameter lainnya di parameter spec seperti spec.schedule yang mendefinisikan perilaku pencadangan dalam tugas pencadangan berdasarkan kebutuhan bisnis Anda. Contoh kode:

      resource "kubernetes_manifest" "backupschedule-demo" {
        manifest = {
          apiVersion          = "csdr.alibabacloud.com/v1beta1"
          kind                = "BackupSchedule"
          metadata = {
            name                              = "<yourBackcupscheduleName>"
            namespace         = "csdr"
            annotations = {
              "csdr.alibabacloud.com/backuplocations" = "{\"name\":\"<yourBackuplocationName>\",\"region\":\"cn-beijing\",\"bucket\":\"<cnfs-oss-yourBucketName>\",\"prefix\":\"<subDir>\",\"provider\":\"alibabacloud\"}"
            }
          }
          spec = {
            Jeda tugas pencadangan. 
            paused = "true" 
            # Modifikasi siklus pencadangan dari tugas pencadangan. 
            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 = {
            # Setelah tugas pencadangan dijeda, status tugas pencadangan berubah menjadi Paused seperti yang diharapkan. 
            "status.phase" = "Paused"
          }
        }
        timeouts {
          create = "10m"
        }
      }
    2. Jalankan perintah berikut untuk membuat perencanaan sumber daya:

      terraform plan

      Keluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.

      kubernetes_manifest.backupschedule-demo: Memperbarui state...
      
      Terraform menggunakan penyedia yang dipilih untuk menghasilkan rencana eksekusi berikut. Tindakan sumber daya
      ditunjukkan dengan simbol berikut:
        ~ pembaruan di tempat
      
      Terraform akan melakukan tindakan berikut:
      
        # kubernetes_manifest.backupschedule-demo akan diperbarui di tempat
        ~ resource "kubernetes_manifest" "backupschedule-demo" {
            ~ manifest = {
                ~ spec       = {
                    ~ paused   = "false" -> "true"
                    ~ schedule = "1 4 * * *" -> "0 5 * * *"
                      # (1 atribut tidak berubah disembunyikan)
                  }
                  # (3 atribut tidak berubah disembunyikan)
              }
            ~ object   = {
                ~ spec       = {
                    ~ paused    = false -> true
                    ~ schedule  = "1 4 * * *" -> "0 5 * * *"
                      # (2 atribut tidak berubah disembunyikan)
                  }
                  # (3 atribut tidak berubah disembunyikan)
              }
      
            ~ wait {
                ~ fields = {
                    ~ "status.phase" = "Enabled" -> "Paused"
                  }
              }
      
              # (1 blok tidak berubah disembunyikan)
          }
      
      Rencana: 0 untuk ditambahkan, 1 untuk diubah, 0 untuk dihancurkan.
    3. Jalankan perintah berikut untuk menerapkan tugas pencadangan terjadwal yang dimodifikasi:

      terraform apply

      Keluaran berikut dikembalikan, yang menunjukkan bahwa tugas pencadangan terjadwal telah dimodifikasi.

      kubernetes_manifest.backupschedule-demo: Memodifikasi...
      kubernetes_manifest.backupschedule-demo: Modifikasi selesai setelah 1s
      
      Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

Langkah 4: Buat tugas pemulihan

  1. Tambahkan konten berikut ke file konfigurasi csdr.tf dan modifikasi konten berdasarkan kebutuhan bisnis Anda.

    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>"
          }
        }
      }
      
      # Jika nilai parameter status.phase berubah menjadi Completed, tugas pemulihan berhasil. 
      # Durasi pemulihan bergantung pada jumlah aplikasi di kluster dan jumlah data yang disimpan di volume. 
      #wait {
      #  fields = {
      #    "status.phase" = "Completed"
      #  }
      #}
    
      #timeouts {
      #  create = "60m"
      #}
    }

    Parameter

    Wajib

    Deskripsi

    csdr.alibabacloud.com/backuplocations

    Ya

    Brankas cadangan yang menyimpan cadangan. Pastikan informasi tersebut sama dengan konfigurasi brankas cadangan.

    name

    Ya

    Nama tugas pemulihan.

    appRestoreOnly

    Tidak

    Parameter ini hanya berlaku untuk tugas pencadangan aplikasi dan tidak berlaku di bawah tugas perlindungan data.

    Menentukan apakah hanya memulihkan aplikasi dari cadangan yang berisi data volume. Persistent Volume Claims (PVC), Persistent Volumes (PV), dan data terkait tidak dipulihkan. Nilai valid:

    • true: hanya memulihkan aplikasi. Jika Anda ingin mengubah sumber data tempat Anda mencadangkan aplikasi, Anda perlu secara manual membuat PVC dan PV, buat tugas pemulihan, lalu atur parameter ini ke true.

    • false: memulihkan aplikasi dan data volume terkait. Nilai default: false.

    preserveNodePorts

    Tidak

    Parameter ini hanya berlaku untuk tugas pencadangan aplikasi dan tidak berlaku di bawah tugas perlindungan data.

    Menentukan apakah akan mempertahankan NodePort aplikasi. Jika kluster cadangan dan kluster pemulihan menggunakan NodePort yang sama, atur parameter ini ke false untuk mengubah NodePort ke port acak. Dalam skenario lain, atur parameter ini ke true.

    includedNamespaces

    Ya

    Nama namespace yang akan dipulihkan. Jika Anda meninggalkan parameter ini kosong, semua namespace yang telah dicadangkan akan dipulihkan.

    includedResources

    Tidak

    Parameter ini hanya berlaku untuk tugas pencadangan aplikasi dan tidak berlaku di bawah tugas perlindungan data.

    Jenis sumber daya kluster yang akan disertakan dalam daftar pemulihan.

    Penting

    Untuk memastikan bahwa cadangan dibuat sesuai harapan, tentukan hanya salah satu dari parameter berikut: includedResources dan excludedResources. Jika Anda meninggalkan kedua parameter kosong, semua jenis sumber daya akan dicadangkan.

    excludedResources

    Tidak

    Parameter ini hanya berlaku untuk tugas pencadangan aplikasi dan tidak berlaku di bawah tugas perlindungan data.

    Jenis sumber daya kluster yang akan dikecualikan dari daftar pemulihan.

    Penting

    Untuk memastikan bahwa cadangan dibuat sesuai harapan, tentukan hanya salah satu dari parameter berikut: includedResources dan excludedResources. Jika Anda meninggalkan kedua parameter kosong, semua jenis sumber daya akan dicadangkan.

    backupName

    Ya

    Nama cadangan yang akan dipulihkan. Jika Anda menggunakan fitur pencadangan terjadwal, Anda perlu menentukan nama cadangan yang dibuat pada titik waktu tertentu. Contoh: <yourBackupScheduleName>-20221205225845.

    namespaceMapping

    Tidak

    Parameter ini memetakan namespace di kluster cadangan ke namespace di kluster pemulihan. Nilai valid:

    • <backupNamespace>: namespace cadangan di kluster cadangan.

    • <restoreNamespace>: namespace tempat sumber daya dipulihkan di kluster pemulihan. Jika Anda tidak menentukan parameter ini, sumber daya akan dipulihkan ke namespace yang menggunakan nama yang sama dengan namespace di kluster cadangan.

    Catatan

    Jika <restoreNamespace> tidak ada, sistem akan otomatis membuatnya.

    imageRegistryMapping

    Tidak

    Parameter ini menentukan ulang alamat repositori gambar, dan berlaku untuk semua konfigurasi gambar aplikasi yang memenuhi kriteria. Nilai valid:

    • <oldImageRegistry>: Alamat registri gambar asli aplikasi selama pencadangan.

    • <newImageRegistry>: Alamat registri gambar target selama pemulihan. Jika tidak diatur, konfigurasi gambar dalam aplikasi akan tetap tidak berubah.

    Contoh:

    Jika aplikasi di kluster asli menggunakan gambar registry.cn-beijing.aliyuncs.com/my-registry/nginx:v1 dan perlu disesuaikan ke registry.cn-hangzhou.aliyuncs.com/my-registry/nginx:v1, gunakan konfigurasi berikut untuk bidang ini:

      namespaceMapping:
        "registry.cn-beijing.aliyuncs.com/my-registry/": "registry.cn-beijing.aliyuncs.com/my-registry/"

    convertedarg

    Tidak

    Daftar konversi StorageClass. Untuk volume tipe FileSystem, seperti OSS, NAS, CPFS, dan volume lokal, Anda dapat mengonfigurasi parameter ini untuk mengonversi StorageClasses PVC mereka ke StorageClass yang ditentukan selama proses pemulihan. Misalnya, Anda dapat mengonversi volume NAS menjadi volume disk.

    • convertToStorageClassType: StorageClass yang diinginkan. Pastikan StorageClass ada di kluster saat ini. Anda hanya dapat menentukan StorageClass disk atau NAS.

    • namespace: namespace dari PVC.

    • persistentVolumeClaim: nama PVC.

    Di atas adalah parameter wajib untuk fitur konversi StorageClass.

    Selama konversi StorageClass, parameter opsional berikut juga didukung untuk memodifikasi konfigurasi AccessModes volume.

    • convertToAccessModes: Daftar AccessModes yang diinginkan.

    Catatan

    Jika Anda ingin memulihkan volume dengan AccessModes diatur ke ReadWriteMany atau ReadOnlyMany ke disk, Anda harus mengatur AccessModes ke ReadWriteOnce untuk menghindari pemutusan paksa disk.

    Anda dapat menjalankan perintah kubectl -ncsdr describe <backup-name> untuk menanyakan informasi PVC dari cadangan. Dalam daftar status.resourceList.dataResource.pvcBackupInfo yang dikembalikan, bidang dataType menampilkan tipe data PVC, yang bisa berupa FileSystem atau Snapshot. Bidang nameSpace dan pvcName menampilkan namespace dan nama PVC.

  2. Jalankan perintah berikut untuk membuat perencanaan sumber daya:

    terraform plan

    Keluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.

    Lihat keluaran

      # kubernetes_manifest.applicationrestore-demo akan dibuat
      + resource "kubernetes_manifest" "applicationrestore-demo" {
          + manifest = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "ApplicationRestore"
              + metadata   = {
                  + annotations = {
                      + "csdr.alibabacloud.com/backuplocations" = "{name:<yourBackuplocationName>,region:cn-beijing,bucket:<cnfs-oss-yourBucketName>,prefix:subpath,provider:alibabacloud}"
                    }
                  + name        = "<yourApplicationRestoreName>"
                  + namespace   = "csdr"
                }
              + spec       = {
                  + appRestoreOnly     = "false"
                  + backupName         = "<yourApplicationbackupName>"
                  + convertedarg       = [
                      + {
                          + convertToStorageClassType = "alicloud-disk-topology-alltype"
                          + namespace                 = "default"
                          + persistentVolumeClaim     = "pvc-nas"
                        },
                      + {
                          + convertToStorageClassType = "alicloud-disk-topology-alltype"
                          + namespace                 = "default1"
                          + persistentVolumeClaim     = "pvc-oss"
                        },
                    ]
                  + excludedResources  = [
                      + "excludedResources",
                    ]
                  + includedNamespaces = [
                      + "default",
                      + "default1",
                    ]
                  + includedResources  = [
                      + "statefulset",
                    ]
                  + namespaceMapping   = {
                      + default = "default1"
                    }
                  + preserveNodePorts  = "true"
                }
            }
          + object   = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "ApplicationRestore"
              + metadata   = {
                  + annotations                = (diketahui setelah apply)
                  + creationTimestamp          = (diketahui setelah apply)
                  + deletionGracePeriodSeconds = (diketahui setelah apply)
                  + deletionTimestamp          = (diketahui setelah apply)
                  + finalizers                 = (diketahui setelah apply)
                  + generateName               = (diketahui setelah apply)
                  + generation                 = (diketahui setelah apply)
                  + labels                     = (diketahui setelah apply)
                  + managedFields              = (diketahui setelah apply)
                  + name                       = "<yourApplicationRestoreName>"
                  + namespace                  = "csdr"
                  + ownerReferences            = (diketahui setelah apply)
                  + resourceVersion            = (diketahui setelah apply)
                  + selfLink                   = (diketahui setelah apply)
                  + uid                        = (diketahui setelah apply)
                }
              + spec       = {
                  + appRestoreOnly          = false
                  + backupName              = "<yourApplicationbackupName>"
                  + convertedarg            = [
                      + {
                          + convertToStorageClassType = "alicloud-disk-topology-alltype"
                          + namespace                 = "default"
                          + persistentVolumeClaim     = "pvc-nas"
                        },
                      + {
                          + convertToStorageClassType = "alicloud-disk-topology-alltype"
                          + namespace                 = "default1"
                          + persistentVolumeClaim     = "pvc-oss"
                        },
                    ]
                  + excludedNamespaces      = (diketahui setelah apply)
                  + excludedResources       = [
                      + "excludedResources",
                    ]
                  + existingResourcePolicy  = (diketahui setelah apply)
                  + includeClusterResources = (diketahui setelah apply)
                  + includedNamespaces      = [
                      + "default",
                      + "default1",
                    ]
                  + includedResources       = [
                      + "statefulset",
                    ]
                  + labelSelector           = {
                      + matchExpressions = (diketahui setelah apply)
                      + matchLabels      = (diketahui setelah apply)
                    }
                  + namespaceMapping        = {
                      + default = "default1"
                    }
                  + preserveNodePorts       = true
                  + pvRestore               = {
                      + pvcPrefix = (diketahui setelah apply)
                      + pvcSuffix = (diketahui setelah apply)
                    }
                  + pvRestoreOnly           = (diketahui setelah apply)
                }
            }
        }
  3. Jalankan perintah berikut untuk membuat tugas pemulihan.

    terraform apply

    Keluaran berikut dikembalikan, yang menunjukkan bahwa tugas pemulihan telah dibuat.

    kubernetes_manifest.applicationbackup-demo: Membuat...
    kubernetes_manifest.applicationrestore-demo: Pembuatan selesai setelah 1s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Langkah 5: Hapus sumber daya dari pusat cadangan

Penting

Kluster lain mungkin juga menggunakan brankas cadangan yang Anda buat. Oleh karena itu, pusat cadangan tidak mengizinkan Anda menghapus objek BackupLocation.

Hapus tugas pencadangan terjadwal

Anda dapat menjalankan perintah terraform destroy untuk menghapus sumber daya BackupSchedule guna menghentikan tugas pencadangan terjadwal.

Hapus tugas pencadangan atau tugas pemulihan

  1. Tambahkan konten berikut ke file konfigurasi csdr.tf dan modifikasi konten berdasarkan kebutuhan bisnis Anda.

    resource "kubernetes_manifest" "deleterequest-demo" {
      manifest = {
        apiVersion  	= "csdr.alibabacloud.com/v1beta1"
        kind        	= "DeleteRequest"
        metadata = {
          name		= "<objectName-dbr>"
          namespace 	= "csdr"
        }
        spec = {
          deleteObjectName 	= "<objectName>"
          deleteObjectType	= "Backup"
        }
      }
    }

    Parameter

    Wajib

    Deskripsi

    name

    Ya

    Nama permintaan penghapusan.

    • Untuk menghapus tugas pencadangan, tentukan nama permintaan dalam format berikut: Nama ApplicationBackup dari tugas pencadangan+"-dbr".

    • Untuk menghapus tugas pemulihan, tentukan nama permintaan dalam format berikut: Nama ApplicationRestore dari tugas pemulihan+"-dbr".

    deleteObjectName

    Ya

    Nama sumber daya yang akan dihapus.

    deleteObjectType

    Ya

    Tipe sumber daya yang akan dihapus. Nilai valid:

    • "Backup": menghapus objek ApplicationBackup dan sumber daya terkait dari tugas pencadangan.

    • "Restore": menghapus objek ApplicationRestore dan sumber daya terkait dari tugas pemulihan.

    Catatan
    • Menghapus tugas pencadangan tidak memengaruhi cadangan yang dibuat di kluster.

    • Menghapus tugas pemulihan tidak memengaruhi data yang telah dipulihkan.

  2. Jalankan perintah berikut untuk membuat perencanaan sumber daya:

    terraform plan

    Keluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.

    Lihat keluaran

      # kubernetes_manifest.deleterequest-demo akan dibuat
      + resource "kubernetes_manifest" "deleterequest-demo" {
          + manifest = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "DeleteRequest"
              + metadata   = {
                  + name      = "<objectName-dbr>"
                  + namespace = "csdr"
                }
              + spec       = {
                  + deleteObjectName = "<objectName>"
                  + deleteObjectType = "Backup"
                }
            }
          + object   = {
              + apiVersion = "csdr.alibabacloud.com/v1beta1"
              + kind       = "DeleteRequest"
              + metadata   = {
                  + annotations                = (diketahui setelah apply)
                  + creationTimestamp          = (diketahui setelah apply)
                  + deletionGracePeriodSeconds = (diketahui setelah apply)
                  + deletionTimestamp          = (diketahui setelah apply)
                  + finalizers                 = (diketahui setelah apply)
                  + generateName               = (diketahui setelah apply)
                  + generation                 = (diketahui setelah apply)
                  + labels                     = (diketahui setelah apply)
                  + managedFields              = (diketahui setelah apply)
                  + name                       = "<objectName-dbr>"
                  + namespace                  = "csdr"
                  + ownerReferences            = (diketahui setelah apply)
                  + resourceVersion            = (diketahui setelah apply)
                  + selfLink                   = (diketahui setelah apply)
                  + uid                        = (diketahui setelah apply)
                }
              + spec       = {
                  + backupName       = (diketahui setelah apply)
                  + deleteObjectName = "<objectName>"
                  + deleteObjectType = "Backup"
                }
            }
        }
  3. Jalankan perintah berikut untuk menghapus sumber daya:

    terraform apply

    Keluaran berikut dikembalikan, yang menunjukkan bahwa sumber daya deleterequest telah dibuat untuk menghapus sumber daya.

    kubernetes_manifest.deleterequest-demo: Membuat...
    kubernetes_manifest.deleterequest-demo: Pembuatan selesai setelah 0s
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
    Catatan

    Setelah sistem menghapus tugas pencadangan atau pemulihan yang sesuai berdasarkan sumber daya deleterequest, sumber daya deleterequest juga dihapus.

Referensi