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
Kluster Container Service for Kubernetes (ACK) yang menjalankan Kubernetes 1.18 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat kluster ACK terkelola.
Komponen migrate-controller telah diinstal dan izin telah diberikan. Untuk informasi lebih lanjut, lihat Instal migrate-controller dan berikan izin. Anda juga dapat menggunakan Terraform untuk menginstal komponen tersebut. Untuk informasi lebih lanjut, lihat Gunakan Terraform untuk mengelola add-on.
Sebuah bucket Object Storage Service (OSS) dengan nama format
cnfs-oss-*telah dibuat untuk menyimpan cadangan. Untuk informasi lebih lanjut, lihat Gunakan Terraform untuk mengelola OSS dan alicloud_oss_bucket.Snapshot Elastic Compute Service (ECS) dan Cloud Backup tersedia jika Anda ingin menggunakan volume untuk pencadangan. Untuk informasi lebih lanjut, lihat bagian Aktifkan OSS dari topik "Mulai menggunakan konsol OSS", Aktifkan ECS Snapshot, dan Aktifkan Cloud Backup.
Catatan penggunaan
Jangan jalankan perintah
deletemenggunakan 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.
Buat direktori Terraform.
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" }Jalankan perintah berikut untuk menginisialisasi lingkungan runtime untuk Terraform:
terraform initKeluaran berikut dikembalikan, yang menunjukkan bahwa Terraform telah diinisialisasi.
Langkah 2: Buat brankas cadangan
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.
Jalankan perintah berikut untuk membuat perencanaan sumber daya:
terraform planKeluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.
Jalankan perintah berikut untuk membuat brankas cadangan:
terraform applyKeluaran 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
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" #} } }Jalankan perintah berikut untuk membuat perencanaan sumber daya:
terraform planKeluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.
Jalankan perintah berikut untuk membuat tugas pencadangan instan.
terraform applyKeluaran 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
Tambahkan konten berikut ke file konfigurasi csdr.tf dan modifikasi konten berdasarkan kebutuhan bisnis Anda.
Jalankan perintah berikut untuk membuat perencanaan sumber daya:
terraform planKeluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.
Jalankan perintah berikut untuk membuat tugas pencadangan terjadwal:
terraform applyKeluaran 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
labelSelectoruntuk 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.
Atur parameter
spec.pausedketrueuntuk menjeda tugas pencadangan terjadwal, lalu modifikasi parameter lainnya di parameterspecsepertispec.scheduleyang 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" } }Jalankan perintah berikut untuk membuat perencanaan sumber daya:
terraform planKeluaran 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.Jalankan perintah berikut untuk menerapkan tugas pencadangan terjadwal yang dimodifikasi:
terraform applyKeluaran 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
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.
PentingUntuk 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.
PentingUntuk 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.
CatatanJika <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:v1dan perlu disesuaikan keregistry.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.
CatatanJika 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 daftarstatus.resourceList.dataResource.pvcBackupInfoyang dikembalikan, bidang dataType menampilkan tipe data PVC, yang bisa berupa FileSystem atau Snapshot. Bidang nameSpace dan pvcName menampilkan namespace dan nama PVC.Jalankan perintah berikut untuk membuat perencanaan sumber daya:
terraform planKeluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.
Jalankan perintah berikut untuk membuat tugas pemulihan.
terraform applyKeluaran 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
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
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.
CatatanMenghapus tugas pencadangan tidak memengaruhi cadangan yang dibuat di kluster.
Menghapus tugas pemulihan tidak memengaruhi data yang telah dipulihkan.
Jalankan perintah berikut untuk membuat perencanaan sumber daya:
terraform planKeluaran berikut dikembalikan, yang menunjukkan bahwa perencanaan sumber daya telah dibuat.
Jalankan perintah berikut untuk menghapus sumber daya:
terraform applyKeluaran berikut dikembalikan, yang menunjukkan bahwa sumber daya
deleterequesttelah 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.CatatanSetelah sistem menghapus tugas pencadangan atau pemulihan yang sesuai berdasarkan sumber daya
deleterequest, sumber dayadeleterequestjuga dihapus.
Referensi
Untuk informasi lebih lanjut tentang cara menggunakan kubectl untuk mencadangkan dan memulihkan aplikasi, lihat Gunakan kubectl untuk mencadangkan dan memulihkan aplikasi.
Jika Anda ingin mencadangkan dan memulihkan aplikasi di konsol ACK, lihat topik-topik berikut: