Todos os produtos
Search
Central de documentação

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

Última atualização: Jun 27, 2026

Implante os recursos personalizados (CRs) BackupLocation, ApplicationBackup, BackupSchedule, ApplicationRestore e DeleteRequest com kubectl para gerenciar operações de backup e restauração diretamente.

Pré-requisitos

Verifique se:

  • O add-on migrate-controller está instalado e as permissões necessárias estão configuradas.

Notas de uso

  • Mantenha o migrate-controller atualizado. Versões desatualizadas podem causar comportamentos inesperados. Consulte Gerenciar componentes.

  • Use DeleteRequest para remover jobs de backup e restauração. O comando kubectl delete não remove os dados de backup associados. Use um CR DeleteRequest. Consulte Etapa 4: Excluir recursos de backup e restauração.

  • Não remova parâmetros dos arquivos YAML de exemplo. A remoção de campos obrigatórios causa falha no backup e na restauração.

  • Não é possível excluir recursos BackupLocation pelo Backup Center, pois os repositórios podem ser compartilhados entre clusters.

Etapa 1: Criar um repositório de backup

Um repositório de backup (BackupLocation) define o bucket do OSS que armazena os dados de backup. Crie o mesmo BackupLocation tanto no cluster de origem quanto no de destino para que ambos compartilhem os mesmos dados.

  1. Crie o arquivo 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 o manifesto em ambos os clusters:

    kubectl apply -f backuplocation.yaml
  3. Verifique se o repositório está disponível em cada cluster:

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

    O repositório estará pronto quando Phase exibir Available:

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

    O status Available confirma que o cluster consegue acessar o bucket do OSS.

Etapa 2: Criar um job de backup

O Backup Center oferece suporte a dois tipos de backup:

  • Application Backup: Faz backup de recursos do Kubernetes (como StatefulSets e Deployments) juntamente com seus Persistent Volumes (PVs).

  • Data Protection: Faz backup apenas dos PVs, sem incluir recursos da aplicação.

Consulte Cenários para Application Backup e Data Protection.

Ambos os tipos permitem backups sob demanda e agendados.

Backup de aplicação

Backup sob demanda

  1. Crie o arquivo applicationbackup.yaml no cluster de backup:

    Importante

    Configure includedResources ou excludedResources, mas não ambos. Se ambos estiverem vazios, o backup incluirá todos os tipos de recursos.

    Para jobs de backup criados via console, includeClusterResources tem como padrão 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 o manifesto no cluster de backup:

    kubectl apply -f applicationbackup.yaml
  3. Verifique o status do backup:

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

    O backup estará concluído quando Phase mudar de Inprogress para Completed:

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

Backup agendado

  1. Crie o arquivo backupschedule.yaml no cluster de backup:

    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 Como especificar uma programação de backup.

  2. Aplique o manifesto no cluster de backup:

    kubectl apply -f backupschedule.yaml
  3. Verifique se o agendamento está ativo:

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

    O agendamento estará em execução quando Phase exibir Enabled:

    ...
    Status:
      Last Backup:          2022-12-07T20:01:11Z
      Last Processed Time:  2022-12-08T13:05:37Z
      Phase:                Enabled
  4. Liste os backups pontuais criados pelo agendamento:

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

    Cada execução agendada cria um recurso ApplicationBackup com carimbo de data/hora:

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

    Anote esses nomes, pois são necessários para criar uma tarefa de restauração.

Proteção de dados

O Data Protection faz backup apenas de PVs. Use kind: ApplicationBackup com backupType: PvBackup (valor fixo).

Backup sob demanda

  1. Crie o arquivo applicationbackup.yaml no cluster de backup:

    Importante

    Se você especificar pvcList e storageClassList simultaneamente, o sistema ignorará storageClassList. Caso nenhum dos dois seja definido, o backup incluirá todos os PVs no namespace especificado.

    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 o manifesto no cluster de backup:

    kubectl apply -f applicationbackup.yaml
  3. Verifique o status do backup:

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

    Saída esperada após a conclusão:

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

Backup agendado

  1. Crie o arquivo backupschedule.yaml no cluster de backup:

    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 o manifesto no cluster de backup:

    kubectl apply -f backupschedule.yaml
  3. Verifique se o agendamento está ativo:

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

    Saída esperada quando ativo:

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

Etapa 3: Criar uma tarefa de restauração

  1. Crie o arquivo applicationrestore.yaml no cluster de restauração:

    Os parâmetros appRestoreOnly , preserveNodePorts , includedResources e excludedResources aplicam-se apenas ao Application Backup e são ignorados no Data Protection.
    Para obter os nomes dos PVCs e os tipos de dados, execute kubectl -ncsdr describe <backup-name> e verifique status.resourceList.dataResource.pvcBackupInfo . O campo dataType exibe FileSystem ou Snapshot ; nameSpace e pvcName identificam o 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 o manifesto no cluster de restauração:

    kubectl apply -f applicationrestore.yaml
  3. Verifique o status da restauração:

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

    A restauração estará concluída quando Phase mudar de Inprogress para Completed:

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

Etapa 4: Excluir recursos de backup e restauração

Importante

Não use kubectl delete para remover recursos ApplicationBackup ou ApplicationRestore. O comando kubectl delete não remove os dados associados. Use um CR DeleteRequest.

Excluir um plano de backup agendado

Exclua o recurso BackupSchedule para interromper um agendamento e evitar backups futuros:

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

Excluir um job de backup ou tarefa de restauração

  1. Crie o arquivo deleterequest.yaml no cluster onde o recurso reside:

    A exclusão de um job de backup não afeta réplicas sincronizadas. A exclusão de uma tarefa de restauração não afeta os 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 a solicitação de exclusão:

    kubectl apply -f deleterequest.yaml
  3. Verifique a exclusão. O sistema remove automaticamente tanto o recurso alvo quanto o CR DeleteRequest. Para um job de backup:

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

    Saída 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

    Saída esperada:

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

    Para uma tarefa de restauração:

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

    Saída 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

    Saída esperada:

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

Próximas etapas