通过注册集群实现跨账号ACK集群的备份与恢复

跨账号备份恢复场景下,您可通过注册集群接入,将备份集群接入到恢复集群账号下的注册集群,并配置相关的OSS等云产品权限,实现将跨账号的ACK集群间的备份恢复转化为同账号集群间的备份和恢复。

实现原理

image

注意事项

  • 备份集群、恢复集群与注册集群需处于同一地域,且备份集群为1.16或以上版本。考虑到apiVersion兼容问题,不建议您通过备份中心将高版本集群中的应用迁移至低版本的集群中。

  • 备份应用时,正在删除的资源不会被备份。

  • 如需恢复为容器网络文件系统管理的NAS类型(即恢复时转换为存储类列选择为alibabacloud-cnfs-nas),您需要先创建StorageClass。具体操作,请参见通过CNFS管理NAS文件系统(推荐)

  • 恢复应用时,资源将优先按照恢复集群版本推荐的apiVersion进行恢复。若某资源在两个版本中无同时支持的apiVersion版本,恢复时您需要手动部署。例如:

    • 1.16版本集群Deployment支持extensions/v1beta1apps/v1beta1apps/v1beta2以及apps/v1,恢复至1.28集群时将全部恢复至apps/v1

    • 1.16版本集群Ingress支持extensions/v1beta1networking.k8s.io/v1beta1,无法将其直接恢复至1.22及以上版本集群。

    更多集群版本API变更信息,请参见ACK版本发布说明Deprecated API Migration Guide

    重要

    在1.16版本集群中,appsrbac.authorization.k8s.io等groups已支持v1,升级至1.28版本集群时,您需要手动恢复Ingress、CronJob等资源。

  • 注册集群与普通ACK集群的备份中心安装模板不同,涉及到备份集群接入或移出注册集群的操作时,若需要继续使用备份中心功能,则需要在注册集群(集群接入)或备份集群(集群移出)中重新安装备份中心组件。

  • 在注册集群使用ECS快照功能做云盘备份时创建的快照属于备份账号,无法直接在恢复账号中恢复。对于云盘类型应用,您可以通过ECS提供的共享快照功能,手动完成恢复;或在备份前修改全局配置,通过云备份方案备份云盘数据。具体操作,请参见步骤四:在恢复集群中创建恢复任务

前提条件

  • 已开通云备份(Cloud Backup)服务。对NAS、OSS、本地盘类型存储卷进行备份时,以及在混合云场景中,备份中心需要使用云备份进行文件备份。具体操作,请参见云备份

  • 已创建恢复集群,为确保能正常使用ECS快照恢复云盘数据,建议恢复集群为v1.18及以上版本。具体操作,请参见创建ACK托管集群创建ACK专有集群创建注册集群并接入本地数据中心集群

    重要
    • 恢复集群必须使用CSI存储插件,使用Flexvolume存储插件或通过csi-compatible-controller组件同时使用CSI Flexvolume存储插件的集群不支持恢复。

    • 备份中心关注业务应用的备份和恢复。在恢复任务之前,您需要在恢复集群中预先安装并配置好所需的系统组件。例如:

      • ACR免密组件:您需要为恢复集群重新授权并配置acr-configuration。

      • ALB Ingress组件:您需要预先配置ALBConfig等。

  • 已安装备份服务组件并完成对应权限的配置。具体操作,请参见安装migrate-controller备份服务组件并配置权限

  • 如需使用云盘快照备份数据卷,需要安装v1.1.0或以上版本的CSI插件。关于如何安装CSI插件,请参见安装与升级CSI组件

  • 已通过kubectl工具连接集群

计费说明

备份中心功能本身不收费,使用备份中心时,可能用到以下相关服务,您需要支付相关的存储费用。

  • 对象存储OSS:OSS Bucket用于存储备份的集群资源(即相关YAML)。OSS相关计费请参见计费概述

  • 云盘快照:用于备份阿里云云盘存储卷数据。快照计费请参见快照计费

    说明
    • 自2023年10月12日11:00起,阿里云ECS云盘不再收取快照极速可用存储费和快照极速可用功能费,更多信息,请参见快照极速可用能力

    • 使用PL0、PL1、PL2、PL3级别的ESSD云盘或ESSD AutoPL云盘时,在备份时创建的快照默认开启快照极速可用功能。

  • 云备份:用于备份其他类型(除云盘外)的存储卷数据。云备份侧会创建容器备份库,收取备份存储容量费。更多信息,请参见价格详情

应用示例

本文以以下场景为例,为您介绍如何实现集群应用数据的备份和恢复操作。

