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 deletenão remove os dados de backup associados. Use um CRDeleteRequest. 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
BackupLocationpelo 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.
-
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 -
Aplique o manifesto em ambos os clusters:
kubectl apply -f backuplocation.yaml -
Verifique se o repositório está disponível em cada cluster:
kubectl describe backuplocation <your-backup-location-name> -n csdrO repositório estará pronto quando
PhaseexibirAvailable:... Status: Last Validation Time: 2022-12-08T04:00:22Z Message: success by csdr-controller Phase: AvailableO status
Availableconfirma 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
-
Crie o arquivo
applicationbackup.yamlno cluster de backup:ImportanteConfigure
includedResourcesouexcludedResources, mas não ambos. Se ambos estiverem vazios, o backup incluirá todos os tipos de recursos.Para jobs de backup criados via console,
includeClusterResourcestem como padrãofalse.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 -
Aplique o manifesto no cluster de backup:
kubectl apply -f applicationbackup.yaml -
Verifique o status do backup:
kubectl describe applicationbackup <your-application-backup-name> -n csdrO backup estará concluído quando
Phasemudar deInprogressparaCompleted:... Status: Completion Timestamp: 2022-12-05T15:02:35Z Expiration: 2023-01-04T15:02:25Z Message: success Phase: Completed
Backup agendado
-
Crie o arquivo
backupschedule.yamlno 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 -
Aplique o manifesto no cluster de backup:
kubectl apply -f backupschedule.yaml -
Verifique se o agendamento está ativo:
kubectl describe backupschedule <your-backup-schedule-name> -n csdrO agendamento estará em execução quando
PhaseexibirEnabled:... Status: Last Backup: 2022-12-07T20:01:11Z Last Processed Time: 2022-12-08T13:05:37Z Phase: Enabled -
Liste os backups pontuais criados pelo agendamento:
kubectl get applicationbackup -n csdr | grep <your-backup-schedule-name>Cada execução agendada cria um recurso
ApplicationBackupcom 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 17hAnote 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
-
Crie o arquivo
applicationbackup.yamlno cluster de backup:ImportanteSe você especificar
pvcListestorageClassListsimultaneamente, 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 -
Aplique o manifesto no cluster de backup:
kubectl apply -f applicationbackup.yaml -
Verifique o status do backup:
kubectl describe applicationbackup <your-application-backup-name> -n csdrSaí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
-
Crie o arquivo
backupschedule.yamlno 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 -
Aplique o manifesto no cluster de backup:
kubectl apply -f backupschedule.yaml -
Verifique se o agendamento está ativo:
kubectl describe backupschedule <your-backup-schedule-name> -n csdrSaída esperada quando ativo:
... Status: Last Backup: 2025-03-25T09:24:38Z Phase: Enabled
Etapa 3: Criar uma tarefa de restauração
-
Crie o arquivo
applicationrestore.yamlno cluster de restauração:Os parâmetros
appRestoreOnly,preserveNodePorts,includedResourceseexcludedResourcesaplicam-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 verifiquestatus.resourceList.dataResource.pvcBackupInfo. O campodataTypeexibeFileSystemouSnapshot;nameSpaceepvcNameidentificam 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 -
Aplique o manifesto no cluster de restauração:
kubectl apply -f applicationrestore.yaml -
Verifique o status da restauração:
kubectl describe applicationrestore <your-application-restore-name> -n csdrA restauração estará concluída quando
Phasemudar deInprogressparaCompleted:... 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
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
-
Crie o arquivo
deleterequest.yamlno 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 -
Aplique a solicitação de exclusão:
kubectl apply -f deleterequest.yaml -
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 csdrSaída esperada:
Error from server (NotFound): applicationbackups.csdr.alibabacloud.com "your-application-backup-name" not foundkubectl get deleterequest <your-application-backup-name>-dbr -n csdrSaída esperada:
Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-backup-name-dbr" not foundPara uma tarefa de restauração:
kubectl get applicationrestore <your-application-restore-name> -n csdrSaída esperada:
Error from server (NotFound): applicationrestores.csdr.alibabacloud.com "your-application-restore-name" not foundkubectl get deleterequest <your-application-restore-name>-dbr -n csdrSaída esperada:
Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-restore-name-dbr" not found
Próximas etapas
-
Para gerenciar backups pelo console do ACK em vez de usar
kubectl: Consulte Usar o Backup Center para migrar aplicações de um cluster Kubernetes de versão anterior.
Consulte Fazer backup e restaurar aplicações usando Terraform.