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