备份集群中包含如下应用:

应用

挂载存储卷

应用特性

是否需要备份数据

sts-disk

  • 挂载了云盘存储卷的应用sts-disk

  • PVC名称为pvc-disk

对数据有强一致性需求,备份前会暂停写入。

是(云备份/ECS快照)

sts-nas

  • 挂载了NAS存储卷的应用sts-nas

  • PVC名称为pvc-nas

对数据无强一致性需求,接受备份期间写入的数据可能丢失。

没有跨账号VPC打通计划,恢复集群无法读取原NAS服务数据。

是(云备份)

sts-oss

  • 挂载了OSS存储卷的应用sts-oss

  • PVC名称为pvc-oss

海量数据,希望通过备份账号的AK授权继续使用原Bucket。

否(直接按原PVC/PV的YAML恢复,指向原OSS Bucket)

如何创建挂载不同类型存储卷的应用,请参见存储-CSI

(可选)步骤一:在备份集群中卸载备份中心

若您之前在备份集群中使用过备份中心相关功能,由于注册集群与普通ACK集群的备份中心安装模板不同,因此需要先在备份集群中卸载备份中心组件。若备份集群未安装备份中心组件,则无需执行该步骤。

  1. 使用备份账号登录容器服务管理控制台

  2. 在左侧导航栏选择集群,然后在集群列表中单击目标集群即备份集群的名称。

  3. 在左侧导航栏选择运维管理 > 组件管理,然后单击应用管理页签。

  4. 找到migrate-controller组件卡片,并单击右下角的卸载

  5. 在弹出的卸载组件对话框中单击确定,完成组件卸载。

步骤二:在注册集群中安装备份中心

  1. 使用恢复账号创建注册集群,并将备份集群接入注册集群中。

    具体操作,请参见创建注册集群

  2. 在注册集群中安装备份中心组件,并配置权限。

    具体操作,请参见安装migrate-controller备份服务组件并配置权限

    说明

    由于备份集群为同地域云上ACK集群,无需配置OSS内网网段路由。

步骤三:在注册集群中创建备份任务

重要

此操作步骤需要全部在恢复账号下的注册集群中进行,请勿切换至备份账号下的备份集群中操作。

与使用HBR云备份服务相比,使用ECS快照功能备份具有速度快、一致性强的优势。但是,在注册集群使用ECS快照功能做云盘备份时创建的快照属于备份账号,无法直接在恢复账号中恢复。

对于云盘类型应用sts-disk,有两种方式实现跨账号恢复:

备份方案

云备份方案

ECS快照方案

实现方式

在备份前,通过配置csdr下的configmap/csdr-config,改用云备份服务备份云盘内数据。

恢复时,通过配置存储类转换,重新恢复为云盘类型的存储卷。

使用默认的ECS快照功能备份云盘数据,通过ECS的共享快照功能,将创建的快照由备份账号共享给恢复账号。

通过备份中心恢复完成后,还需要手动修改集群中volumesnapshotcontent资源指向快照ID,保证云盘正常创建挂载。

优势

基本不需要额外的手动操作。

由ECS云盘快照保证单盘数据的一致性,备份恢复速度快。

不足

云备份服务备份恢复时长较长且不保证数据一致。若应用对数据一致性要求较高,暂停写入时间较长。

若涉及云盘数量较多,手动操作部分较为繁琐。

说明

若您的应用未使用云盘存储,请直接根据云备份方案进行备份。

云备份方案

如果您的应用使用了云盘存储,且希望使用云备份方案完成云盘备份。请参考如下操作进行数据备份。

  1. 确认ECS快照功能已关闭。

    1. 执行以下命令编辑csdr-config

      kubectl -ncsdr edit cm csdr-config 
    2. 确认enable_ecs_snapshot配置项为false,否则修改并保存退出。

    3. 若配置已修改,执行以下命令,重启工作组件使配置生效。

      kubectl -ncsdr delete pod -l control-plane=csdr-controller
  2. 若恢复账号下还未有备份的仓库,请创建备份仓库并关联恢复账号下以cnfs-oss-*格式命名的OSS Bucket。具体操作,请参见创建备份仓库

  3. 为sts-oss创建备份。具体操作,请参见创建备份计划或立即备份

    • 由于sts-oss应用需要使用原OSS bucket,即不需要备份OSS存储卷中的数据,因此需要为其单独创建备份,创建备份任务时,备份存储卷不勾选开启

    • 假设sts-oss应用运行在命名空间OSS中,备份仅选择包含命名空间OSS的应用。(若sts-oss应用与其他应用在同一命名空间,可通过指定标签选择备份)。

    • 应用备份备份记录页签,确认相关备份任务的状态由InProgress转为Completed。单击备份记录名称,确认sts-oss相关的资源,如StatefulSet、Pod、PVC、PV及存放AK信息的Secret均已备份。

  4. 为sts-nas、sts-disk应用创建备份具体操作,请参见创建备份计划或立即备份

    • 创建备份任务时,备份存储卷勾选开启

    • 由于enable_ecs_snapshot已设为false,云盘存储卷的数据备份同样通过云备份实现。您可以在云备份控制台左侧导航栏单击容器备份,在备份任务页签中找到每个存储声明的备份进展及结果。

