将其他云厂商的Kubernetes集群接入到ACK One注册集群后,您可以通过备份中心对原集群中部署的应用及数据进行备份,并在ACK集群中完成恢复,实现应用跨云的快速迁移。本文介绍如何使用备份中心将ACK One注册集群的应用迁移至ACK集群。
前提条件
- 已创建注册集群,并将其他云厂商Kubernetes集群(大于1.16版本)接入ACK One注册集群。具体操作,请参见创建注册集群。 
- 已创建和ACK One注册集群同地域的ACK集群(用于恢复应用),建议版本为1.18及以上。具体操作,请参见创建ACK托管集群和创建ACK专有集群(已停止新建)。 重要- 恢复集群必须使用CSI存储插件,使用Flexvolume存储插件或通过csi-compatible-controller组件同时使用CSI Flexvolume存储插件的集群不支持恢复。 
- 备份中心关注业务应用的备份和恢复。在恢复任务之前,您需要在恢复集群中预先安装并配置好所需的系统组件。例如: - ACR免密组件:您需要为恢复集群重新授权并配置acr-configuration。 
- ALB Ingress组件:您需要预先配置ALBConfig等。 
 
 
- ACK One注册集群和ACK集群均已开启集群备份。具体操作,请参见安装备份服务组件并配置权限。 
- 对已通过CEN、高速通道、专线、VPN等方式与云上VPC互通的ACK One注册集群,已配置指向OSS内网网段的路由。更多信息,请参见OSS内网域名与VIP网段对照表。 
- 已开通云备份(Cloud Backup)服务。具体操作,请参见云备份(Cloud Backup)。 
适用场景
云备份容灾:备份容灾迁移一体化,快速实现应用上云与数据灾备。详细介绍,请参见注册集群概述。
注意事项
- 备份本地存储时,需要通过PV和PVC的方式挂载本地卷。 
- 备份其他云厂商的对象存储、文件存储、块存储时,需要使用CSI插件通过PV和PVC的方式挂载相应存储卷。 
- ACK One注册集群、线上ACK集群和OSS Bucket需要在同一地域内。 
- 若需要保证应用数据的强一致性,在备份完成前需暂停业务数据的写入。 
准备工作
本文以MySQL应用为例,流程为在其他云厂商Kubernetes集群中部署应用后,通过接入ACK One注册集群,在ACK One注册集群中创建备份任务进行备份,然后在ACK集群中恢复该应用和数据。应用迁移前,请确认已完成如下条件。
- ACK One注册集群 - 已创建RAM用户并配置OSS与云备份权限,并使用RAM用户的AccessKey ID和AccessKey Secret在ACK One注册集群的csdr命名空间中创建alibaba-addon-secret的Secret资源。 - 执行以下命令,确认alibaba-addon-secret已存在。 - kubectl get secret alibaba-addon-secret -n csdr- 预期输出: - alibaba-addon-secret Opaque 2 5d22h
- ACK集群 - 若使用ACK托管集群,请确认已开通云备份服务,且已创建名为cnfs-oss-****的Bucket。 
- 若使用ACK专有集群,请确认已为Worker RAM角色配置OSS与云备份权限。具体操作,请参见ACK专有版集群权限配置。 
 
步骤一:在其他云厂商Kubernetes集群中部署应用
本文以一个部署在其他云厂商Kubernetes集群中的MySQL应用为例。该应用存储声明为mysql-pvc,存储卷为mysql-pv,对应的挂载点路径为/mnt。
- 执行以下命令,创建命名空间test1。 - kubectl create namespace test1
- 使用CSI插件部署通过PV和PVC的方式挂载存储的MySQL应用。具体操作,请参见对应云厂商的CSI存储文档。 - 若集群不支持CSI存储插件,可接入ACK One注册集群后使用阿里云CSI插件进行挂载。更多信息,请参见存储-CSI。 
- 执行以下命令,确认MySQL应用部署成功。 - kubectl -n test1 get pod| grep mysql-sts- 预期输出: - mysql-sts-0 1/1 Running 0 1m02s
- 执行以下命令,确认存储卷的配置。 - kubectl -n test1 get pv mysql-pv -oyaml- 预期输出: - csi: driver: **** volumeAttributes: xxxx: xxxx xxxx: xxxx volumeHandle: mysql-pv- 预期输出表明,存储卷包含CSI字段。 
- 执行以下命令,进入MySQL容器。 - kubectl -n test1 exec -it mysql-sts-0 -- /bin/bash
- 在MySQL容器中执行以下命令,模拟需要备份的数据。 - cd /mnt && touch test && ls- 预期输出: - test
步骤二:在ACK One注册集群中备份MySQL应用及数据
ACK One注册集群已接入其他云厂商的Kubernetes集群。您可以在ACK One注册集群中完成备份任务。步骤如下。
步骤三:在ACK集群中关联对应的备份仓库
若您使用的是新创建的备份仓库,或者此前在ACK恢复集群中从未关联过该备份仓库,需要先进行关联。
- 在应用备份页面,单击立即恢复页签。 
- 在弹出的立即恢复面板中,填写名称,选择备份仓库,单击备份仓库右侧的初始化仓库,以关联ACK恢复集群和备份中心。 - 每个备份仓库只需要关联一次,仓库初始化完成后,在ACK One注册集群中创建的备份任务将自动同步到当前ACK集群。 
- 初始化完成后,选择备份仓库中待恢复的任务,然后单击确定。 
- 在备份记录页签,等待mysql-backup任务出现在列表中。 
步骤四:在ACK集群中恢复MySQL应用及数据
在线上ACK集群中恢复应用时,将以动态挂载的形式为MySQL应用挂载指定存储类为alibabacloud-cnfs-nas的存储声明,并将数据恢复至关联的存储卷中。
- 创建恢复任务mysql-restore,并将MySQL应用部署在ACK集群的test2命名空间中。部分配置项设置如下。具体操作,请参见恢复应用和数据卷。 - 配置项 - 示例 - 名称 - mysql-restore。 - 备份仓库 - 选择备份仓库为您之前创建的备份仓库。 - 选择备份 - mysql-backup。 - 重定义命名空间 - 由test1变为test2。 - 存储类转换 - 在转换的PVC列表中为mysql-pvc选择存储类alibabacloud-cnfs-nas。 
- 单击立即恢复右侧的查看恢复记录,等待mysql-restore任务状态由InProgress变为Completed,表示应用及数据恢复完成。 
- 在ACK集群中执行以下命令,确认MySQL应用部署成功。 - kubectl -n test2 get pod | grep mysql-sts- 预期输出: - mysql-sts-0 1/1 Running 0 4s
- 在ACK集群中执行以下命令,确认数据已恢复正常。 - 确认数据已恢复为alibaba-cnfs-nas存储类。 - kubectl -n test2 get pvc | grep mysql-pvc- 预期输出: - mysql-pvc Bound nas-**** 25Gi RWO alibabacloud-cnfs-nas 3m24s
- 确认mysql-pvc已挂载到MySQL应用中。 - kubectl -n test2 describe pvc mysql-pvc | grep "Used By"- 预期输出: - Used By: mysql-sts-0
- 确认模拟的数据已成功恢复。执行以下命令,进入MySQL容器。 - kubectl -n test2 exec -it mysql-sts-0 -- /bin/bash
- 在MySQL容器中查询模拟的数据。 - cd /mnt && ls- 预期输出: - test- 预期输出表明,模拟的数据已成功恢复。