虚拟节点概述

更新时间: 2025-04-15 15:34:29

当您需要在短时间内快速创建大量Pod时,ECS节点扩容速度可能无法满足要求,而预留额外的ECS节点又会产生资源浪费。借助虚拟节点,您无需提前预留和维护固定资源池,可以直接将Pod调度到虚拟节点上以ECI实例来运行,在保障弹性的同时节约资源成本。

为什么使用虚拟节点

虚拟节点是什么

在ACK集群中,节点是运行工作负载的基本单位,提供实际的计算和存储资源。通常,您的ACK集群会有至少一组ECS节点池,创建Pod时,kubelet会将Pod调度到ECS节点上运行。这种架构能很好地应对流量稳定的业务。如果您的业务有不易提前预测的瞬时波峰,尽管ACK支持弹性伸缩,但ECS节点池扩容时,ECS实例的创建和启动本身会有一定的额外耗时。借助虚拟节点,您可以直接调度Pod到阿里云弹性容器实例ECI(Elastic Container Instance)上运行,降低节点运维操作负担,同时避免产生闲置节点资源,降低成本。

image

虚拟节点通过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中指定HostPathHostNetwork

  • 不支持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节点资源。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 组件管理页面的核心组件区域,找到ACK Virtual Node,然后单击安装,并按照页面提示完成操作。

    安装时,使用集群默认虚拟交换机和安全组作为初始ECI配置参数。如需修改,可通过配置eci-profile更新。

ACK专有集群

ACK专有集群中,需要通过应用市场页面部署ack-virtual-node组件,安装成功后会在kube-system命名空间下创建一个名为ack-virtual-node-controller的Deployment,该Deployment运行在Worker节点上。

  1. 登录容器服务管理控制台,在左侧导航栏选择市场 > 应用市场

  2. 应用市场页面单击应用目录页签,搜索并选中ack-virtual-node,然后在ack-virtual-node页面,单击一键部署

  3. 创建面板中,选择集群和命名空间,然后单击下一步

    命名空间已设置为kube-system,发布名称已设置为ack-virtual-node。

  4. 参数配置页面,选择最新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的端口

  5. 查看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托管集群

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 组件管理页面的核心组件区域,找到ACK Virtual Node,然后单击升级,并按照页面提示完成操作。

ACK专有集群

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. 在Helm列表的操作列,单击ack-virtual-node对应的更新,在版本区域,选择最新的Chart版本。

  4. 在配置参数区域,更新参数,然后单击确定

    您也可以指定virtualNode.image.tag,升级镜像到指定版本。

修改虚拟节点配置

eci-profile中包含了ECI Pod所属的VPC和交换机、是否启用ARM虚拟节点等配置,您可以根据需要更新data中的固定配置项。

删除虚拟节点

卸载ack-virtual-node组件后,虚拟节点会被自动删除,集群中的ECI Pod将被自动清理。

  1. 检查集群中的ECI Pod,确认Pod删除后不影响业务。

  2. 卸载ack-virtual-node组件。

    • ACK托管集群:在组件管理页面卸载ack-virtual-node组件。

    • ACK专有集群:在Helm管理页面删除ack-virtual-node组件。

常见问题

上一篇: 灵骏节点池 下一篇: 将Pod调度到ECI上运行
阿里云首页 容器服务Kubernetes版 相关技术圈