将其他云厂商的Kubernetes集群接入到ACK注册集群后,您可以通过备份中心对原集群中部署的应用及数据进行备份,并在ACK集群中完成恢复,实现应用跨云的快速迁移。本文介绍如何使用备份中心将ACK注册集群的应用迁移至ACK集群。
前提条件
已创建注册集群,并将其他云厂商Kubernetes集群(大于1.16版本)接入ACK注册集群。具体操作,请参见创建注册集群。
已创建和ACK注册集群同地域的ACK集群(用于恢复应用),建议版本为1.18及以上。具体操作,请参见创建ACK托管集群和创建ACK专有集群。
重要恢复集群必须使用CSI存储插件,使用Flexvolume存储插件或通过csi-compatible-controller组件同时使用CSI Flexvolume存储插件的集群不支持恢复。
备份中心关注业务应用的备份和恢复。在恢复任务之前,您需要在恢复集群中预先安装并配置好所需的系统组件。例如:
ACR免密组件:您需要为恢复集群重新授权并配置acr-configuration。
ALB Ingress组件:您需要预先配置ALBConfig等。
ACK注册集群和ACK集群均已开启集群备份。具体操作,请参见安装备份服务组件并配置权限。
对已通过CEN、高速通道、专线、VPN等方式与云上VPC互通的ACK注册集群,已配置指向OSS内网网段的路由。更多信息,请参见OSS内网域名与VIP网段对照表。
已开通云备份(Cloud Backup)服务。具体操作,请参见云备份(Cloud Backup)。
适用场景
云备份容灾:备份容灾迁移一体化,快速实现应用上云与数据灾备。详细介绍,请参见注册集群概述。
注意事项
备份本地存储时,需要通过PV和PVC的方式挂载本地卷。
备份其他云厂商的对象存储、文件存储、块存储时,需要使用CSI插件通过PV和PVC的方式挂载相应存储卷。
ACK注册集群、线上ACK集群和OSS Bucket需要在同一地域内。
若需要保证应用数据的强一致性,在备份完成前需暂停业务数据的写入。
准备工作
本文以MySQL应用为例,流程为在其他云厂商Kubernetes集群中部署应用后,通过接入ACK注册集群,在ACK注册集群中创建备份任务进行备份,然后在ACK集群中恢复该应用和数据。应用迁移前,请确认已完成如下条件。
ACK注册集群
已创建RAM用户并配置OSS与云备份权限,并使用RAM用户的AccessKey ID和AccessKey Secret在ACK注册集群的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注册集群后使用阿里云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注册集群中备份MySQL应用及数据
ACK注册集群已接入其他云厂商的Kubernetes集群。您可以在ACK注册集群中完成备份任务。步骤如下。
步骤三:在ACK集群中关联对应的备份仓库
若您使用的是新创建的备份仓库,或者此前在ACK恢复集群中从未关联过该备份仓库,需要先进行关联。
在应用备份页面,单击立即恢复页签。
在弹出的立即恢复面板中,填写名称,选择备份仓库,单击备份仓库右侧的初始化仓库,以关联ACK恢复集群和备份中心。
每个备份仓库只需要关联一次,仓库初始化完成后,在ACK注册集群中创建的备份任务将自动同步到当前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
预期输出表明,模拟的数据已成功恢复。