虚拟节点概述
当您需要在短时间内快速创建大量Pod时,ECS节点扩容速度可能无法满足要求,而预留额外的ECS节点又会产生资源浪费。借助虚拟节点,您无需提前预留和维护固定资源池,可以直接将Pod调度到虚拟节点上以ECI实例来运行,在保障弹性的同时节约资源成本。
为什么使用虚拟节点
虚拟节点是什么
在ACK集群中,节点是运行工作负载的基本单位,提供实际的计算和存储资源。通常,您的ACK集群会有至少一组ECS节点池,创建Pod时,kubelet会将Pod调度到ECS节点上运行。这种架构能很好地应对流量稳定的业务。如果您的业务有不易提前预测的瞬时波峰,尽管ACK支持弹性伸缩,但ECS节点池扩容时,ECS实例的创建和启动本身会有一定的额外耗时。借助虚拟节点,您可以直接调度Pod到阿里云弹性容器实例ECI(Elastic Container Instance)上运行,降低节点运维操作负担,同时避免产生闲置节点资源,降低成本。
虚拟节点通过ack-virtual-node组件封装计算资源,无需管理底层基础设施即可直接部署工作负载,ack-virtual-node会自动将应用Pod调度到ECI上运行。ECI是Serverless容器运行服务,一个ECI实例相当于一个Pod。使用ECI部署容器应用时,您只需要提供打包好的容器镜像,即可运行容器,并仅为容器实际运行消耗的资源付费。
功能优势
虚拟节点有如下使用优势。
免运维:无需关心底层资源池的创建,减少运维负担。同时,虚拟节点为托管资源,省去Kubernetes节点的常规运维操作,例如系统升级、安全补丁修复等。
超大容量:最多可弹出50,000个Pod,无需提前规划容量。
重要在Pod大量关联Service的情况下,建议保持在20,000个以内。
秒级弹性:在极短时间内创建出数千Pod,无需担心突发业务流量因Pod创建时延受到影响。
安全隔离:Pod基于ECI创建,每个容器实例底层通过轻量级虚拟化安全沙箱技术完全强隔离,容器实例间互不影响。
节省成本:应用按需创建,按量计费,不运行不计费,省去资源闲置费用,同时Serverless带来更低的运维成本。
使用场景
基于虚拟节点本身的特性和优势,其典型使用场景如下所示。
在线业务
对于在线教育、电商等时常出现突发流量的在线业务,支持秒级扩容,避免流量激增扩容不及时可能导致的系统故障,以及平时大量闲置资源造成的浪费。
数据处理
处理Spark、Presto等大批量在线数据并发任务时,可以不再因为成本原因受限于底层资源, 从而导致数据处理任务的并发度受限。支持在短时间内快速弹出数千Pod,满足大数据的在线处理诉求。
AI任务
针对模型训练、模型推理等无需持续运行且需要大量计算资源的AI任务,无需预留资源,按需使用,按秒计费,降低AI推理成本。同时,支持秒级弹性,可以快速响应突发的任务需求。
CI/CD测试环境
针对CI/CD过程中的批量测试任务,例如CI打包、压力测试、仿真测试等,可以借助虚拟节点随时创建和释放容器实例。支持按需使用,按秒计费,实现低成本的大规模资源供应。
Job和CronJob
Job类任务无需持续运行,任务完成后,Job会自动终止,对应的Pod也会被删除。虚拟节点支持在任务完成后自动停止计费并释放计算资源,避免资源闲置浪费。
使用限制
请在使用虚拟节点前,了解其存在的使用限制。
不支持DaemonSet型工作负载。您可以通过将DaemonSet重新配置为Pod的Sidecar容器来运行。
不支持在Pod
manifest
中指定HostPath
和HostNetwork
。不支持Privileged特权容器。您可以使用Security Context为Pod添加Capability。
说明特权容器功能正在内测中。如需体验,请提交工单申请。
不支持NodePort类型的Service,不支持配置Session Affinity。
不支持深圳金融云,不支持政务云。
计费说明
虚拟节点本身不收费,在虚拟节点上运行的ECI Pod按照ECI计费规则进行计费。具体请参见ECI计费概述。
ECI Pod采用按量付费,从Pending状态开始计费,至Succeeded或Failed状态停止计费。更多信息,请参见ECI Pod生命周期。
如何使用虚拟节点
快速体验
您可以参见将Pod调度到ECI上运行快速体验虚拟节点的基础用法。
部署ack-virtual-node组件
在ACK集群中部署ack-virtual-node组件后,可以启用虚拟节点功能。
ACK托管集群
在ACK托管集群中,需要通过组件管理页面部署ack-virtual-node组件,该组件默认被托管,不占用Worker节点资源。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面的核心组件区域,找到ACK Virtual Node,然后单击安装,并按照页面提示完成操作。
安装时,使用集群默认虚拟交换机和安全组作为初始ECI配置参数。如需修改,可通过配置eci-profile更新。
ACK专有集群
在ACK专有集群中,需要通过应用市场页面部署ack-virtual-node组件,安装成功后会在kube-system
命名空间下创建一个名为ack-virtual-node-controller
的Deployment,该Deployment运行在Worker节点上。
登录容器服务管理控制台,在左侧导航栏选择 。
在应用市场页面单击应用目录页签,搜索并选中ack-virtual-node,然后在ack-virtual-node页面,单击一键部署。
在创建面板中,选择集群和命名空间,然后单击下一步。
命名空间已设置为kube-system,发布名称已设置为ack-virtual-node。
在参数配置页面,选择最新Chart 版本,在参数区域,配置虚拟节点参数,然后单击确定。
参数
可选属性
描述
获取路径
ALIYUN_CLUSTERID
Required
集群ID
在集群信息页面的基本信息页签获取集群ID。
ALIYUN_RESOURCEGROUP_ID
Optional
资源组ID
不配置时,默认使用默认资源组。如需配置,登录资源管理控制台,获取目标资源组ID。
ECI_REGION
Required
地域ID
在集群信息页面的基本信息页签获取地域信息。
说明关于地域名称与地域ID的关系,请参见地域和可用区列表。
ECI_VPC
Optional
专有网络VPC ID
在集群信息页面的基本信息页签获取集群VPC ID。
ECI_VSWITCH
Required
虚拟交换机ID
多个vSwitch ID组成的虚拟交换机列表,用于为业务Pod分配IP。多个vSwitch ID之间使用英文半角逗号(,)分隔,例如
vsw-xxx1, vsw-xxx2
。建议与节点池使用相同的虚拟交换机列表。可在节点池页面的节点池列表,单击某个节点池,在基本详情页签的节点配置区域,获取节点vSwitch ID。
说明请确认当前虚拟交换机在ECI支持的可用区列表中。
ECI_SECURITY_GROUP
Required
安全组ID
在集群信息页面的基本信息页签获取安全组ID。
ECI_ACCESS_KEY
Required
您的AccessKey ID
请参见获取AccessKey。
请授权RAM的AliyunECIFullAccess策略。更多信息,请参见为RAM用户授权。
ECI_SECRET_KEY
Required
您的AccessKey Secret
请参见获取AccessKey。
请授权RAM的AliyunECIFullAccess策略。更多信息,请参见为RAM用户授权。
KUBERNETES_APISERVER_HOST
Required
API Server的IP地址
API Server内网连接端点的IP和端口。可在集群信息页面的基本信息页签查询。
KUBERNETES_APISERVER_PORT
Required
API Server的端口
查看ack-virtual-node组件部署状态。
kubectl -n kube-system get deploy ack-virtual-node-controller
预期输出:
NAME READY UP-TO-DATE AVAILABLE AGE ack-virtual-node-controller 1/1 1 1 2m31s
将Pod调度到ECI上运行
ACK提供了多种调度方案,可以满足您在ECS和ECI混合部署场景下的各类调度需求。具体请参见调度Pod至虚拟节点。
ECI Pod默认的CPU架构为x86,操作系统为Linux。如需创建Arm架构的ECI Pod,或者Windows操作系统的ECI Pod,请参见调度至Arm虚拟节点或(邀测)调度Pod到Windows虚拟节点。
灵活配置ECI Pod
对于ECI某些功能特性,例如指定ECI Pod的规格、启用镜像缓存以加速Pod创建、为ECI Pod分配IPv6地址、增加临时存储空间大小等,可以通过Pod Annotation来实现。具体请参见ECI Pod Annotation。
通过eci-profile的ECI Effect能力,可以为满足条件的ECI Pod动态追加所需的Annotation,实现Pod的批量编排。
管理虚拟节点
升级ack-virtual-node组件
为了使用虚拟节点的一些高级特性,后续您可能需要升级ack-virtual-node组件。
升级耗时约1分钟。升级过程中无法新建Pod,但不影响存量Pod。
ACK托管集群
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面的核心组件区域,找到ACK Virtual Node,然后单击升级,并按照页面提示完成操作。
ACK专有集群
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Helm列表的操作列,单击ack-virtual-node对应的更新,在版本区域,选择最新的Chart版本。
在配置参数区域,更新参数,然后单击确定。
您也可以指定
virtualNode.image.tag
,升级镜像到指定版本。
修改虚拟节点配置
eci-profile中包含了ECI Pod所属的VPC和交换机、是否启用ARM虚拟节点等配置,您可以根据需要更新data
中的固定配置项。
删除虚拟节点
卸载ack-virtual-node组件后,虚拟节点会被自动删除,集群中的ECI Pod将被自动清理。
检查集群中的ECI Pod,确认Pod删除后不影响业务。
卸载ack-virtual-node组件。
ACK托管集群:在组件管理页面卸载ack-virtual-node组件。
ACK专有集群:在Helm管理页面删除ack-virtual-node组件。