释放生成式AI的无限潜能

100 万免费令牌

降价88%

开始激活

通过kubectl实现集群应用的备份和恢复

更新时间:2025-03-31 05:12

当您无法通过容器服务控制台操作备份中心或容灾备份需要自动化实现时,您可以通过kubectl命令行在备份集群和恢复集群中部署备份仓库、应用备份、应用恢复的CR资源,以实现不同集群间应用的迁移。

前提条件

安装migrate-controller备份服务组件并配置权限

使用场景

  • 因权限问题,无法通过容器服务控制台操作备份中心。

  • 容灾备份流程需要自动化实现。

注意事项

  • 备份及恢复任务不能通过kubectl的delete命令简单删除。请参见下文步骤四:删除集群备份中心的相关资源

  • 关注备份中心组件migrate-controller版本发布情况,并及时升级。请参见管理组件

  • 请勿删除下文示例代码中出现的配置参数,以免备份恢复失败。

步骤一:创建备份仓库

  1. 使用以下内容,在备份集群和恢复集群中创建backuplocation.yaml文件。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: BackupLocation
    metadata:
      name: <yourBackuplocationName>
      namespace: csdr
    spec:
      backupSyncPeriod: 0s
      config:
        network: internal
        region: cn-beijing
      objectStorage:
        bucket: <cnfs-oss-yourBucketName>
        prefix: <subDir>
      provider: alibabacloud

    其余参数无需设置,保持默认配置即可。

    参数

    是否必选

    说明

    参数

    是否必选

    说明

    name

    备份仓库的名称,须符合K8s命名规则。

    network

    OSS Bucket的网络访问方式。取值:

    • internal:内网访问模式,所有关联集群与OSS Bucket需处于同一地域。

    • public:公网访问模式,无地域限制。

    region

    OSS Bucket所在地域。

    bucket

    OSS Bucket名称,需提前创建,且名称需符合以cnfs-oss-****开头的命名规则。

    prefix

    OSS Bucket子目录。设定该参数后,实际备份内容存储在此子目录下。

  2. 分别在备份集群和恢复集群中执行以下命令,部署backuplocation对象。

    kubectl apply -f backuplocation.yaml
  3. 分别在备份集群和恢复集群中执行以下命令,查看backuplocation的状态。

    kubectl describe backuplocation <yourBackuplocationName> -n csdr

    预期输出:

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

    由预期输出可看到,已创建的备份仓库状态为Available,说明当前集群具有访问OSS的权限可以直接访问。

步骤二:创建备份任务

您可以根据实际场景选择以下备份类型:

  • 应用备份:备份目标为集群中运行的业务,包括集群中的资源以及业务所使用的存储卷。

  • 数据保护:备份目标是存储卷数据,资源仅包括存储声明和存储卷。

更多信息,请参见应用备份和数据保护的适用场景

应用备份

