虚拟节点(Virtual Node)实现了Kubernetes与弹性容器实例ECI的无缝连接,让Kubernetes集群轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。您可以灵活动态地按需创建ECI Pod,免去集群容量规划的麻烦。本文主要介绍虚拟节点和ECI,通过ack-virtual-node组件如何部署虚拟节点及如何创建ECI Pod。
前提条件
- 仅适用于ACK托管版或ACK专有版集群,且版本≥1.16。关于创建集群的具体操作,请参见创建Kubernetes托管版集群或创建Kubernetes专有版集群。说明 若您的集群类型为ACK Pro版集群,请参考使用ECI弹性调度进行操作。
- 您需要开通弹性容器实例服务。登录弹性容器实例控制台开通相应的服务。
- 您需要确认集群所在区域在ECI支持的地域列表内。登录弹性容器实例控制台查看已经支持的地域和可用区。
虚拟节点和弹性容器实例ECI
阿里云弹性容器实例ECI(Elastic Container Instance)是面向容器的无服务器弹性计算服务,提供免运维、强隔离、快速启动的容器运行环境。使用ECI无需购买和管理底层ECS服务器,让您更加关注在容器应用而非底层基础设施的维护工作。您可按需创建ECI,仅为容器配置的资源付费(按量按秒计费)。
- 在线业务的波峰波谷弹性伸缩:如在线教育、电商等行业有着明显的波峰波谷计算特征。使用虚拟节点可以显著减少固定资源池的维护,降低计算成本。
- 数据计算:使用虚拟节点承载Spark、Presto等计算场景,有效降低计算成本。
- CI/CD Pipeline:Jenkins、Gitlab-Runner。
- Job任务:定时任务、AI。

步骤一:在ACK集群中部署ack-virtual-node组件
- 在ASK集群中您无需手动部署ack-virtual-node组件,Virtual Node Controller默认被托管,您可以直接创建ECI Pod。托管版或专有版则需要先部署ack-virtual-node组件后才可以创建ECI Pod。
- 在Kubernetes版(ACK)托管版集群中通过组件管理页面部署ack-virtual-node组件,Virtual Node Controller默认被托管。
- 在Kubernetes版(ACK)专有版集群中通过应用市场页面部署ack-virtual-node组件,Virtual Node Controller安装在集群节点上。
在ACK托管版集群中部署ack-virtual-node组件的操作步骤如下:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏,单击集群。
- 在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏,选择 。
- 在组件管理页面,选择ack-virtual-node组件,然后单击安装。这时会以集群默认虚拟交换机和安全组作为ack-virtual-node的初始ECI配置参数。如果需要修改ECI配置参数,请参见相关操作。
在ACK专有版集群中部署ack-virtual-node组件的操作步骤如下:
- 登录容器服务管理控制台。
- 在控制台左侧导航栏,选择 。
- 在应用市场页面单击应用目录页签,然后搜索并选中ack-virtual-node。
- 在ack-virtual-node页面,单击一键部署。
- 在创建面板中,选择集群和命名空间,然后单击下一步。命名空间已设定为kube-system,发布名称已设定为ack-virtual-node。
- 在参数配置页面,设置相应参数,配置虚拟节点参数,然后单击确定。
参数 描述 获取路径 ALIYUN_CLUSTERID 集群ID 您可以在集群基本信息的基本信息区域中,获取集群ID的值。 ALIYUN_RESOURCEGROUP_ID 资源组ID 如果不配置则为默认资源组。如果需要配置,请登录资源管理控制台,获取资源组ID的值。 ECI_REGION 地域ID 您可以在集群基本信息的基本信息区域中,获取地域的值。 说明 例如,华东1:cn-hangzhouECI_VSWITCH 虚拟交换机 您可以在节点列表单击某个节点,在实例详情页签的配置信息区域中,获取虚拟交换机的值。 说明请确认当前交换机在ECI支持的可用区列表中。
虚拟交换机支持多可用区。因此,这里可以填写多个vSwitch,例如
ECI_VSWITCH: "vsw-xxxxxxx1, vsw-xxxxxxx2, vsw-xxxxxxx3"
。ECI_SECURITY_GROUP 安全组ID 您可以在节点列表单击某个节点,在本实例安全组页签的安全组列表区域中,获取安全组ID的值。 ECI_ACCESS_KEY 用户AccessKey ID 请参见获取AccessKey。 请授权RAM的AliyunECIFullAccess策略。更多信息,请参见为RAM用户授权。
ECI_SECRET_KEY 用户AccessKey Secret 请参见获取AccessKey。 请授权RAM的AliyunECIFullAccess策略。更多信息,请参见为RAM用户授权。
- 查看virtual-node-controller部署状态。更多信息,请参见在CloudShell上通过kubectl管理Kubernetes集群。执行以下命令查看virtual-node-controller部署状态。
kubectl -n kube-system get deploy ack-virtual-node-controller
预期输出:
NAME READY AGE virtual-node-controller 1/1 1m
步骤二:创建ECI Pod
- 配置Pod标签。
给Pod添加标签
alibabacloud.com/eci=true
,Pod将以ECI方式运行,其节点是虚拟节点,示例如下:- 执行以下命令给Pod添加标签。
kubectl run nginx --image nginx -l alibabacloud.com/eci=true
- 执行以下命令查看Pod。
kubectl get pod -o wide|grep virtual-kubelet
预期输出:
nginx-7fc9f746b6-r4xgx 0/1 ContainerCreating 0 20s 192.168.XX.XX virtual-kubelet <none> <none>
- 执行以下命令给Pod添加标签。
- 配置命名空间标签。
给Pod所在的命名空间添加标签
alibabacloud.com/eci=true
,Pod将以ECI方式运行,其节点是虚拟节点,示例如下:- 执行以下命令创建命名空间。
kubectl create ns vk
- 执行以下命令给Pod所在的命名空间添加标签。
kubectl label namespace vk alibabacloud.com/eci=true
- 执行以下命令让命名空间中的Pod调度到虚拟节点上。
kubectl -n vk run nginx --image nginx
- 执行以下命令查看Pod。
kubectl -n vk get pod -o wide|grep virtual-kubelet
预期输出:
nginx-6f489b847d-vgj4d 1/1 Running 0 1m 192.168.XX.XX virtual-kubelet <none> <none>
- 执行以下命令创建命名空间。
相关操作
关于修改ACK虚拟节点配置的操作,请参见配置ECI Profile。
删除ACK虚拟节点- 卸载ack-virtual-node组件。
在ACK托管版集群中,删除所有ECI Pod后,在组件管理页面卸载ack-virtual-node组件即可。
在ACK专有版集群中,删除所有ECI Pod后,在Helm管理页面删除ack-virtual-node组件即可。
- 通过命令
kubectl delete node <node name>
删除相关虚拟节点。说明 当集群中存在ECI Pod时,卸载ack-virtual-node组件会导致ECI实例的残留。