ECS快照方案

如果您的应用使用了云盘存储,且希望使用ECS快照方案完成云盘备份。请参考如下操作进行数据备份。

  1. 确认ECS快照功能已开启。

    1. 执行以下命令编辑csdr-config

      kubectl -ncsdr edit cm csdr-config 
    2. 确认enable_ecs_snapshot配置项为true,否则修改并保存退出。

    3. 若配置已修改,执行以下命令,重启工作组件使配置生效。

      kubectl -ncsdr delete pod -l control-plane=csdr-controller
  2. 若恢复账号下还未有备份的仓库,请创建备份仓库并关联恢复账号下以cnfs-oss-*格式命名的OSS Bucket。具体操作,请参见创建备份仓库

  3. 为sts-oss创建备份。具体操作,请参见创建备份计划或立即备份

    • 由于sts-oss应用需要使用原OSS bucket,即不需要备份OSS存储卷中的数据,因此需要为其单独创建备份,创建备份任务时,备份存储卷不勾选开启

    • 假设sts-oss应用运行在命名空间OSS中,备份仅选择包含命名空间OSS的应用。(若sts-oss应用与其他应用在同一命名空间,可通过指定标签选择备份)。

    • 应用备份备份记录页签,确认相关备份任务的状态由InProgress转为Completed。单击备份记录名称,确认sts-oss相关的资源,如StatefulSet、Pod、PVC、PV及存放AK信息的Secret均已备份。

  4. 为sts-nas、sts-disk应用创建备份backup-nas-disk。具体操作,请参见创建备份计划或立即备份

    • 创建备份任务时,备份存储卷勾选开启

    • 云盘存储卷的数据备份默认通过ECS快照实现,您可以在ECS控制台左侧导航栏单击快照,在云盘快照页签中找到每块云盘对应的快照。

    • NAS存储卷的数据备份默认通过云备份实现,您可以在云备份控制台左侧导航栏单击容器备份,在备份任务页签中找到每个存储声明的备份进展及结果。

步骤四:在恢复集群中创建恢复任务

重要
  • 在创建恢复任务之前,您需要在恢复集群中预先安装并配置好所需的系统组件。例如:

    • ACR免密组件:您需要为恢复集群重新授权并配置acr-configuration。

    • ALB Ingress组件:您需要预先配置ALBConfig等。

  • 若恢复集群中已存在同名的资源,则恢复任务将跳过该资源。

说明
  • 若您的应用未使用云盘存储,请直接根据云备份方案进行恢复。

  • Service资源恢复时,根据Service类型的不同将进行如下适配:

    • NodePort类型的Service:跨集群恢复时,默认保留端口号。

    • LoadBalancer类型的Service:ExternalTrafficPolicy为Local时,HealthCheckNodePort默认使用随机端口号。若您需要保留端口号,请在创建恢复任务时,设置spec.preserveNodePorts: true

    • 在备份集群中由指定已有SLB的Service,恢复时将使用原有的SLB并默认关闭强制监听,您需要前往SLB控制台配置监听。

    • 在备份集群中由CCM管理SLB的Service,恢复时将由CCM创建新的SLB实例,更多信息,请参见Service的负载均衡配置注意事项

云备份方案

您需要使用恢复账号,在恢复集群下执行以下操作。

  1. 创建恢复任务,恢复sts-oss应用。具体操作,请参见恢复应用和数据卷

    1. 应用备份页面单击立即恢复,选择备份仓库并初始化,等待备份同步至恢复集群。

    2. 选择备份backup-oss创建恢复任务。

    3. 在恢复集群中确认sts-oss是否正常恢复。可通过kubectl exec命令进入容器中检查数据是否一致。

  2. 创建恢复任务,恢复sts-nas、sts-disk应用,并通过存储类转换恢复数据的存储类型。具体操作,请参见恢复应用和数据卷

    1. 应用备份页面单击立即恢复,选择备份backup-nas-disk。并为pvc-disk选择存储类alicloud-disk、为pvc-nas选择存储类alibabacloud-cnfs-nas。

      其中alicloud-disk默认指代CSI提供的alicloud-disk-topology-alltype存储类。您也可以在集群中创建自定义的存储类用于转换。

    2. 在恢复集群中确认应用、数据是否正常。您可以在ECS控制台确认是否在恢复账号中创建了新云盘并挂载至对应的节点上。

