更新时间:2024-05-31 GMT+08:00

自建K8s集群迁移方案概述

操作场景

随着容器化技术的发展,越来越多的企业使用容器代替了虚拟机完成应用的运行部署,而Kubernetes的发展让容器化的部署变得简单并且高效。目前许多企业选择自建Kubernetes集群,但是自建集群往往有着沉重的运维负担,需要运维人员自己配置管理系统和监控解决方案,伴随而来的就是企业人力成本的上升和效率的降低。

在性能方面,自建集群的规模固定,可扩展性又比较弱,在业务流量高峰期无法实现自适应的弹性扩缩容,很容易出现集群资源不足或浪费等现象。而且自建集群往往没有考虑容灾风险,导致可靠性较差,一旦出现故障将会使整个集群无法使用,可能会形成十分严重的生产事件。

面对以上的种种不足,CCE提供了简单的集群管理能力和灵活的弹性放缩能力,深度集成应用服务网格和Helm标准模板,能够有效帮助企业简化集群运维管理方式,降低运营成本,以简单易用、高性能、安全可靠、开放兼容等诸多优点,获取了大量企业用户的青睐。因此很多企业选择将自建集群全量搬迁至CCE进行管理,本文主要介绍集群迁移上云的方案和步骤。

上云须知

与自建K8s集群相比,CCE集群具有多种优势,您可参考云容器引擎与自建Kubernetes集群对比进行额外的了解。在CCE集群的使用过程中也存在着部分限制,请参见约束与限制,务必在使用前做好评估。

迁移方案

本文介绍一种集群迁移方案,适合如下几类集群:

  • 本地IDC自建的K8s集群
  • 通过多台ECS自建的集群
  • 其他云服务商提供的集群服务
  • 停止维护,无法原地升级的需要迁移的CCE集群
在迁移前,需对原集群的所有资源进行分析再决定迁移方案,可迁移的资源包括集群内资源和集群外资源,如下表所示。
表1 可迁移资源列表

资源类别

可迁移对象

备注

集群内资源

集群中的所有对象,Pod、Job、Service、Deployment、ConfigMap等。

不建议迁移的资源:命名空间velero和kube-system下的资源。

  • velero:该命名空间下的资源为迁移工具创建,无需迁移。
  • kube-system:该命名空间下的资源为系统资源。如原集群该命名空间下包含用户自行创建的资源,建议按需迁移。
注意:

如果您是迁移或备份CCE中集群的资源,比如从一个Namespace到另外一个Namespace,请不要备份名称为paas.elb的Secret。因为paas.elb的内容是会定期更新,备份后再恢复时可能已经失效,会影响网络存储相关功能。

挂载到容器的持久化存储。

由于Restic工具限制,不支持进行HostPath类型存储迁移,解决方法请参考无法备份HostPath类型存储卷

集群外资源

自建镜像仓库。

可迁移至容器镜像服务SWR。

非容器化的数据库。

可迁移至云数据库服务RDS。

对象存储等非本地存储。

可迁移至对象存储服务OBS等云存储服务。

迁移流程如图1所示,对于集群外资源您可根据实际需求进行选择性迁移。

图1 迁移方案示意图

迁移步骤

集群迁移大致包含如下6个步骤:

  1. 目标集群资源规划。

    请详细了解CCE集群与自建集群间的差异,参考目标集群资源规划中的关键性能参数,按需进行资源规划,建议尽量保持迁移后集群与原集群中性能配置相对一致。

  2. 集群外资源迁移。

    若您需对集群外的相关资源进行迁移,可使用对应的迁移解决方案,具体请参见集群外资源迁移

  3. 迁移工具安装。

    完成集群外资源迁移后,可通过迁移工具在原集群和目标集群内分别进行应用配置的备份和还原,工具的安装步骤请参考迁移工具安装

  4. 集群内资源迁移。

    使用Velero将原集群内资源备份至对象存储中,并在目标集群中进行恢复,详细步骤可参考集群内资源迁移(Velero)

    • 原集群应用备份

      当用户执行备份时,首先通过Velero工具在原集群中创建Backup对象,并查询集群相关的数据和资源进行备份,并将数据打包上传至S3协议兼容的对象存储中,各类集群资源将以JSON格式文件进行存储。

    • 目标集群应用恢复

      在目标集群中进行还原时,Velero将指定之前存储备份数据的临时对象桶,并把备份的数据下载至新集群,再根据JSON文件对资源进行重新部署。

  5. 资源更新适配。

    迁移后的集群资源可能存在无法部署的问题,需要对出现错误的资源进行更新适配,可能发生的适配问题主要包括如下几类:

  6. 其余工作

    集群资源正常部署后,需对迁移后应用内的功能进行验证,并将业务流量切换至新集群。最后确定所有服务正常运行后,可将原集群下线。