其他云厂商Kubernetes集群应用迁移至ACK集群

将其他云厂商的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

  1. 执行以下命令,创建命名空间test1

    kubectl create namespace test1
  2. 使用CSI插件部署通过PV和PVC的方式挂载存储的MySQL应用。具体操作,请参见对应云厂商的CSI存储文档。若集群不支持CSI存储插件,可接入注册集群后使用阿里云CSI插件进行挂载。更多信息,请参见存储-CSI

  3. 执行以下命令,确认MySQL应用部署成功。

    kubectl -n test1 get pod| grep mysql-sts

    预期输出:

    mysql-sts-0   1/1     Running   0         1m02s
  4. 执行以下命令,确认存储卷的配置。

    kubectl -n test1 get pv mysql-pv -oyaml 

    预期输出:

      csi:
        driver: ****
        volumeAttributes:
          xxxx: xxxx
          xxxx: xxxx
        volumeHandle: mysql-pv

    预期输出表明,存储卷包含CSI字段。

  5. 执行以下命令,进入MySQL容器。

    kubectl -n test1 exec -it mysql-sts-0 -- /bin/bash
  6. 在MySQL容器中执行以下命令,模拟需要备份的数据。

    cd /mnt && touch test && ls

    预期输出:

    test

步骤二:在注册集群中备份MySQL应用及数据

由于注册集群已接入其他云厂商Kubernetes集群,您可以在注册集群中进行备份任务操作,具体步骤如下:

  1. (可选)若账号下无可使用的备份仓库,请创建备份仓库。具体操作,请参见创建备份仓库

  2. 在注册集群中立即备份mysql-backup,部分配置项设置如下。具体操作,请参见创建备份任务

    配置项

    示例

    名称

    mysql-backup。

    备份仓库

    为您上一步创建的备份仓库。

    备份命名空间

    test1。

    备份数据卷

    选中备份存储卷,默认为您进行数据备份。

  3. 应用备份页面,单击备份记录页签,查看mysql-backup任务状态由InProgress变为Completed,表示应用及数据备份完成。

步骤三:在ACK集群中关联对应的备份仓库

若您使用的是新创建的备份仓库,或者此前在ACK恢复集群中从未关联过该备份仓库,需要先进行关联。

  1. 应用备份页面,单击立即恢复页签。

  2. 在弹出的立即恢复面板中,填写名称,选择备份仓库,单击备份仓库右侧的初始化仓库,将ACK恢复集群和指定的备份中心进行关联。

    每个备份仓库只需要关联一次,仓库初始化完成后,在注册集群中创建的备份任务将自动同步到当前ACK集群。

  3. 初始化完成后,选择备份仓库中待恢复的任务,然后单击确定

  4. 备份记录页签,等待mysql-backup备份任务出现在列表中。

步骤四:在ACK集群中恢复MySQL应用及数据

本文以将应用的存储转换为alibabacloud-cnfs-nas存储类为例,说明如何在线上ACK集群中恢复应用。

应用恢复过程将以动态挂载的形式为MySQL应用挂载指定存储类为alibabacloud-cnfs-nas的存储声明,并将数据恢复至关联的存储卷中,具体步骤如下。

  1. 创建恢复任务mysql-restore,并将MySQL应用部署在ACK集群的test2命名空间中。部分配置项设置如下。具体操作,请参见恢复应用和数据卷

    配置项

    示例

    名称

    mysql-restore。

    备份仓库

    选择备份仓库为您之前创建的备份仓库。

    选择备份

    mysql-backup。

    重定义命名空间

    test1变为test2

    存储类转换

    在转换的PVC列表中为mysql-pvc选择存储类alibabacloud-cnfs-nas。

  2. 单击立即恢复右侧的查看恢复记录,查看mysql-restore任务状态由InProgress变为Completed,表示应用及数据恢复完成。

  3. 在ACK集群中执行以下命令,确认MySQL应用部署成功。

    kubectl -n test2 get pod | grep mysql-sts

    预期输出:

    mysql-sts-0   1/1     Running   0          4s
  4. 在ACK集群中执行以下命令,确认数据已恢复正常。

    1. 执行以下命令,确认数据已恢复为alibaba-cnfs-nas存储类。

      kubectl -n test2 get pvc | grep mysql-pvc

      预期输出:

      mysql-pvc   Bound    nas-****   25Gi       RWO            alibabacloud-cnfs-nas   3m24s
    2. 执行以下命令,确认mysql-pvc已挂载到MySQL应用中。

      kubectl -n test2 describe pvc mysql-pvc | grep "Used By"

      预期输出:

      Used By:       mysql-sts-0
    3. 确认模拟的数据已成功恢复。执行以下命令,进入MySQL容器。

      kubectl -n test2 exec -it mysql-sts-0 -- /bin/bash
    4. 执行以下命令,在MySQL容器中查询模拟的数据。

      cd /mnt && ls

      预期输出:

      test

      预期输出表明,模拟的数据已成功恢复。