创建立即备份任务
创建定时备份计划
  1. 使用以下内容,在备份集群中创建applicationbackup.yaml文件。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationBackup
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"}}
      name: <yourApplicationBackupName>
      namespace: csdr
    spec:
      includedNamespaces:
        - default
      includedResources:
        - statefulset
      excludedResources:
        - deployment
      labelSelector:
        matchLabels:
          app: mysql-sts
      includeClusterResources: false 
      pvBackup:
        defaultPvBackup: false
      storageLocation: <yourBackuplocationName>
      ttl: 720h0m0s

    其余参数无需设置,保持默认配置即可。

    参数

    是否必选

    说明

    csdr.alibabacloud.com/backuplocations

    备份所在的备份仓库信息,需与备份仓库的配置一致。

    name

    立即备份任务的名称。

    includedNamespaces

    指定命名空间名称。

    includedResources

    指定集群资源类型。

    重要

    为避免非预期备份结果,您只需配置includedResourcesexcludedResources中的一项。当两者均为空时,表示备份所有资源类型。

    excludedResources

    排除集群资源类型。

    重要

    为避免非预期备份结果,您只需配置includedResourcesexcludedResources中的一项。当两者均为空时,表示备份所有资源类型。

    matchLabels

    指定标签,只备份符合的资源。

    includeClusterResources

    是否备份Cluster级别的资源,例如StorageClass、CRD、Webhook等。

    • true:备份所有Cluster级别资源。

    • false:仅备份被选择的命名空间中的Namespace级别资源引用的Cluster级别资源。例如,备份Pod时,引用的ServiceAccount授权了某ClusterRole,该ClusterRole将被自动备份;备份CR时,CRD将被自动备份。

    说明

    通过容器服务管理控制台创建的备份任务,默认IncludeClusterResources字段为false

    defaultPvBackup

    是否备份存储卷,开启数据备份。取值:

    • true:备份应用和存储卷。

    • false:只备份应用。

    storageLocation

    备份仓库名称。

    说明

    若您的集群已使用Velero,请加入钉钉用户群(钉钉群号:35532895)咨询。

    ttl

    备份有效期,即备份任务的数据存储有效期,过期之后数据将无法恢复。格式如720h0m0s,取值范围:24h0m0s~1572864h0m0s。

  2. 在备份集群中执行以下命令,部署applicationbackup对象。

    kubectl apply -f applicationbackup.yaml
  3. 在备份集群中执行以下命令,查看立即备份任务的状态。

    kubectl describe applicationbackup <yourApplicationBackupName> -n csdr

    预期输出:

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

    当立即备份任务由Inprogress转为Completed状态,说明立即备份任务创建成功。

  1. 使用以下内容,在备份集群中创建backupschedule.yaml文件。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: BackupSchedule
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"}
      name: <yourBackupScheduleName>
      namespace: csdr
    spec:
      schedule: 1 4 * * *
      template:
        includedNamespaces:
          - default
        includedResources:
          - statefulset
        excludedResources:
          - deployment
        labelSelector:
          matchLabels:
            app: mysql-sts
        includeClusterResources: false 
        pvBackup:
          defaultPvBackup: true
        storageLocation: <yourBackuplocationName>
        ttl: 720h0m0s

    其余参数无需设置,保持默认配置即可。

    参数

    是否必选

    说明

    csdr.alibabacloud.com/backuplocations

    备份所在的备份仓库信息,需与备份仓库的配置一致。

    name

    定时备份计划的名称。

    schedule

    备份任务执行的周期时间,请使用Cron表达式。填写规则请参见创建备份计划时,备份周期如何填写

    includedNamespaces

    指定命名空间名称。

    includedResources

    指定集群资源类型。

    重要

    为避免非预期备份结果,您只需配置includedResourcesexcludedResources中的一项。当两者均为空时,表示备份所有资源类型。

    excludedResources

    排除集群资源类型。

    重要

    为避免非预期备份结果,您只需配置includedResourcesexcludedResources中的一项。当两者均为空时,表示备份所有资源类型。

    matchLabels

    指定标签,只备份符合条件的资源。

    includeClusterResources

    是否备份Cluster级别的资源,例如StorageClass、CRD、Webhook等。

    • true:备份所有Cluster级别资源。

    • false:仅备份被选择的命名空间中的Namespace级别资源引用的Cluster级别资源。例如,备份Pod时,引用的ServiceAccount授权了某ClusterRole,该ClusterRole将被自动备份;备份CR时,CRD将被自动备份。

    说明

    通过容器服务管理控制台创建的备份任务,默认IncludeClusterResources字段为false

    defaultPvBackup

    是否备份存储卷,开启数据备份。取值:

    • true:备份应用和存储卷。

    • false:只备份应用。

    storageLocation

    备份仓库名称。

    说明

    若您的集群已使用Velero,请加入钉钉用户群(钉钉群号:35532895)咨询。

    ttl

    备份有效期,即备份任务的数据存储有效期,过期之后数据将无法恢复。格式如720h0m0s,取值范围:24h0m0s~1572864h0m0s。

  2. 在备份集群中执行以下命令,部署backupschedule对象。

    kubectl apply -f backupschedule.yaml
  3. 在备份集群中执行以下命令,查看定时备份计划的状态。

    kubectl describe backupschedule <yourBackupScheduleName> -n csdr

    预期输出:

    ...
    Status:
      Last Backup:          2022-12-07T20:01:11Z
      Last Processed Time:  2022-12-08T13:05:37Z
      Phase:                Enabled

    当定时备份计划状态为Enabled,表明定时备份计划创建成功。

  4. 在备份集群中执行以下命令,查看定期创建的备份。

    kubectl get applicationbackup -n csdr | grep <yourBackupScheduleName>

    预期输出:

    <yourBackupScheduleName>-20221205225845   2d22h
    <yourBackupScheduleName>-20221206040104   2d17h
    <yourBackupScheduleName>-20221207040137   41h
    <yourBackupScheduleName>-20221208040111   17h

数据保护

