Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Back up and restore applications with kubectl

Dernière mise à jour :Oct 10, 2026

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 delete ne supprime pas les données de sauvegarde associées. Utilisez plutôt une CR DeleteRequest. 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 BackupLocation ne 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.

  1. 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: alibabacloud

    Aucune configuration n'est requise pour les autres paramètres. Conservez les valeurs par défaut.

  2. Appliquez le manifeste sur les deux clusters :

    kubectl apply -f backuplocation.yaml
  3. Vérifiez que le référentiel est disponible sur chaque cluster :

    kubectl describe backuplocation <your-backup-repository-name> -n csdr

    Le référentiel est prêt lorsque le champ Phase indique Available :

    ...
    Status:
      Last Validation Time:  2022-12-08T04:00:22Z
      Message:               success by csdr-controller
      Phase:                 Available

    La valeur Available confirme 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

  1. Créez le fichier applicationbackup.yaml dans le cluster de sauvegarde :

    Important

    Configurez soit includedResources, soit excludedResources, 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, includeClusterResources est défini par défaut sur false .
    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.

  2. Appliquez le manifeste dans le cluster de sauvegarde :

    kubectl apply -f applicationbackup.yaml
  3. Vérifiez l'état de la sauvegarde :

    kubectl describe applicationbackup <your-application-backup-name> -n csdr

    La sauvegarde est terminée lorsque le champ Phase passe de Inprogress à Completed :

    ...
    Status:
      Completion Timestamp:  2022-12-05T15:02:35Z
      Expiration:            2023-01-04T15:02:25Z
      Message:               success
      Phase:                 Completed

Sauvegarde planifiée

  1. Créez le fichier backupschedule.yaml dans 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.

  2. Appliquez le manifeste dans le cluster de sauvegarde :

    kubectl apply -f backupschedule.yaml
  3. Vérifiez que le planning est actif :

    kubectl describe backupschedule <your-backup-schedule-name> -n csdr

    Le planning est en cours d'exécution lorsque le champ Phase indique Enabled :

    ...
    Status:
      Last Backup:          2022-12-07T20:01:11Z
      Last Processed Time:  2022-12-08T13:05:37Z
      Phase:                Enabled
  4. 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 ApplicationBackup horodatée :

    <your-backup-schedule-name>-20221205225845   2d22h
    <your-backup-schedule-name>-20221206040104   2d17h
    <your-backup-schedule-name>-20221207040137   41h
    <your-backup-schedule-name>-20221208040111   17h

    Notez 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

  1. Créez le fichier applicationbackup.yaml dans le cluster de sauvegarde :

    Important

    Si pvcList et storageClassList sont tous deux spécifiés, storageClassList est 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.
  2. Appliquez le manifeste dans le cluster de sauvegarde :

    kubectl apply -f applicationbackup.yaml
  3. Vérifiez l'état de la sauvegarde :

    kubectl describe applicationbackup <your-application-backup-name> -n csdr

    Ré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

  1. Créez le fichier backupschedule.yaml dans 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.
  2. Appliquez le manifeste dans le cluster de sauvegarde :

    kubectl apply -f backupschedule.yaml
  3. Vérifiez que le planning est actif :

    kubectl describe backupschedule <your-backup-schedule-name> -n csdr

    Ré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

  1. Créez le fichier applicationrestore.yaml dans le cluster de restauration :

    Les paramètres appRestoreOnly, preserveNodePorts, includedResources et excludedResources s'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 csdr et examinez le champ status.resourceList.dataResource.pvcBackupInfo. Le paramètre dataType indique si le type est FileSystem ou Snapshot. Les champs nameSpace et pvcName permettent d'identifier le PVC. Dans la section convertedarg, les paramètres convertToStorageClassType, namespace et persistentVolumeClaim sont obligatoires. Le champ namespace correspond à l'espace de noms de la revendication de volume persistant (PVC), tandis que persistentVolumeClaim en représente le nom. Le paramètre convertToAccessModes est une liste facultative définissant les modes d'accès cibles.
    Important

    Afin d'éviter des résultats de restauration inattendus, configurez soit includedResources, soit excludedResources, 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-oss

    Aucune configuration n'est requise pour les autres paramètres. Conservez les valeurs par défaut.

  2. Appliquez le manifeste dans le cluster de restauration :

    kubectl apply -f applicationrestore.yaml
  3. Vérifiez l'état de la restauration :

    kubectl describe applicationrestore <your-application-restore-name> -n csdr

    La restauration est terminée lorsque le champ Phase passe de Inprogress à 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

Important

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

  1. Créez le fichier deleterequest.yaml dans le cluster où réside la ressource :

    Important
    • La 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 resources

    Aucune configuration n'est requise pour les autres paramètres. Conservez les valeurs par défaut.

  2. Appliquez la demande de suppression :

    kubectl apply -f deleterequest.yaml
  3. Vérifiez la suppression. La ressource cible ainsi que la CR DeleteRequest sont automatiquement supprimées. Pour une tâche de sauvegarde :

    kubectl get applicationbackup <your-application-backup-name> -n csdr

    Sortie attendue :

    Error from server (NotFound): applicationbackups.csdr.alibabacloud.com "your-application-backup-name" not found
    kubectl get deleterequest <your-application-backup-name>-dbr -n csdr

    Sortie attendue :

    Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-backup-name-dbr" not found

    Pour une tâche de restauration :

    kubectl get applicationrestore <your-application-restore-name> -n csdr

    Sortie attendue :

    Error from server (NotFound): applicationrestores.csdr.alibabacloud.com "your-application-restore-name" not found
    kubectl get deleterequest <your-application-restore-name>-dbr -n csdr

    Sortie attendue :

    Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-restore-name-dbr" not found

Étapes suivantes