Setelah mendaftarkan klaster Kubernetes eksternal ke Container Service for Kubernetes (ACK), Anda dapat menggunakan pusat cadangan ACK untuk mencadangkan aplikasi dan data dalam klaster tersebut serta memulihkan file cadangan di klaster ACK. Topik ini menjelaskan cara menggunakan pusat cadangan ACK untuk memigrasikan aplikasi dari klaster Kubernetes eksternal ke klaster ACK.
Prasyarat
Klaster terdaftar telah dibuat dan klaster eksternal dengan versi Kubernetes lebih baru dari 1.16 telah didaftarkan ke klaster terdaftar.
Klaster ACK dikelola telah dibuat di wilayah yang sama dengan klaster terdaftar untuk pemulihan aplikasi. Disarankan menggunakan Kubernetes 1.18 atau yang lebih baru.
PentingKlaster pemulihan harus menggunakan plug-in Container Storage Interface (CSI). Pemulihan aplikasi tidak didukung di klaster yang menggunakan FlexVolume atau csi-compatible-controller dan FlexVolume.
Pusat cadangan digunakan untuk mencadangkan dan memulihkan aplikasi. Sebelum menjalankan tugas pemulihan, instal dan konfigurasikan komponen sistem di klaster pemulihan. Contoh:
aliyun-acr-credential-helper: Berikan izin kepada klaster pemulihan dan konfigurasikan acr-configuration.
alb-ingress-controller: Konfigurasikan ALBConfig.
Komponen cadangan migrate-controller telah diinstal dan diberikan izin untuk klaster terdaftar dan klaster ACK yang Anda buat.
Rute dikonfigurasi yang menunjuk ke jaringan internal wilayah tempat Bucket Object Storage Service (OSS) untuk klaster terdaftar berada jika klaster tersebut terhubung ke virtual private cloud (VPC) menggunakan Cloud Enterprise Network (CEN), Express Connect, atau koneksi VPN. Untuk informasi lebih lanjut, lihat Titik akhir OSS internal dan rentang VIP.
Skenario
Cloud Backup untuk pemulihan bencana: Solusi pencadangan, pemulihan bencana, dan migrasi terintegrasi untuk memungkinkan migrasi aplikasi ke cloud dan pemulihan data bencana dengan cepat. Untuk informasi lebih lanjut, lihat Ikhtisar klaster terdaftar.
Catatan penggunaan
Sebelum mencadangkan data di klaster eksternal, buat volume persisten (PV) dan klaim volume persisten (PVC) untuk memasang volume lokal ke klaster. Plug-in Container Storage Interface (CSI) yang disediakan oleh Alibaba Cloud memungkinkan Anda memasang volume ke klaster terdaftar. Untuk informasi lebih lanjut, lihat Volume penyimpanan lokal.
Klaster terdaftar, klaster ACK, dan Bucket OSS harus berada di wilayah yang sama.
Sebelum Anda mulai
Dalam contoh ini, aplikasi MySQL yang berjalan di klaster eksternal dicadangkan dan kemudian file cadangan dipulihkan di klaster ACK. Sebelum memigrasikan aplikasi, pastikan klaster terdaftar dan klaster ACK berada di wilayah yang sama dan keduanya memiliki fitur pencadangan klaster diaktifkan. Pastikan juga kondisi berikut terpenuhi:
Klaster terdaftar: Pengguna Resource Access Management (RAM) telah dibuat dan diberikan izin untuk mengakses OSS dan Cloud Backup. Secret bernama alibaba-addon-secret dibuat di namespace csdr klaster terdaftar untuk menyimpan ID AccessKey dan Rahasia AccessKey dari pengguna RAM.
Jalankan perintah berikut untuk memeriksa apakah Secret alibaba-addon-secret ada:
kubectl get secret alibaba-addon-secret -n csdrOutput yang diharapkan:
alibaba-addon-secret Opaque 2 5d22hKlaster ACK:
Jika menggunakan klaster ACK dikelola, pastikan Cloud Backup telah diaktifkan dan Bucket OSS bernama cnfs-oss-**** telah dibuat.
Jika menggunakan klaster ACK khusus, pastikan Peran RAM pekerja klaster memiliki izin untuk mengakses OSS dan Cloud Backup. Untuk informasi lebih lanjut, lihat Berikan izin OSS kepada klaster ACK khusus dan Berikan izin Cloud Backup kepada klaster ACK khusus atau klaster terdaftar.
Langkah 1: Menyebarkan aplikasi di klaster eksternal
Jalankan perintah berikut untuk membuat namespace bernama test1:
kubectl create namespace test1Buat file bernama app-mysql.yaml dan tambahkan konten berikut ke file tersebut.
Ganti
<your-hostname>dengan nama node yang ingin Anda cadangkan. Atur parameterusernamedanpasswordke username dan password yang digunakan untuk masuk ke aplikasi.apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-sts namespace: test1 spec: selector: matchLabels: app: mysql-sts serviceName: mysql-sts template: metadata: labels: app: mysql-sts spec: containers: - name: mysql-sts image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql-sts volumeMounts: - name: mysql mountPath: /var/lib/mysql volumes: - name: mysql persistentVolumeClaim: claimName: example-pvc --- apiVersion: v1 kind: PersistentVolume metadata: name: example-pv spec: capacity: storage: 100Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage local: path: /mnt/disk nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - <your-hostname> # Tentukan nama node yang ingin Anda cadangkan. --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc namespace: test1 spec: accessModes: - ReadWriteOnce resources: requests: storage: 25Gi storageClassName: local-storage volumeName: example-pv --- apiVersion: v1 kind: Secret metadata: name: mysql-pass namespace: test1 type: Opaque data: username: dGVz**** # Ganti nilainya dengan username yang digunakan untuk masuk ke aplikasi MySQL yang ingin Anda cadangkan. password: dGVzdDEt**** # Ganti nilainya dengan password yang digunakan untuk masuk ke aplikasi MySQL yang ingin Anda cadangkan.Jalankan perintah berikut untuk membuat aplikasi MySQL, PV, dan PVC. PV dan PVC digunakan untuk memasang disk lokal ke aplikasi MySQL.
kubectl create -f app-mysql.yamlOutput yang diharapkan:
statefulset.apps/mysql-sts created persistentvolume/example-pv created persistentvolumeclaim/example-pvc created secret/mysql-pass createdJalankan perintah berikut untuk memeriksa apakah aplikasi MySQL telah dibuat:
kubectl get pod -n test1 | grep mysql-stsOutput yang diharapkan:
mysql-sts-0 1/1 Running 1 (4m51s ago) 4m58s
Langkah 2: Mencadangkan aplikasi dan data MySQL di klaster eksternal
Anda dapat mendaftarkan klaster eksternal ke ACK dan kemudian melakukan operasi pencadangan di klaster terdaftar.
Buat brankas cadangan di klaster terdaftar. Untuk informasi lebih lanjut, lihat Buat brankas cadangan.
Buat tugas pencadangan real-time bernama MySQL di klaster terdaftar. Untuk informasi lebih lanjut, lihat Buat rencana cadangan atau cadangkan secara instan.
Atur Name menjadi MySQL, pilih brankas cadangan yang Anda buat pada langkah sebelumnya dari daftar drop-down Backup Vaults, dan kemudian pilih test1 dari daftar drop-down Backup Namespaces.
Di halaman Application Backup, klik tab Backup Records. Jika status tugas mysql-backup berubah dari InProgress menjadi Completed, data telah dicadangkan.
Langkah 3: Memulihkan file cadangan di klaster ACK
Dalam contoh ini, StorageClass klaster eksternal diubah menjadi alibabacloud-cnfs-nas. Contoh ini menunjukkan cara memulihkan file cadangan aplikasi MySQL di klaster ACK. Lakukan langkah-langkah berikut:
Buat tugas pemulihan bernama mysql-restore untuk menyebarkan aplikasi MySQL di namespace test2 klaster ACK dan mengubah StorageClass-nya menjadi alibabacloud-cnfs-nas. Untuk informasi lebih lanjut, lihat Pulihkan aplikasi dan volume.
Parameter
Contoh
Name
mysql-restore.
Backup Vaults
Pilih brankas cadangan yang Anda buat. Setelah Anda memilih brankas cadangan, klik Initialize Backup Vault untuk mengaitkan klaster pemulihan dengan brankas cadangan.
Select Backup
Pilih MySQL.
Reset Namespace
Ubah dari test1 menjadi test2.
StorageClass Conversion
Pilih StorageClass alibabacloud-cnfs-nas untuk PVC example-pvc dalam daftar PVC yang dikonversi.
Klik View Restoration Records di sisi kanan Restore. Jika status tugas pemulihan mysql-restore berubah dari InProgress menjadi Completed, aplikasi dan data MySQL telah dipulihkan.
Jalankan perintah berikut di klaster ACK untuk memeriksa apakah aplikasi MySQL telah diterapkan:
kubectl get pod -n test2 | grep mysql-stsOutput yang diharapkan:
mysql-sts-0 1/1 Running 0 4sJalankan perintah berikut di klaster ACK untuk memeriksa apakah data telah dipulihkan:
Periksa apakah StorageClass PVC telah diubah menjadi alibaba-cnfs-nas:
kubectl get pvc -n test2 | grep example-pvcOutput yang diharapkan:
example-pvc Bound nas-acde4acd-59b6-4332-90af-b74ef6****** 25Gi RWO alibabacloud-cnfs-nas 31mPeriksa apakah PVC example-pvc dipasang ke aplikasi MySQL:
kubectl describe pvc example-pvc -n test2 | grep "Used By"Output yang diharapkan:
Used By: mysql-sts-0