创建立即备份任务
创建定时备份计划
  1. 使用以下内容,在备份集群中创建applicationbackup.yaml文件。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationBackup
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"}}
      name: <yourApplicationBackupName>
      namespace: csdr
    spec:
      backupType: PvBackup #固定配置
      icludedNamespaces:
      - default
      pvBackup:
        # 指定数据卷
        pvcList:
        - name: essd-pvc-0 
          namespace: default 
        - name: essd-pvc-1
          namespace: default
        # 指定类型数据卷
        storageClassList:
        - disk-essd
        - disk-ssd
      storageLocation: <yourBackuplocationName>
      ttl: 720h0m0s

    参数

    是否必选

    说明

    csdr.alibabacloud.com/backuplocations

    备份所在的备份仓库信息,需与备份仓库的配置一致。

    name

    立即备份任务的名称。

    includedNamespaces

    指定命名空间名称。

    pvcList

    指定需要备份的存储卷对应的存储声明。其中name为存储声明名称。

    重要
    • pvcListstorageClassList同时指定时,storageClassList配置失效。

    • pvcListstorageClassList均未指定时,即备份指定命名空间下的所有存储卷。

    storageClassList

    指定需要备份的存储卷类型,即存储类名称。

    storageLocation

    备份仓库名称。

    说明

    若您的集群已使用Velero,请加入钉钉用户群(钉钉群号:35532895)咨询。

    ttl

    备份有效期,即备份任务的数据存储有效期,过期之后数据将无法恢复。格式如720h0m0s,取值范围:24h0m0s~1572864h0m0s。

  2. 在备份集群中执行以下命令,部署applicationbackup对象。

    kubectl apply -f applicationbackup.yaml
  3. 在备份集群中执行以下命令,查看立即备份任务的状态。

    kubectl describe applicationbackup <yourApplicationBackupName> -n csdr

    预期输出:

    ...
    Status:
      Completion Timestamp:  2025-03-25T08:20:24Z
      Expiration:            2025-04-24T08:18:03Z
      Message:               success
      Phase:                 Completed
  1. 使用以下内容,在备份集群中创建backupschedule.yaml文件。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: BackupSchedule
    metadata:
      annotations:
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"}
      name: <yourBackupScheduleName>
      namespace: csdr
    spec:
      schedule: 1 4 * * *
      template:
        backupType: PvBackup #固定
        icludedNamespaces:
        - default
        pvBackup:
          # 指定数据卷
          pvcList:
          - name: essd-pvc-0 
            namespace: default
          - name: essd-pvc-1
            namespace: default
          # 指定类型数据卷
          storageClassList:
          - disk-essd
          - disk-ssd
        storageLocation: <yourBackuplocationName>
        ttl: 720h0m0s

    参数

    是否必选

    说明

    csdr.alibabacloud.com/backuplocations

    备份所在的备份仓库信息,需与备份仓库的配置一致。

    name

    立即备份任务的名称。

    schedule

    备份任务执行的周期时间,请使用Cron表达式。填写规则请参见创建备份计划时,备份周期如何填写

    includedNamespaces

    指定命名空间名称。

    pvcList

    指定需要备份的存储卷对应的存储声明。其中name为存储声明名称。

    重要
    • pvcListstorageClassList同时指定时,storageClassList配置失效。

    • pvcListstorageClassList均未指定时,即备份指定命名空间下的所有存储卷。

    storageClassList

    指定需要备份的存储卷类型,即存储类名称。

    storageLocation

    备份仓库名称。

    说明

    若您的集群已使用Velero,请加入钉钉用户群(钉钉群号:35532895)咨询。

    ttl

    备份有效期,即备份任务的数据存储有效期,过期之后数据将无法恢复。格式如720h0m0s,取值范围:24h0m0s~1572864h0m0s。

  2. 在备份集群中执行以下命令,部署backupschedule对象。

    kubectl apply -f backupschedule.yaml
  3. 在备份集群中执行以下命令,查看定时备份计划的状态。

    kubectl describe backupschedule <yourBackupScheduleName> -n csdr

    预期输出:

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