ECS快照方案

  1. 使用恢复账号,在恢复集群下创建恢复任务,恢复sts-oss应用。具体操作,请参见恢复应用和数据卷

    1. 应用备份页面单击立即恢复,选择备份仓库并初始化,等待备份同步至恢复集群。

    2. 选择备份backup-oss创建恢复任务。

    3. 在恢复集群中确认sts-oss是否正常恢复。可通过kubectl exec命令进入容器中检查数据是否一致。

  2. 切换至备份账号,在ECS控制台将快照共享给恢复账号。具体操作,请参见将快照共享给其他阿里云账号

    由备份中心创建的快照均以“snapshot-”开头,您可通过备份记录的创建时间快速确认目标快照。

  3. 切换至恢复账号,在资源共享控制台接收共享的快照。具体操作,请参见将快照共享给其他阿里云账号

    快照共享至恢复账号后,快照名称不变,但快照ID已变更。您可通过快照名称得到快照ID的映射关系。

  4. 在恢复集群中创建恢复任务,恢复sts-nas 、sts-disk应用。具体操作,请参见恢复应用和数据卷

    1. 应用备份页面单击立即恢复,选择备份backup-nas-disk。在不选择存储类转换的情况下,将默认使用原存储类进行恢复,恢复前请确认存储类存在。

    2. 在恢复集群中查看pvc-disk状态,发现处于Pending状态,这是由于快照ID已发生变更,原快照ID不可用导致的,需要手动修改快照ID指向。相关event内容如下:

        Warning  ProvisioningFailed     2m27s (x9 over 4m35s)  diskplugin.csi.alibabacloud.com_csi-provisioner-7ff546495c-glmj7_e333fc6a-8bd6-4192-92ee-a48155e711b9  failed to provision volume with StorageClass "alicloud-disk-topology-alltype": error getting handle for DataSource Type VolumeSnapshot by Name pvc-disk-0-volumesnapshot2024010817xxxx: snapshot pvc-disk-0-volumesnapshot2024010817xxxx is not Ready

      其中,pvc-disk-0-volumesnapshot2024010817xxxx为集群内volumesnapshot资源名称。

      1. 执行以下命令确认集群内volumesnapshot资源的snapshotcontent。

        说明

        命令中的volumesnapshot资源名称即pvc-disk-0-volumesnapshot2024010817xxxx需要替换为您实际在event中查看到的资源名称。

        kubectl -n<disk-ns> get volumesnapshot pvc-disk-0-volumesnapshot2024010817xxxx

        预期输出如下:可以看到返回的SOURCESNAPSHOTCONTENT的值即为volumesnapshot资源的snapshotcontent。

        NAME                                      READYTOUSE   SOURCEPVC   SOURCESNAPSHOTCONTENT                                             RESTORESIZE   SNAPSHOTCLASS   SNAPSHOTCONTENT                                                   CREATIONTIME   AGE
        pvc-disk-0-volumesnapshot2024010817xxxx   true                     snapcontent-7c9ef8fa-e83c-4900-8df8-40268662d10e-2024010820xxxx   20Gi                          snapcontent-7c9ef8fa-e83c-4900-8df8-40268662d10e-2024010820xxxx   51m            44m
      2. 执行以下命令,修改volumesnapshotcontent执行的snapshothandle为共享至恢复账号下的ECS快照ID,修改后保存并退出。

        说明

        命令中volumesnapshotconent的值需要替换为您在上一步骤中实际获取的返回值。

        kubectl edit volumesnapshotconent snapcontent-7c9ef8fa-e83c-4900-8df8-40268662d10e-2024010820xxxx
    3. 为每个恢复后处于Pending状态的云盘pvc修改对应的volumesnapshotcontent,并等待pvc的状态由Pending转化为Bound

    4. 在恢复集群中确认应用、数据是否正常。您可在ECS控制台确认是否在恢复账号中创建了新云盘并挂载至对应的节点上。

(可选)步骤五:将备份集群移出注册集群,重新部署组件

  • 若您不需要再进行跨账号备份和恢复,您可以将备份集群从注册集群中移除。

  • 若您需要在备份账号下的备份集群中继续使用备份中心,请卸载组件后重新安装。

相关文档