Todos los productos
Search
Centro de documentos

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

Última actualización: Sep 04, 2026

Despliegue los recursos personalizados (CR) BackupLocation, ApplicationBackup, BackupSchedule, ApplicationRestore y DeleteRequest mediante kubectl para gestionar directamente las operaciones de copia de seguridad y restauración.

Requisitos previos

Asegúrese de cumplir con lo siguiente:

  • El complemento migrate-controller está instalado y los permisos obligatorios están configurados.

Notas de uso

  • Mantenga migrate-controller actualizado. Las versiones obsoletas pueden provocar comportamientos inesperados. Consulte Components.

  • Utilice DeleteRequest para eliminar trabajos de copia de seguridad y restauración. El comando kubectl delete no elimina los datos de copia de seguridad asociados. En su lugar, utilice un CR DeleteRequest. Consulte Step 4: Delete backup and restore resources.

  • No elimine parámetros de los archivos YAML de ejemplo. Quitar campos obligatorios provoca errores en la copia de seguridad y la restauración.

  • Los recursos BackupLocation no se pueden eliminar desde Backup Center porque los repositorios podrían estar compartidos entre varios clústeres.

Paso 1: Crear un repositorio de copias de seguridad

Un repositorio de copias de seguridad (BackupLocation) define el bucket de OSS donde se almacenan los datos de respaldo. Cree el mismo recurso BackupLocation tanto en el clúster de origen como en el de destino para que ambos compartan los mismos datos.

  1. Cree el archivo backuplocation.yaml:

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: BackupLocation
    metadata:
      name: <your-backup-location-name>   # Must follow Kubernetes naming conventions
      namespace: csdr
    spec:
      backupSyncPeriod: 0s
      config:
        network: internal   # internal: clusters and bucket must be in the same region
                            # public: no region restriction
        region: cn-beijing  # Region where the OSS bucket is located
      objectStorage:
        bucket: <cnfs-oss-your-bucket-name>   # Must start with cnfs-oss-; create in advance
        prefix: <your-subdirectory-name>       # Optional: store backups in this subdirectory
      provider: alibabacloud
  2. Aplique el manifiesto en ambos clústeres:

    kubectl apply -f backuplocation.yaml
  3. Compruebe que el repositorio esté disponible en cada clúster:

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

    El repositorio estará listo cuando Phase muestre Available:

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

    El estado Available confirma que el clúster tiene acceso al bucket de OSS.

Paso 2: Crear un trabajo de copia de seguridad

Backup Center admite dos tipos de copia de seguridad:

  • Application Backup: Realiza copias de seguridad de recursos de Kubernetes (como StatefulSets y Deployments) junto con sus volúmenes persistentes (PV).

  • Data Protection: Realiza copias de seguridad únicamente de los PV, sin incluir los recursos de la aplicación.

Consulte Scenarios for Application Backup and Data Protection.

Cada tipo permite ejecutar copias de seguridad bajo demanda o programadas.

Copia de seguridad de aplicaciones

Copia de seguridad bajo demanda

  1. Cree el archivo applicationbackup.yaml en el clúster de copia de seguridad:

    Importante

    Configure includedResources o excludedResources, pero no ambos. Si los dos campos están vacíos, se realizará la copia de seguridad de todos los tipos de recursos.

    En los trabajos de copia de seguridad creados desde la consola, includeClusterResources tiene como valor predeterminado false .
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationBackup
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"}
      name: <your-application-backup-name>
      namespace: csdr
    spec:
      includedNamespaces:
        - default                # Namespaces to include in the backup
      includedResources:
        - statefulset            # Resource types to include (configure only one of
      excludedResources:         # includedResources or excludedResources; when both
        - deployment             # are empty, all resource types are backed up)
      labelSelector:
        matchLabels:
          app: mysql-sts         # Only resources with this label are backed up
      includeClusterResources: false   # false: only cluster-level resources referenced
                                       # by selected namespace resources are backed up
                                       # (e.g., ClusterRoles, CRDs)
                                       # true: all cluster-level resources are backed up
      pvBackup:
        defaultPvBackup: false   # false: back up application resources only
                                 # true: back up application resources and PVs
      storageLocation: <your-backup-repository-name>
                                 # Note: If your cluster already uses Velero, join the
                                 # DingTalk user group (Group Number: 35532895) for assistance.
      ttl: 720h0m0s              # Retention period; range: 24h0m0s to 1572864h0m0s
  2. Aplique el manifiesto en el clúster de copia de seguridad:

    kubectl apply -f applicationbackup.yaml
  3. Revise el estado de la copia de seguridad:

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

    La copia de seguridad habrá finalizado cuando Phase cambie de Inprogress a Completed:

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