步骤三:创建恢复任务

  1. 使用以下内容,在恢复集群中创建applicationrestore.yaml文件。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: ApplicationRestore
    metadata:
      annotations:    
        csdr.alibabacloud.com/backuplocations: >-
          {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"}
      name: <yourApplicationRestoreName>
      namespace: csdr
    spec:
      appRestoreOnly: false
      preserveNodePorts: true
      includedNamespaces:
        - default
      includedResources:
        - statefulset
      excludedResources:
        - secret
      convertedarg:
      - convertToStorageClassType: alicloud-disk-topology-alltype
        convertToAccessModes:
        - ReadWriteOnce
        namespace: nas
        persistentVolumeClaim: pvc-nas
      - convertToStorageClassType: alicloud-disk-topology-alltype
        namespace: oss
        persistentVolumeClaim: pvc-oss
      backupName: <yourApplicationBackupName>
      namespaceMapping:
        <backupNamespace>: <restoreNamespace>
      imageRegistryMapping:
        <oldImageRegistry>: <newImageRegistry>

    其余参数无需设置,保持默认配置即可。

    说明

    appRestoreOnly、preserveNodePorts、includedResources、excludedResources 这几个参数只支持应用备份,在数据保护场景配置不生效。

    参数

    是否必选

    说明

    参数

    是否必选

    说明

    csdr.alibabacloud.com/backuplocations

    备份所在的备份仓库信息,需与备份仓库的配置一致。

    name

    恢复任务的名称。

    appRestoreOnly

    该参数仅对应用备份类型的任务生效,数据保护类型任务下不生效。

    对于备份了存储卷的备份,是否仅恢复应用,不恢复存储声明、存储卷及其对应的数据,取值:

    • true:仅恢复应用。如果您需要更改备份应用的数据源,可以先手动创建存储声明、存储卷,然后再创建恢复任务并将该参数设置为true。

    • false:恢复应用以及相关的存储数据,默认为false。

    preserveNodePorts

    该参数仅对应用备份类型的任务生效,数据保护类型任务下不生效。

    是否保持应用的NodePort端口。当备份集群与恢复集群相同时,默认为false,将随机修改端口值,避免与已有的同类应用冲突。否则设置为true。

    includedNamespaces

    指定恢复的命名空间名称。设置为空时,表示恢复所有已备份的命名空间。

    includedResources

    该参数仅对应用备份类型的任务生效,数据保护类型任务下不生效。

    指定待恢复的集群资源类型。

    重要
    • 为避免非预期备份结果,includedResourcesexcludedResources您只需配置一项。均为空时,表示恢复所有已备份的资源类型。

    excludedResources

    该参数仅对应用备份类型的任务生效,数据保护类型任务下不生效。

    排除待恢复的集群资源类型。

    重要
    • 为避免非预期备份结果,includedResourcesexcludedResources您只需配置一项。均为空时,表示恢复所有已备份的资源类型。

    backupName

    待恢复的备份名称。使用定期备份功能时,需要指定为某个时间点创建的备份名称,例如<yourBackupScheduleName>-20221205225845

    namespaceMapping

    重定义命名空间。取值:

    • <backupNamespace>:创建备份任务时指定的备份集群命名空间。

    • <restoreNamespace>:根据备份创建的资源在恢复集群所在的命名空间。若不设置,则默认在同名命名空间中恢复。

    说明

    若<restoreNamespace>不存在,将创建新的命名空间。

    imageRegistryMapping

    重定义镜像仓库地址,作用范围为所有应用符合规则的镜像配置。取值:

    • <oldImageRegistry>:备份中应用的原镜像仓库地址。

    • <newImageRegistry>:恢复时的目标镜像仓库地址。若不设置,则不变更应用中的镜像的配置。

    示例:

    原集群应用使用的镜像为registry.cn-beijing.aliyuncs.com/my-registry/nginx:v1,需要调整至registry.cn-hangzhou.aliyuncs.com/my-registry/nginx:v1。在该字段配置:

      namespaceMapping:
        "registry.cn-beijing.aliyuncs.com/my-registry/": "registry.cn-beijing.aliyuncs.com/my-registry/"

    convertedarg

    存储类转换列表。备份中的FileSystem数据类型的存储卷(OSS、NAS、CPFS、本地存储等)的存储声明,在当前集群中恢复为目标存储类,实现例如NAS存储至云盘存储的转换。

    • convertToStorageClassType:目标存储类,需要在当前集群已存在。当前版本仅支持选择云盘或NAS类型的存储类。

    • namespace:存储声明所在的命名空间。

    • persistentVolumeClaim:存储声明名称。

    以上为存储类转换功能中的必选参数。

    存储类转换时,同时支持通过以下可选参数修改存储卷的AccessModes配置。

    • convertToAccessModes:目标AccessModes列表。

    说明

    AccessModesReadWriteManyReadOnlyMany的存储卷需要恢复至云盘存储类时,需要同时将AccessModes转换ReadWriteOnce,避免强制拔盘风险。

    您可以通过kubectl -ncsdr describe <backup-name>查询备份的存储声明信息,在输出的status.resourceList.dataResource.pvcBackupInfo列表中dataType字段为数据类型,分为FileSystem与Snapshot,nameSpace与pvcName分别为存储声明所在的命名空间与存储声明名称。

  2. 在恢复集群中执行以下命令,部署applicationrestore对象。

    kubectl apply -f applicationrestore.yaml
  3. 在恢复集群中执行以下命令,查看恢复任务的状态。

    kubectl describe applicationrestore <yourApplicationRestoreName> -n csdr

    预期输出:

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

    当恢复任务由Inprogress转为Completed状态,说明恢复任务创建成功。

步骤四:删除集群备份中心的相关资源

重要

由于您已创建的备份仓库可能正在被其他集群使用,所以备份中心不支持备份仓库BackupLocation资源的删除。

删除定时备份计划

执行以下命令,删除定时备份计划BackupSchedule资源,停止定时备份。

kubectl delete backupschedule <yourBackupSchedule> - ncsdr

删除备份任务或恢复任务

  1. 使用以下内容,在待删除任务的集群中创建deleterequest.yaml文件。

    apiVersion: csdr.alibabacloud.com/v1beta1
    kind: DeleteRequest
    metadata:
      name: <objectName-dbr>
      namespace: csdr
    spec:
      deleteObjectName: <objectName>
      deleteObjectType: "Backup"

    其余参数无需设置,保持默认配置即可。

    参数

    是否必选

    说明

    参数

    是否必选

    说明

    name

    删除请求的名称。

    • 删除备份任务时:待删除的备份任务ApplicationBackup的名称+“-dbr”。

    • 删除恢复任务时:待删除的恢复任务ApplicationRestore的名称+“-dbr”。

    deleteObjectName

    待删除的资源名称。

    deleteObjectType

    待删除的资源类型。取值:

    • "Backup":删除备份任务ApplicationBackup及配套资源。

    • "Restore":删除恢复任务ApplicationRestore及配套资源。

    说明
    • 删除备份任务不会影响已同步到集群中的副本。

    • 删除恢复任务不会影响已恢复的内容。

  2. 在待删除任务的集群中执行以下命令,部署deleterequest删除请求。

    kubectl apply -f deleterequest.yaml
  3. 使用以下命令,查看资源状态。

    • 查看删除的备份任务

      • 执行以下命令,查看删除备份任务的状态。

        kubectl get applicationbackup <yourApplicationBackupName> -n csdr

        预期输出:

        Error from server (NotFound): applicationbackups.csdr.alibabacloud.com "yourApplicationBackupName" not found

        由预期输出可看到,备份任务资源已被删除。

      • 执行以下命令,查看删除请求资源的状态。

        kubectl get deleterequest <yourApplicationBackupName-dbr> -n csdr

        预期输出:

        Error from server (NotFound): deleterequests.csdr.alibabacloud.com "yourApplicationBackupName-dbr" not found

        由预期输出可看到,除备份任务资源被删除外,删除请求的相关资源也自动被删除。

    • 查看删除的恢复任务

      • 执行以下命令,查看删除备份任务的状态。

        kubectl get applicationrestore <yourApplicationRestoreName> -n csdr

        预期输出:

        Error from server (NotFound): applicationrestores.csdr.alibabacloud.com "yourApplicationRestoreName" not found

        由预期输出可看到,恢复任务资源已被删除。

      • 执行以下命令,查看删除请求资源的状态。

        kubectl get deleterequest <yourApplicationRestoreName-dbr> -n csdr

        预期输出:

        Error from server (NotFound): deleterequests.csdr.alibabacloud.com "yourApplicationRestoreName-dbr" not found

        由预期输出可看到,除恢复任务资源被删除外,删除请求的相关资源也自动被删除。

相关文档

  • 本页导读 (1)
  • 前提条件
  • 使用场景
  • 注意事项
  • 步骤一:创建备份仓库
  • 步骤二:创建备份任务
  • 应用备份
  • 数据保护
  • 步骤三:创建恢复任务
  • 步骤四:删除集群备份中心的相关资源
  • 删除定时备份计划
  • 删除备份任务或恢复任务
  • 相关文档
文档反馈
phone 联系我们

立即和Alibaba Cloud在线服务人员进行交谈,获取您想了解的产品信息以及最新折扣。

alicare alicarealicarealicare