弹性容器实例是阿里云的云服务器产品,使用弹性容器实例之后,用户无需管理底层 ECS 服务器,只需要提供打包好的镜像,即可运行容器,与阿里云容器服务无缝对接并仅为容器实际运行消耗的资源付费。本文介绍了阿里云弹性容器实例的、功能特性、产品优势及应用场景。
一、什么是弹性容器实例
1.产品概述
弹性容器实例(简称ECI)是阿里云结合容器和Serverless技术为您提供的容器运行服务。通过使用ECI,在阿里云上部署容器时,您无需购买和管理云服务器ECS,只需提供打包好的Docker镜像,即可在阿里云上运行容器。
从购买配置ECS再部署容器(ECS模式)到直接部署容器(ECI模式),ECI为您省去了底层服务器的运维和管理工作,让您专注于业务开发,提升开发效率。同时,您仅需要为容器实际运行消耗的资源付费,可以节约使用成本。
使用ECI时,您既可以借助OpenAPI将ECI接入到您已有的业务系统中,通过OpenAPI和控制台直接快速部署容器应用;也可以通过Virtual Kubelet对接Kubernetes集群,借助ECI的弹性能力轻松应对突发业务流量。
如上图所示,ECI与您业务系统的对接方式包括:
通过阿里云ACK Serverless集群部署业务,支持基于Kubernetes的容器服务全托管,提供无需运维的Kubernetes集群能力,底层Pod资源全部使用ECI承载。
通过阿里云ACK集群部署业务,为您的ACK集群提供额外的海量弹性能力。
通过Virtual Kubelet对接您在ECS上或者线下IDC自建的Kubernetes集群,提供方便快捷的计算资源。
通过OpenAPI对接您的业务系统,您可以根据需要,低成本地随时创建或释放ECI容器,无需担心并发和容量。
2.产品架构
ECI底层使用基于阿里云CIPU的自研安全沙箱容器,提供虚拟机级别的安全和资源隔离能力,同时针对容器运行环境进行深度优化,提供比虚拟机更快的启动速度和运行效率。其架构如下图所示。
ECI支持无缝集成Kubernetes,可以为Kubernetes提供一种层次化的解决方案:即ECI负责底层Pod容器资源的调度和管理工作,Kubernetes在ECI之上作为PaaS层来管理业务负载。推荐您使用阿里云容器服务Kubernetes版来快速体验ECI的容器运行能力。阿里云容器服务产品的整体架构如下图所示。
3.产品计费
使用弹性容器实例时,涉及收费的资源如下:
资源 | 计费说明 |
---|---|
ECI实例(计算资源) | 根据您创建ECI实例的方式,支持两种计费模式: - 按vCPU和内存 - 按ECS规格 |
镜像缓存 | 创建镜像缓存:手动创建需支付临时资源费用和快照费用;自动创建无需付费。 使用镜像缓存:根据镜像缓存类型和大小,可能需要额外支付云盘或临时存储空间费用。 |
数据缓存 | 创建数据缓存:需支付临时资源费用和快照费用。 使用数据缓存:需要额外支付云盘费用。 |
临时存储空间 | 创建ECI实例时,如果增加了临时存储空间大小,需为其付费。 |
二、阿里云弹性容器实例功能特性
下面介绍弹性容器实例的功能特性。
1.容器运行服务
弹性容器实例是敏捷安全的Serverless容器运行服务。一个ECI实例对应一个容器组(即一个Pod),包含vCPU、内存、操作系统、容器运行时、网络、临时存储等基础组件。
**Serverless1.
使用ECI实例,您无需管理底层服务器,也无需关心运行过程中的容量规划,只需提供打包好的镜像,即可运行容器应用。
自定义规格
支持多种类型的计算资源来运行容器,可以自定义规格,包括:
指定ECI规格:支持指定实例级别或者容器级别的vCPU和内存。
指定ECS规格:支持指定ECS规格来满足特殊业务需求,例如GPU、AMD规格等。
按量按秒收费
支持一站式管理ECI实例的生命周期,按您实际使用时长收费;以小时为单位,按秒收费。
秒级弹性伸缩
ECI实例支持秒级启动,可快速完成扩缩容,满足业务的实时响应需求。
镜像缓存
支持镜像缓存功能加速ECI实例创建,减少实例启动耗时。
2.兼容Kubernetes
基于Kubernetes社区的Virtual Kubelet技术,ECI可以通过虚拟节点的方式接入到Kubernetes集群中,使得集群可以轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。ECI在接管Pod容器底层基础设施的管理工作后,Kubernetes不再需要直接负责单个Pod的放置、启动等工作,也不再需要关心底层虚拟机的资源情况,通过ECI即可确保Pod需要的资源随时可用。
ECI对接Kubernetes分为以下几种:
对接阿里云容器服务Kubernetes版
如果您正在进行Kubernetes集群的选型,推荐您使用阿里云容器服务Kubernetes版。目前ECI已无缝集成到ACK集群(混合使用ECS和ECI)和ACK Serverless集群(完全基于ECI)中。您可以通过ACK集群或者ACK Serverless集群,快速体验ECI的容器运行能力。
对接自建Kubernetes集群
如果您已经在本地IDC,或者阿里云的ECS上自建了Kubernetes集群,可以通过部署虚拟节点的方式来使用ECI。
3.集成云上服务
ECI支持与阿里云其他服务紧密集成,您可以使用一体化控制台进行高效操作。除无缝集成到阿里云容器服务(ACK和ACK Serverless集群)外,ECI还支持集成以下云服务:
镜像:支持使用容器镜像服务ACR。
网络:支持接入负载均衡SLB实现;可以通过NAT网关和弹性公网IP连接公网。
存储:可配合使用云盘、文件存储NAS、对象存储OSS实现容器数据的持久化存储。
日志:支持采集日志到日志服务SLS。
安全:可配合访问控制RAM实现ECI资源的访问权限控制。
弹性伸缩:可配合使用弹性伸缩实现自动扩缩容ECI实例。
三、阿里云弹性容器实例产品优势
弹性容器实例为您提供免运维、弹性、低成本、高效的容器运行环境。
核心优势
弹性容器实例的核心优势主要体现在以下几方面:
免运维
采用Serverless架构,基础设施托管。您无需关心底层服务器,只需要提交容器镜像;无需预先创建集群和维护集群,无需关注运行过程中的容量规划,可以专注业务领域创新。灵活部署
以阿里云全球计算基础设施作为资源池,提供海量、高并发、多种资源类型(CPU、高主频、GPU等)的容器计算资源,您可以根据需要灵活部署。低成本
按实例启动到结束时间段内消耗的资源计费,时长精确到秒。配合Kubernetes或者您自建的调度系统,ECI可根据业务流量自动弹性伸缩,减少空置费用。高弹性
支持快速秒级启动实例,您无需提前预估集群容量和业务流量,可以按需扩容,轻松应对百倍的业务突发流量。兼容性
兼容Kubernetes,Kubernetes集群上的Pod能直接调度至ECI。支持无缝集成至阿里云容器服务Kubernetes版,同时支持通过virtual kubelet对接您自建的Kubernetes集群。集成
自动集成阿里云的其它服务,可快速实现网络访问、日志采集、数据持久化存储、服务监控等功能。例如:日志服务SLS、文件存储NAS、监控服务ARMS等。
优势对比
ECI的核心是容器组,它的概念与Kubernetes的Pod概念完全兼容。使用ECI作为容器运行环境,可以为您的业务系统提供更高的弹性和安全性,同时降低使用和运维成本。
阿里云各类容器服务运行环境的对比如下表所示。
对比项 | 弹性容器实例 | 云服务器ECS | 弹性裸金属服务器 |
---|---|---|---|
成本 | 只为Pod付费,节约成本。 | 为ECS整体付费。 | 为裸金属服务器整体付费。 |
运维 | 无需管理节点,运维简单,成本低。 | 需要自行管理节点,运维ECS。 | 需要自行管理节点,运维裸金属服务器。 |
性能 | 小幅虚拟化损耗。秒级启动,无需预留资源。 | 小幅虚拟化损耗。 | 无虚拟化损耗。 |
弹性 | 最好。支持小规格,提供更多库存。 | 相对好。 | 相对一般。 |
安全 | Pod之间强隔离,安全性更高。 | ECS之间强隔离,Pod之间弱隔离。 | 服务器之间强隔离,Pod之间弱隔离。 |
宕机率 | 极低。影响单个Pod,对业务基本无影响。 | 极低。影响单台ECS,包括部署在该ECS的Pod。 | 极低。影响单台服务器,包括部署在该服务器的Pod。 |
四、阿里云弹性容器实例应用场景
弹性容器实例适用于容器形态下大部分业务场景,从弹性及成本角度,特别适用于在线业务的免运维托管、大数据计算任务(Spark、Presto)、事件驱动型业务和Job型业务,以及DevOps、机器学习、在线测试等各类场景。
概述
弹性容器实例可以通过以下方式对接您的业务系统:
- 无缝接入阿里云ACK Serverless集群
- 以Virtual Node的方式接入Kubernetes集群(阿里云ACK集群、ECS上或者线下IDC自建的Kubernetes集群)
- 通过OpenAPI接入
基于ECI在Serverless、弹性、成本、效率和兼容等方面的优势,ECI特别适用于弹性和并发场景的业务,主要应用场景如下图所示。
在线业务弹性扩容
根据业务流量自动对业务进行扩容(基于Kubernetes HPA),无需人工干预,避免流量激增扩容不及时导致系统故障,以及平时大量闲置资源造成的浪费。在使用阿里云容器服务ACK场景下,支持将一个应用按比例部署到ECS或ECI上,提供更高效的资源利用率、更快的扩容速度、更健壮的系统可靠性和更低成本。
高弹性
快速秒级扩容,可轻松应对百倍突发流量,同时支持HPA及CronHPA。低成本
根据流量动态使用资源,按需付费。高可用
精细化应用伸缩,扩容时保留固定N个副本在ECS上运行,第N+1个以上副本调度到ECI;缩容时优先回收ECI上的Pod副本。
在线业务托管
基于阿里云容器服务Kubernetes版提供完全托管的Kubernetes集群和免运维的基础设施,您不再需要配置单独的运维人员,只需要关注业务应用的定义,由阿里云负责Kubernetes集群及底层基础设施的运维和管理。同时,通过配置弹性伸缩,能够根据流量自动扩缩容,降低运行成本。
免运维
不需要管理集群,也不需要管理工作节点,只需要定义应用、服务和任务。低成本
根据流量动态使用资源,按需付费。兼容性
支持有状态StatefulSet 、无状态Deployment 、任务Job和定时任务CronJob。
数据处理任务
在处理大批量的在线数据并发任务时,可以不再因为成本原因受限于底层资源,导致数据处理任务并发度受限。能够在短时间内快速创建大量工作节点,满足业务的大数据及AI在线处理诉求。在使用阿里云容器服务Kubernetes版的场景下,已经无缝支持在Kubernetes上部署Spark或Presto。
兼容性
完全兼容Spark/Kubernetes生态,无需做业务改造。低成本
提交作业前无需预留资源,所有资源随作业提交自动申请,在作业结束后释放。高并发
提供作业的快速启动和大规模并发能力,无需关心集群的扩缩容和资源。
事件驱动型业务
ECI作为Serverless的容器基础设施,通过事件触发,提供高并发、低成本的容器实例调度及事件处理能力。例如:在线教育行业的录制和转码。
高并发
提供大规模的资源供应能力。高弹性
秒级启动和弹性伸缩,提供高并发事件和任务处理能力。低成本
容器实例根据资源规格及使用时长付费,在事件和任务处理结束后停止收费。
CI/CD测试环境
对接CI/CD流程,自动完成容器部署、应用打包和测试用例执行。支持随时创建和释放容器实例,能够提供低成本的大规模资源供应,应对在CI/CD过程中的批量测试任务,例如:自动驾驶行业在开发测试阶段的全量自动驾驶仿真模拟。
高弹性
支持高并发,支持CPU、GPU;适合CI打包、压力测试、仿真测试。低成本
按需使用,按秒计费,测试完成释放资源,降低CI/CD成本。深度整合
与CI流程整合,提交待发布版本后,直接触发压力测试和仿真测试;支持Kubernetes标准OpenAPI。
以上是阿里云弹性容器实例的产品概述、实例功能特性、应用场景以及弹性容器实例介绍,更多弹性容器实例详情参考:https://www.aliyun.com/product/eci
五、阿里云弹性容器实例基本概念
使用ECI前,建议您先了解相关概念,以便更好地使用产品。
ECI相关概念
使用ECI涉及的相关概念如下表所示。
概念 | 说明 |
---|---|
容器(Container) | 容器是轻量的、可执行的独立软件包,是镜像运行的实体。 |
容器组(Container Group) | 容器组是一组可以被调度到同一台宿主机上的容器集合。这些容器共同构成了容器组的生命周期,并共享容器组的网络和存储资源。 一个容器组即一个ECI实例,其概念与Kubernetes的Pod概念类似。 |
镜像(Image) | 镜像是一个特殊的文件系统,包含容器应用运行所需的程序、库文件、配置等。Docker镜像是容器应用打包的标准格式,在部署容器化应用时,您需要指定镜像,该镜像可以来自于Docker Hub、阿里云镜像服务ACR或者您的私有Registry。 |
镜像缓存(ImageCache) | 镜像缓存用于加速拉取镜像,减少ECI实例启动耗时。受网络、镜像大小等因素影响,镜像拉取是ECI实例启动的主要耗时,提前制作镜像缓存可以加速拉取镜像。 |
数据卷(Volume) | 数据卷是容器组的共享存储资源。您可以将外部数据卷挂载到指定的容器组,容器组中声明的数据卷由容器组中的所有容器共享。 |
标签(Tag) | 标签是附加在容器组上的一系列Key/Value键值对。标签需要在创建容器组时赋予,每个容器组最多可以拥有10个标签,其中key值必须唯一。 标签的概念与Kubernetes的Label概念类似。 |
虚拟节点(Virtual Node) | 基于Kubernetes社区的Virtual Kubelet技术,ECI可以通过虚拟节点的方式接入到Kubernetes集群中,即ECI实例并不会运行在一个集中式的真实节点上,而是会被打散分布在整个阿里云的资源池中。 |
Kubernetes相关概念
如果您使用Kubernetes来管理您的ECI实例,您需要了解Kubernetes的相关概念。主要概念如下表所示:
概念 | 说明 |
---|---|
Master | Kubernetes集群中的控制节点,负责整个集群的管理和调度。 |
Node | Kubernetes集群中真正运行工作负载的工作节点。当某个Node宕机时,其上的工作负载会被Master自动转移到其他Node上。 |
Pod | Kubernetes中创建或部署的最小单元。一个Pod代表集群上正在运行的一个进程,封装了一个或多个紧密相关的容器。 |
Deployment | 无状态工作负载。Pod上的一个抽象,可以定义一组Pod的副本数、版本等。 |
StatefulSet | 有状态工作负载。和Deployment类似,用于管理一组Pod,不同的是StatefulSet可以为这些Pod提供持久化存储和持久标识符。 |
Service | 用于为一组Pod提供一个统一的、稳定的访问地址。 |
ConfigMap | 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。 |
Namespace | 集群内部的逻辑隔离,用于划分、管理资源对象。 |
Label | 可以附加在各种资源对象上的一系列Key/Value键值对。为指定的资源对象绑定一个或多个不同的Label,可以实现多维度的资源分组管理。 |
Volume | Pod中能够被多个容器访问的文件目录。一个数据卷可以挂载在Pod中的一个或多个容器的指定路径下。 |
PersistentVolume | PV,存储卷。集群中由管理员配置的存储资源。 |
PersistentVolumeClaim | PVC,存储声明。用于表达用户对存储资源的请求。 |