Copia de seguridad programada

  1. Cree el archivo backupschedule.yaml en el clúster de copia de seguridad:

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: BackupSchedule
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"}
      name: <your-backup-schedule-name>
      namespace: csdr
    spec:
      schedule: 1 4 * * *   # 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
        includedResources:
          - statefulset
        excludedResources:
          - deployment
        labelSelector:
          matchLabels:
            app: mysql-sts
        includeClusterResources: false
        pvBackup:
          defaultPvBackup: true   # Required for scheduled backups; true: back up app + PVs
        storageLocation: <your-backup-repository-name>
                                   # Note: If your cluster already uses Velero, join the
                                   # DingTalk user group (Group Number: 35532895) for assistance.
        ttl: 720h0m0s

    Consulte How to specify a backup schedule.

  2. Aplique el manifiesto en el clúster de copia de seguridad:

    kubectl apply -f backupschedule.yaml
  3. Verifique que la programación esté activa:

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

    La programación se encuentra en ejecución cuando Phase muestra Enabled:

    ...
    Status:
      Last Backup:          2022-12-07T20:01:11Z
      Last Processed Time:  2022-12-08T13:05:37Z
      Phase:                Enabled
  4. Enumere las copias de seguridad puntuales generadas por la programación:

    kubectl get applicationbackup -n csdr | grep <your-backup-schedule-name>

    Cada ejecución programada genera un recurso ApplicationBackup con marca de tiempo:

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

    Tome nota de estos nombres, ya que son necesarios para crear una tarea de restauración.

Protección de datos

La protección de datos realiza copias de seguridad exclusivamente de los PV. Utilice kind: ApplicationBackup con backupType: PvBackup (un valor fijo).

Copia de seguridad bajo demanda

  1. Cree el archivo applicationbackup.yaml en el clúster de copia de seguridad:

    Importante

    Si se especifican tanto pvcList como storageClassList, se ignora storageClassList. Si no se especifica ninguno de los dos, se realiza la copia de seguridad de todos los PV del namespace indicado.

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationBackup
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"}
      name: <your-application-backup-name>
      namespace: csdr
    spec:
      backupType: PvBackup   # Fixed value for Data Protection
      includedNamespaces:
        - default
      pvBackup:
        # Option 1: specify PVCs by name
        pvcList:
          - name: essd-pvc-0
            namespace: default
          - name: essd-pvc-1
            namespace: default
        # Option 2: specify PVCs by storage class (ignored if pvcList is also set)
        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>
                       # Note: If your cluster already uses Velero, join the
                       # DingTalk user group (Group Number: 35532895) for assistance.
      ttl: 720h0m0s
  2. Aplique el manifiesto en el clúster de copia de seguridad:

    kubectl apply -f applicationbackup.yaml
  3. Revise el estado de la copia de seguridad:

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

    Salida esperada al finalizar:

    ...
    Status:
      Completion Timestamp:  2025-03-25T08:20:24Z
      Expiration:            2025-04-24T08:18:03Z
      Message:               success
      Phase:                 Completed

Copia de seguridad programada

  1. Cree el archivo backupschedule.yaml en el clúster de copia de seguridad:

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: BackupSchedule
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"}
      name: <your-backup-schedule-name>
      namespace: csdr
    spec:
      schedule: 1 4 * * *
      template:
        backupType: PvBackup   # Fixed value for Data Protection
        includedNamespaces:
          - default
        pvBackup:
          pvcList:
            - name: essd-pvc-0
              namespace: default
            - name: essd-pvc-1
              namespace: default
          storageClassList:
            - disk-essd
            - disk-ssd
        storageLocation: <your-backup-repository-name>
        ttl: 720h0m0s
  2. Aplique el manifiesto en el clúster de copia de seguridad:

    kubectl apply -f backupschedule.yaml
  3. Verifique que la programación esté activa:

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

    Salida esperada cuando está activa:

    ...
    Status:
      Last Backup:  2025-03-25T09:24:38Z
      Phase:        Enabled

