如果您有存量的ACK专有集群,但同时希望享受ACK集群Pro版的功能和特性,例如控制面托管、控制面高可用等,您可以将ACK专有集群热迁移至ACK集群Pro版,不中断集群业务的正常运行。
前提条件
条件项 | 说明 |
集群 | 已有ACK专有集群(待迁移集群),且集群版本为1.18及以上。如需升级集群,请参见手动升级集群。 |
OSS Bucket | 已在待迁移集群的同一地域下创建一个OSS Bucket,且没有为该Bucket设置防盗链(防盗链可能导致迁移失败)。更多信息,请参见创建存储空间、防盗链。 |
注意事项
注意项 | 说明 |
公网访问 | 部分时间较早的ACK专有集群仍使用公网SLB访问API Server,此类集群迁移到ACK集群Pro版后无法继续通过公网SLB访问。请手动切换为EIP模式(将EIP绑定到API Server内网SLB),以支持公网访问API Server。关于手动切换EIP模式的具体操作,请参见控制集群API Server的公网访问能力。 |
Pod自定义配置 | ACK专有集群启用Pod自定义配置后,不能直接迁移至ACK集群Pro版。您需要在迁移前停止terway-controlplane,并在迁移后启用terway-controlplane。具体操作, 请参见ACK专有集群迁移时,停止terway-controlplane,关于如何自定义配置Pod,请参见为Pod配置固定IP及独立虚拟交换机、安全组。 |
Master节点 | 部分时间较早的集群的Master节点未默认安装云助手,需手动安装。具体操作,请参见安装云助手Agent。集群迁移完成后,Master节点将变为Not Ready 。 |
ECS实例释放 | 如您在删除迁移后的Master节点时勾选释放ECS实例,ACK仅会释放按量付费类型的ECS实例及其数据盘。若您的ECS实例为包年包月类型,需手动释放。具体操作,请参见释放实例。 |
步骤一:热迁移ACK专有集群至ACK集群Pro版
完成前提条件中的准备工作和相关注意事项后,您可以开始迁移。热迁移后的ACK集群Pro版无法回退至ACK专有集群。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面的操作列,单击待迁移集群对应的更多>迁移至Pro版。
在迁移至Pro版对话框,完成前置检查和RAM授权,选择为热迁移准备的OSS Bucket的名称,仔细阅读迁移注意事项,然后单击确定。
迁移完成后,迁移至Pro版对话框将提示迁移已完成。您可以观察集群类型和Master节点状态变更。
集群类型:返回集群列表页面,在集群类型列查看类型由ACK专有版自动变更为ACK Pro版。
Master节点状态:在集群列表页面的操作列,单击目标集群对应的详情,然后在左侧导航栏单击节点管理>节点。在节点列表的角色/状态列下,查看原有的Master节点状态变成未知,表明该Master节点已脱离集群,终止使用。您可以参见步骤二:移除ACK专有集群热迁移后的Master节点,移除集群热迁移后的Master节点。
步骤二:移除ACK专有集群热迁移后的Master节点
完成热迁移后,您可以通过控制台或kubectl命令手动将Master节点从ACK专有集群中移除。
通过控制台
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点页面的操作列,单击待移除Master节点对应的更多>移除,或选中多个Master节点后单击下方的批量移除,然后按照对话框指引选择配置,仔细阅读对话框的注意事项,并单击确定。
使用kubectl
执行命令前,请确保您可以使用kubectl命令连接集群。关于如何使用kubectl命令连接集群的具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,查看并记录待移除的Master节点名称。
kubectl get node | grep control-plane
执行以下命令移除目标Master节点,将
<MASTER_NAME>
替换为上一步记录的Master节点名称。kubectl delete node <MASTER_NAME>
如需批量删除多个Master节点,可将以下命令中的多个
<MASTER_NAME>
替换。例如,需要同时删除Master节点cn-hangzhou.192.xx.xx.65和cn-hangzhou.192.xx.xx.66时,示例代码如下。kubectl delete node cn-hangzhou.192.xx.xx.65 cn-hangzhou.192.xx.xx.66
步骤三:组件处理
重新安装ALB Ingress Controller组件
若ACK专有集群中安装了组件ALB Ingress Controller,您需要在迁移成功后重新安装该组件。关于如何安装ALB Ingress Controller组件,请参见管理组件。安装完成后需要通过kubectl删除原来的应用,删除具体操作可以通过执行以下命令完成。执行命令前,请确保您可以使用kubectl命令连接集群。详细信息,请参见获取集群KubeConfig并通过kubectl工具连接集群。
kubectl delete deployment alb-ingress-controller -n kube-system
迁移ack-virtual-node至托管版
若ACK专有集群中安装了ACK Virtual Node组件,为实现业务无缝迁移,您需要在集群迁移成功后,将ACK Virtual Node组件也迁移至托管版。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面,安装ACK Virtual Node组件。
ACK Virtual Node组件安装完成后,请依次执行以下命令,清除不再需要的旧组件和配置。
# 依次删除旧的vk-webhook服务、ack-virtual-node-controller部署、虚拟节点相关的ClusterRoleBinding、虚拟节点的服务账户。 kubectl -n kube-system delete service vk-webhook kubectl -n kube-system delete deployment ack-virtual-node-controller kubectl -n kube-system delete clusterrolebinding virtual-kubelet kubectl -n kube-system delete serviceaccount virtual-kubelet
迁移完成后,您可以通过创建新Pod测试集群是否正常运行。
后续步骤
在迁移至ACK集群Pro版后,需手动收敛集群节点的Worker Role权限,提升节点安全性。具体操作,请参见手动收敛ACK托管版集群的Worker RAM角色权限。
若ACK专有集群已安装共享GPU基础版,在迁移至ACK集群Pro版后,您需要将共享GPU基础版升级为共享GPU专业版。具体操作,请参见在ACK Pro版集群中将共享GPU基础版升级为共享GPU专业版。
常见问题
ACK专有集群迁移后支持回退吗?
集群迁移成功后不支持回退。若集群迁移失败,系统会自动回滚。
迁移过程中ACK专有集群的业务是否受影响?
集群迁移过程中会休眠ACK专有集群的管控组件,但不影响正在运行的业务。
迁移流程大概需要多长时间?
集群迁移主要包括控制面休眠、etcd数据备份以及托管侧组件启动三个阶段。整体流程预计耗时10~15分钟,其中API Server不可用时间预计持续5~10分钟。
集群迁移后,访问链路是否会变
迁移后,API Server SLB IP地址不会改变,通过KubeConfig访问集群时,集群地址不发生变化。
前置检查ACK Virtual Node环境变量配置失败处理
若在ACK专有集群中安装了ACK Virtual Node组件,需要在迁移前手动配置kube-apiserver内网端点。具体操作如下:
在集群信息页面,获取kube-apiserver内网端点信息。
在无状态页面的kube-system命名空间下,找到名为ack-virtual-node-controller的Deployment,然后为该Deployment的
spec.template.spec.containers[0].env
字段添加如下环境变量:
KUBERNETES_APISERVER_HOST
:表示kube-apiserver内网IP地址。KUBERNETES_APISERVER_PORT
:表示kube-apiserver内网端口,通常取值为6443。