Si vous ne pouvez pas accéder à Backup Center depuis la console Container Service for Kubernetes (ACK) en raison de restrictions d'autorisations, ou si vous devez automatiser la reprise après sinistre, utilisez kubectl. Déployez les ressources personnalisées (CR) BackupLocation, ApplicationBackup, BackupSchedule, ApplicationRestore et DeleteRequest dans les clusters de sauvegarde et de restauration pour migrer des applications entre clusters.
Prérequis
Assurez-vous que les conditions suivantes sont remplies :
Le module complémentaire migrate-controller est installé et les permissions requises sont configurées.
Notes d'utilisation
Maintenez migrate-controller à jour. Consultez la section Components.
Utilisez DeleteRequest pour supprimer les jobs de sauvegarde et de restauration. La commande
kubectl deletene supprime pas les données de sauvegarde associées. Utilisez plutôt une CRDeleteRequest. Voir l'étape Étape 4 : Supprimer les ressources de sauvegarde et de restauration.Ne supprimez aucun paramètre des fichiers YAML d'exemple. La suppression de champs obligatoires entraîne l'échec des opérations de sauvegarde et de restauration.
Les ressources
BackupLocationne peuvent pas être supprimées depuis Backup Center, car les référentiels peuvent être partagés entre plusieurs clusters.
Étape 1 : Créer un référentiel de sauvegarde
Un référentiel de sauvegarde (BackupLocation) définit le bucket Object Storage Service (OSS) qui stocke les données de sauvegarde. Créez la même ressource BackupLocation sur les clusters de sauvegarde et de restauration afin qu'ils partagent les mêmes données.
-
Créez le fichier
backuplocation.yaml:apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupLocation metadata: name: <your-backup-repository-name> # Required. Must follow Kubernetes naming conventions namespace: csdr spec: backupSyncPeriod: 0s config: network: internal # Required. internal: access over the internal network; all # associated clusters and the OSS bucket must be in the same region # public: access over the Internet; no region restriction region: cn-beijing # Required. Region where the OSS bucket is located objectStorage: bucket: <cnfs-oss-your-bucket-name> # Required. Must start with cnfs-oss-; create in advance prefix: <your-subdirectory-name> # Optional: store backups in this subdirectory provider: alibabacloudAucune configuration n'est requise pour les autres paramètres. Conservez les valeurs par défaut.
-
Appliquez le manifeste sur les deux clusters :
kubectl apply -f backuplocation.yaml -
Vérifiez que le référentiel est disponible sur chaque cluster :
kubectl describe backuplocation <your-backup-repository-name> -n csdrLe référentiel est prêt lorsque le champ
PhaseindiqueAvailable:... Status: Last Validation Time: 2022-12-08T04:00:22Z Message: success by csdr-controller Phase: AvailableLa valeur
Availableconfirme que le cluster peut accéder au bucket OSS.
Étape 2 : Créer une tâche de sauvegarde
Backup Center prend en charge deux types de sauvegarde :
Application Backup : Sauvegarde les ressources Kubernetes (telles que StatefulSets et Deployments) ainsi que leurs volumes persistants (PV).
Data Protection : Sauvegarde uniquement les données de volume, sans les ressources d'application. Les ressources sauvegardées se limitent aux Persistent Volume Claims (PVC) et aux PV.
Consultez la rubrique Scénarios pour Application Backup et Data Protection.
Chaque type prend en charge les sauvegardes à la demande et planifiées.
Sauvegarde d'application
Sauvegarde à la demande
-
Créez le fichier
applicationbackup.yamldans le cluster de sauvegarde :ImportantConfigurez soit
includedResources, soitexcludedResources, mais pas les deux simultanément. Si les deux champs sont vides, tous les types de ressources sont sauvegardés.Pour les tâches de sauvegarde créées via la console,
includeClusterResourcesest défini par défaut surfalse.apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationBackup metadata: annotations: # Required. Information about the backup repository that stores this backup. # The value must match the backup repository configuration. csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<cnfs-oss-your-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-backup-name> # Required. Name of the on-demand backup namespace: csdr spec: includedNamespaces: - default # Required. Namespaces to include in the backup includedResources: - statefulset # Optional. Resource types to back up excludedResources: # Optional. Configuring this parameter together with includedResources - deployment # causes unexpected results. Configure only one of them. # If both are empty, all resource types are backed up. labelSelector: matchLabels: app: mysql-sts # Optional. Only resources with this label are backed up includeClusterResources: false # Optional. false: only cluster-level resources referenced # by selected namespace resources are backed up # (such as ClusterRoles and CRDs) # true: all cluster-level resources are backed up pvBackup: defaultPvBackup: false # Required. Whether to back up PVs, that is, whether to # enable data backup: # false: back up application resources only # true: back up application resources and PVs storageLocation: <your-backup-repository-name> # Required. Name of the backup repository. # Note: If your cluster already uses Velero, join the # DingTalk user group (Group Number: 35532895) for assistance. ttl: 720h0m0s # Required. Retention period; range: 24h0m0s to # 1572864h0m0s. Backup data cannot be restored # after the retention period expires.Aucune configuration n'est requise pour les autres paramètres. Conservez les valeurs par défaut.
-
Appliquez le manifeste dans le cluster de sauvegarde :
kubectl apply -f applicationbackup.yaml -
Vérifiez l'état de la sauvegarde :
kubectl describe applicationbackup <your-application-backup-name> -n csdrLa sauvegarde est terminée lorsque le champ
Phasepasse deInprogressàCompleted:... Status: Completion Timestamp: 2022-12-05T15:02:35Z Expiration: 2023-01-04T15:02:25Z Message: success Phase: Completed
Sauvegarde planifiée
-
Créez le fichier
backupschedule.yamldans le cluster de sauvegarde :apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupSchedule metadata: annotations: # Required. Information about the backup repository that stores this backup. # The value must match the backup repository configuration. csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<cnfs-oss-your-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-backup-schedule-name> # Required. Name of the scheduled backup plan namespace: csdr spec: schedule: 1 4 * * * # Required. Cron expression: # ┌── minute (0–59) # │ ┌── hour (0–23) # │ │ ┌── day of month (1–31) # │ │ │ ┌── month (1–12) # │ │ │ │ ┌── day of week (0–6, Sunday=0) # │ │ │ │ │ # 1 4 * * * → runs at 04:01 every day # For more cron examples, see How to specify a backup schedule. template: includedNamespaces: - default # Required. Namespaces to include in the backup includedResources: - statefulset # Optional. Resource types to back up excludedResources: # Optional. Configuring this parameter together with includedResources - deployment # causes unexpected results. Configure only one of them. # If both are empty, all resource types are backed up. labelSelector: matchLabels: app: mysql-sts # Optional. Only resources with this label are backed up includeClusterResources: false # Optional pvBackup: defaultPvBackup: true # Required. Whether to back up PVs, that is, whether to # enable data backup: # true: back up application resources and PVs # false: back up application resources only storageLocation: <your-backup-repository-name> # Required. Name of the backup repository. # Note: If your cluster already uses Velero, join the # DingTalk user group (Group Number: 35532895) for assistance. ttl: 720h0m0s # Required. Retention period; range: 24h0m0s to # 1572864h0m0s. Backup data cannot be restored # after the retention period expires.Aucune configuration n'est requise pour les autres paramètres. Conservez les valeurs par défaut.
Consultez la rubrique Comment spécifier un planning de sauvegarde.
-
Appliquez le manifeste dans le cluster de sauvegarde :
kubectl apply -f backupschedule.yaml -
Vérifiez que le planning est actif :
kubectl describe backupschedule <your-backup-schedule-name> -n csdrLe planning est en cours d'exécution lorsque le champ
PhaseindiqueEnabled:... Status: Last Backup: 2022-12-07T20:01:11Z Last Processed Time: 2022-12-08T13:05:37Z Phase: Enabled -
Listez les sauvegardes ponctuelles créées par le planning :
kubectl get applicationbackup -n csdr | grep <your-backup-schedule-name>Chaque exécution planifiée crée une ressource
ApplicationBackuphorodatée :<your-backup-schedule-name>-20221205225845 2d22h <your-backup-schedule-name>-20221206040104 2d17h <your-backup-schedule-name>-20221207040137 41h <your-backup-schedule-name>-20221208040111 17hNotez ces noms, car vous en aurez besoin pour créer une tâche de restauration.
Protection des données
La fonction Data Protection sauvegarde uniquement les données de volume (PVC et PV). Utilisez kind: ApplicationBackup avec backupType: PvBackup (valeur fixe).
Sauvegarde à la demande
-
Créez le fichier
applicationbackup.yamldans le cluster de sauvegarde :ImportantSi
pvcListetstorageClassListsont tous deux spécifiés,storageClassListest ignoré. Si aucun des deux n'est spécifié, tous les PV du namespace indiqué sont sauvegardés.apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationBackup metadata: annotations: # Required. Information about the backup repository that stores this backup. # The value must match the backup repository configuration. csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<cnfs-oss-your-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-backup-name> # Required. Name of the on-demand backup namespace: csdr spec: backupType: PvBackup # Required. Fixed value for Data Protection includedNamespaces: - default # Required. Namespaces to include in the backup pvBackup: # Optional. Option 1: specify PVs by PVC name. If you also specify storageClassList, # storageClassList is ignored. Configure only one of the two parameters. pvcList: - name: essd-pvc-0 namespace: default - name: essd-pvc-1 namespace: default # Optional. Option 2: specify PVs by storage class. This parameter is ignored if you # also specify pvcList. Configure only one of the two parameters. storageClassList: - disk-essd - disk-ssd # If neither pvcList nor storageClassList is set, all PVs in the namespace are backed up. storageLocation: <your-backup-repository-name> # Required. Name of the backup repository. # Note: If your cluster already uses Velero, join the # DingTalk user group (Group Number: 35532895) for assistance. ttl: 720h0m0s # Required. Retention period; range: 24h0m0s to # 1572864h0m0s. Backup data cannot be restored # after the retention period expires. -
Appliquez le manifeste dans le cluster de sauvegarde :
kubectl apply -f applicationbackup.yaml -
Vérifiez l'état de la sauvegarde :
kubectl describe applicationbackup <your-application-backup-name> -n csdrRésultat attendu une fois la sauvegarde terminée :
... Status: Completion Timestamp: 2025-03-25T08:20:24Z Expiration: 2025-04-24T08:18:03Z Message: success Phase: Completed
Sauvegarde planifiée
-
Créez le fichier
backupschedule.yamldans le cluster de sauvegarde :apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupSchedule metadata: annotations: # Required. Information about the backup repository that stores this backup. # The value must match the backup repository configuration. csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<cnfs-oss-your-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-backup-schedule-name> # Required. Name of the scheduled backup plan namespace: csdr spec: schedule: 1 4 * * * # Required. Backup interval in cron format template: backupType: PvBackup # Required. Fixed value for Data Protection includedNamespaces: - default # Required. Namespaces to include in the backup pvBackup: # Optional. Specify PVs by PVC name. If you also specify storageClassList, # storageClassList is ignored. Configure only one of the two parameters. pvcList: - name: essd-pvc-0 namespace: default - name: essd-pvc-1 namespace: default # Optional. Specify PVs by storage class. This parameter is ignored if you also # specify pvcList. Configure only one of the two parameters. storageClassList: - disk-essd - disk-ssd storageLocation: <your-backup-repository-name> # Required. Backup repository name ttl: 720h0m0s # Required. Retention period; range: 24h0m0s to # 1572864h0m0s. Backup data cannot be restored # after the retention period expires. -
Appliquez le manifeste dans le cluster de sauvegarde :
kubectl apply -f backupschedule.yaml -
Vérifiez que le planning est actif :
kubectl describe backupschedule <your-backup-schedule-name> -n csdrRésultat attendu lorsque le planning est actif :
... Status: Last Backup: 2025-03-25T09:24:38Z Phase: Enabled
Étape 3 : Créer une tâche de restauration
-
Créez le fichier
applicationrestore.yamldans le cluster de restauration :Les paramètres
appRestoreOnly,preserveNodePorts,includedResourcesetexcludedResourcess'appliquent uniquement à la sauvegarde d'applications et sont ignorés lors de la protection des données.Pour identifier les noms des PVC et les types de données, exécutez la commande
kubectl describe applicationbackup <your-application-backup-name> -n csdret examinez le champstatus.resourceList.dataResource.pvcBackupInfo. Le paramètredataTypeindique si le type estFileSystemouSnapshot. Les champsnameSpaceetpvcNamepermettent d'identifier le PVC. Dans la sectionconvertedarg, les paramètresconvertToStorageClassType,namespaceetpersistentVolumeClaimsont obligatoires. Le champnamespacecorrespond à l'espace de noms de la revendication de volume persistant (PVC), tandis quepersistentVolumeClaimen représente le nom. Le paramètreconvertToAccessModesest une liste facultative définissant les modes d'accès cibles.ImportantAfin d'éviter des résultats de restauration inattendus, configurez soit
includedResources, soitexcludedResources, mais pas les deux simultanément. Si ces deux listes sont vides, tous les types de ressources sauvegardés seront restaurés.apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationRestore metadata: annotations: # Required. Information about the backup repository that stores this backup. # The value must match the backup repository configuration. csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<cnfs-oss-your-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-restore-name> # Required. Name of the restore task namespace: csdr spec: backupName: <your-application-backup-name> # Required. The backup to restore. When you restore # from a scheduled backup plan, specify # the timestamped name, for example: # <your-backup-schedule-name>-20221205225845 includedNamespaces: - default # Required. Namespaces to restore; leave blank to restore all backed-up namespaces appRestoreOnly: false # Optional. Application Backup only; ignored in Data Protection. For # a backup that includes PV data, specifies whether to restore # applications only, without PVCs, PVs, and their data: # false (default): restore application resources and PV data # true: restore application resources only. To change the data # source of the restored application, create the PVCs and PVs # in advance, and set this parameter to true. preserveNodePorts: true # Optional. Whether to preserve the NodePort of the # application. When the backup cluster and the restore cluster # are the same, the default is false. # false: assign random NodePort values to avoid conflicts # with existing applications of the same type # true: preserve original NodePort values (use when # restoring to a different cluster) includedResources: - statefulset # Optional. Application Backup only; resource types to restore excludedResources: - secret # Optional. Application Backup only; resource types to skip namespaceMapping: <source-namespace>: <target-namespace> # Optional. Remap namespace during restore; # target namespace is created if it # doesn't exist imageRegistryMapping: <old-image-registry>: <new-image-registry> # Optional. Remap the image registry for all # application images whose address starts # with the source address. The key is a # registry prefix, not a full image path. # For example, map # registry.cn-beijing.aliyuncs.com/my-registry/ # to registry.cn-hangzhou.aliyuncs.com/my-registry/ # to restore nginx:v1 from Beijing to Hangzhou. # If not set, the image settings in the # applications remain unchanged. convertedarg: # Optional. StorageClass conversions for file system-type # volumes. Source volume types include OSS, File Storage # NAS (NAS), Cloud Parallel File Storage (CPFS), local # storage, and other file system types. The current version # supports only Cloud Disk or File Storage NAS storage classes # as conversion targets. - convertToStorageClassType: alicloud-disk-topology-alltype # Required. Target StorageClass # (must exist in cluster) convertToAccessModes: # Optional. List of target access modes - ReadWriteOnce # Required when converting PVs with ReadWriteMany or # ReadOnlyMany access modes to a Cloud Disk StorageClass, # to avoid the risk of forced disk detachment namespace: nas # Required. Namespace of the PVC persistentVolumeClaim: pvc-nas # Required. Name of the PVC - convertToStorageClassType: alicloud-disk-topology-alltype namespace: oss persistentVolumeClaim: pvc-ossAucune configuration n'est requise pour les autres paramètres. Conservez les valeurs par défaut.
-
Appliquez le manifeste dans le cluster de restauration :
kubectl apply -f applicationrestore.yaml -
Vérifiez l'état de la restauration :
kubectl describe applicationrestore <your-application-restore-name> -n csdrLa restauration est terminée lorsque le champ
Phasepasse deInprogressàCompleted:... Status: Completion Timestamp: 2022-12-05T15:52:19Z Phase: Completed Start Timestamp: 2022-12-05T15:52:09Z
Étape 4 : Supprimer les ressources de sauvegarde et de restauration
N'utilisez pas la commande kubectl delete pour supprimer les ressources ApplicationBackup ou ApplicationRestore. Cette commande ne supprime pas les données associées. Utilisez plutôt une ressource personnalisée (CR) DeleteRequest.
Supprimer un plan de sauvegarde planifié
Supprimez la ressource BackupSchedule pour arrêter la planification et empêcher les futures sauvegardes :
kubectl delete backupschedule <your-backup-schedule-name> -n csdr
Supprimer une tâche de sauvegarde ou de restauration
-
Créez le fichier
deleterequest.yamldans le cluster où réside la ressource :ImportantLa suppression d'une tâche de sauvegarde n'affecte pas les données déjà sauvegardées dans le référentiel de sauvegarde.
La suppression d'une tâche de restauration n'affecte pas les ressources restaurées.
apiVersion: csdr.alibabacloud.com/v1beta1 kind: DeleteRequest metadata: name: <object-name>-dbr # Required. Append -dbr to the name of the resource being deleted namespace: csdr spec: deleteObjectName: <object-name> # Required. Name of the ApplicationBackup or # ApplicationRestore resource to delete deleteObjectType: "Backup" # Required. "Backup": deletes the ApplicationBackup job # and its associated resources. "Restore": deletes # the ApplicationRestore task and its # associated resourcesAucune configuration n'est requise pour les autres paramètres. Conservez les valeurs par défaut.
-
Appliquez la demande de suppression :
kubectl apply -f deleterequest.yaml -
Vérifiez la suppression. La ressource cible ainsi que la CR
DeleteRequestsont automatiquement supprimées. Pour une tâche de sauvegarde :kubectl get applicationbackup <your-application-backup-name> -n csdrSortie attendue :
Error from server (NotFound): applicationbackups.csdr.alibabacloud.com "your-application-backup-name" not foundkubectl get deleterequest <your-application-backup-name>-dbr -n csdrSortie attendue :
Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-backup-name-dbr" not foundPour une tâche de restauration :
kubectl get applicationrestore <your-application-restore-name> -n csdrSortie attendue :
Error from server (NotFound): applicationrestores.csdr.alibabacloud.com "your-application-restore-name" not foundkubectl get deleterequest <your-application-restore-name>-dbr -n csdrSortie attendue :
Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-restore-name-dbr" not found
Étapes suivantes
-
Pour gérer les sauvegardes depuis la console ACK au lieu d'utiliser
kubectl: Pour migrer des applications entre différents plug-ins de stockage ou versions de Kubernetes, consultez la rubrique Utilisez Backup Center pour migrer des applications depuis un cluster Kubernetes d’une version antérieure.
Consultez la rubrique Sauvegardez et restaurez des applications à l’aide de Terraform.