Paso 3: Crear una tarea de restauración

  1. Cree el archivo applicationrestore.yaml en el clúster de restauración:

    Los parámetros appRestoreOnly , preserveNodePorts , includedResources y excludedResources aplican únicamente a Application Backup y se ignoran en Data Protection.
    Para obtener los nombres de los PVC y los tipos de datos, ejecute kubectl -ncsdr describe <backup-name> y revise status.resourceList.dataResource.pvcBackupInfo . dataType muestra FileSystem o Snapshot ; nameSpace y pvcName identifican el PVC.
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationRestore
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"}
      name: <your-application-restore-name>
      namespace: csdr
    spec:
      backupName: <your-application-backup-name>   # For scheduled backups, specify the
                                                    # point-in-time name, e.g.:
                                                    # <your-backup-schedule-name>-20221205225845
      includedNamespaces:
        - default             # Namespaces to restore; leave blank to restore all namespaces
      appRestoreOnly: false   # Application Backup only; ignored in Data Protection
                              # false (default): restore app resources and PV data
                              # true: restore app resources only (use when manually
                              #       pre-creating PVCs before restore)
      preserveNodePorts: true # Application Backup only; ignored in Data Protection
                              # false: assign random NodePort values (use when restoring
                              #        to the same cluster to avoid port conflicts)
                              # true: preserve original NodePort values (use when
                              #       restoring to a different cluster)
      includedResources:
        - statefulset         # Application Backup only; resource types to restore
      excludedResources:
        - secret              # Application Backup only; resource types to skip
      namespaceMapping:
        <source-namespace>: <target-namespace>   # Remap namespace during restore;
                                                  # target namespace is created if it
                                                  # doesn't exist
      imageRegistryMapping:
        <old-image-registry>: <new-image-registry>   # Remap image registry for all
                                                       # images whose address starts with
                                                       # the source prefix
      convertedarg:           # StorageClass conversions for file system-type volumes
                              # (OSS, File Storage NAS (NAS), Cloud Parallel File
                              # Storage (CPFS), or local storage) to a Cloud Disk or
                              # File Storage NAS StorageClass
        - convertToStorageClassType: alicloud-disk-topology-alltype   # Target StorageClass
                                                                       # (must exist in cluster)
          convertToAccessModes:
            - ReadWriteOnce   # Required when converting PVs with ReadWriteMany or
                              # ReadOnlyMany access modes to a Cloud Disk StorageClass
          namespace: nas
          persistentVolumeClaim: pvc-nas
        - convertToStorageClassType: alicloud-disk-topology-alltype
          namespace: oss
          persistentVolumeClaim: pvc-oss
  2. Aplique el manifiesto en el clúster de restauración:

    kubectl apply -f applicationrestore.yaml
  3. Revise el estado de la restauración:

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

    La restauración habrá finalizado cuando Phase cambie de Inprogress a Completed:

    ...
    Status:
      Completion Timestamp:  2022-12-05T15:52:19Z
      Phase:                 Completed
      Start Timestamp:       2022-12-05T15:52:09Z

Paso 4: Eliminar recursos de copia de seguridad y restauración

Importante

No utilice kubectl delete para quitar recursos ApplicationBackup o ApplicationRestore. El comando kubectl delete no elimina los datos asociados. En su lugar, utilice un CR DeleteRequest.

Eliminar un plan de copia de seguridad programada

Elimine el recurso BackupSchedule para detener una programación y evitar futuras copias de seguridad:

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

Eliminar un trabajo de copia de seguridad o una tarea de restauración

  1. Cree el archivo deleterequest.yaml en el clúster donde reside el recurso:

    Eliminar un trabajo de copia de seguridad no afecta a las réplicas sincronizadas. Eliminar una tarea de restauración no afecta a los recursos restaurados.
    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: DeleteRequest
    metadata:
      name: <object-name>-dbr   # Append -dbr to the name of the resource being deleted
      namespace: csdr
    spec:
      deleteObjectName: <object-name>         # Name of the ApplicationBackup or
                                               # ApplicationRestore resource to delete
      deleteObjectType: "Backup"              # "Backup": deletes the ApplicationBackup job
                                               # "Restore": deletes the ApplicationRestore task
  2. Aplique la solicitud de eliminación:

    kubectl apply -f deleterequest.yaml
  3. Verifique la eliminación. Tanto el recurso de destino como el CR DeleteRequest se eliminan automáticamente. Para un trabajo de copia de seguridad:

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

    Salida esperada:

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

    Salida esperada:

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

    Para una tarea de restauración:

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

    Salida esperada:

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

    Salida esperada:

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

Siguientes pasos