1. 弹性容器实例ECI概述阿里云弹性容器实例Elastic Container Instance简称ECI是阿里云结合容器技术与Serverless理念推出的容器运行服务。使用ECI部署容器应用时用户无需购买和管理底层的云服务器ECS只需提供打包好的Docker镜像即可在阿里云上直接运行容器。ECI采用按量按秒计费模式用户仅为容器实际配置的CPU和内存资源付费无需为闲置的节点资源买单。一个ECI实例在概念上等同于Kubernetes中的一个Pod。ECI负责Pod底层容器资源的调度和管理而Kubernetes则在ECI之上作为PaaS层管理Deployment、Service、StatefulSet、CronJob等业务负载。这种分层架构使得ECI既能提供Serverless的免运维体验又能与Kubernetes生态无缝融合。ECI的核心价值体现在三个方面首先是极致的弹性基于Virtual Kubelet技术ECI可以虚拟节点的形式接入Kubernetes集群使集群获得远超节点计算容量的弹性能力其次是真正的免运维用户无需规划集群容量、无需维护节点彻底摆脱底层基础设施的运维负担最后是精细的成本控制按Pod运行时间计费业务高峰时弹性扩容、低谷时快速释放实现资源利用的最大化。需要先登录阿里云控制台点 击阿里云控制台2. ECI的四种对接使用方式根据业务场景和技术栈的不同ECI提供了四种灵活的使用方式控制台、OpenAPI/SDK、ACK Serverless集群、ACK集群及自建Kubernetes集群。2.1 方式一通过控制台直接使用ECI控制台是最直观的入门方式适合新手用户快速体验ECI的容器运行能力。在弹性容器实例控制台的容器组页面点击创建弹性容器组即可开始配置。创建实例时需要配置以下核心参数选择付费模式按量付费和实例类型选择地域、专有网络VPC和对应的交换机指定容器镜像支持Docker Hub、ACR等仓库配置CPU和内存规格。在高级配置中可以开启自动匹配镜像缓存来加速实例启动也可以声明数据卷并挂载到容器中。确认配置信息后选中服务协议点击确认订单即可完成创建。创建ECI实例前需要完成以下准备工作已开通弹性容器实例服务、访问控制RAM服务并完成相关RAM角色授权已在合适的地域下创建专有网络VPC和交换机建议创建多个交换机以实现多可用区功能提高实例创建成功率已创建安全组一个ECI实例必须属于一个安全组。2.2 方式二通过OpenAPI/SDK编程调用对于不使用Kubernetes的开发者ECI提供了完整的OpenAPI和SDK支持Java、Python、Go。核心接口是CreateContainerGroup通过该接口可以编程式地创建、管理和释放ECI实例。以下是通过Python SDK创建ECI实例的完整示例from aliyunsdkcore.client import AcsClient from aliyunsdkeci.request.v20180808 import CreateContainerGroupRequest import json # 初始化客户端 client AcsClient( access_key_idyour-access-key-id, access_secretyour-access-secret, region_idcn-hangzhou ) # 构建请求 request CreateContainerGroupRequest.CreateContainerGroupRequest() request.set_AcceptFormat(json) # 设置实例基本信息 request.set_ContainerGroupName(my-eci-demo) request.set_VSwitchId(vsw-xxxxxxxx) request.set_SecurityGroupId(sg-xxxxxxxx) # 设置容器规格vCPU和内存 request.set_Cpu(2.0) request.set_Memory(4.0) # 设置容器镜像 request.set_Image(nginx:latest) # 发送请求 response client.do_action_with_exception(request) print(json.loads(response))调用CreateContainerGroup接口时可以通过InstanceType参数指定实例规格既可以指定vCPU和内存规格也可以直接指定ECS规格如ecs.c6.xlarge。如需使用GPU实例在通过InstanceType参数指定ECS GPU实例规格的基础上必须通过容器属性中的GPU参数指定容器使用的GPU个数。创建ECI实例时还可以通过PrivateIpAddress参数指定实例的私网IP地址通过EipInstanceId参数绑定已有EIP或通过AutoCreateEip和EipBandwidth参数创建并绑定一个EIP。2.3 方式三ACK Serverless集群完全基于ECIACK Serverless集群是完全基于ECI运行的Kubernetes集群。在ACK Serverless集群中您无需手动部署虚拟节点即可直接创建ECI Pod集群中的每个Pod均对应一个ECI实例。ACK Serverless集群可以为您提供完全基于ECI运行的Kubernetes环境为在线和离线业务、仿真环境、开发测试环境等提供免运维、低成本的Kubernetes环境。您无需购买节点无需对集群进行节点维护和容量规划即可直接部署容器应用并且只需要为应用配置的CPU和内存资源量进行按需付费。您可以直接使用Kubernetes API或者命令行直接管理容器应用ACK Serverless集群集成阿里云各类服务可以帮助您简化Kubernetes的开发专注于应用构建而非基础架构运维。使用流程如下创建ACK Serverless集群准备容器镜像创建应用可通过容器服务控制台创建或在CloudShell上通过kubectl创建。2.4 方式四ACK集群混合使用ECI和ECS及自建Kubernetes集群ACK集群默认是基于ECS运行的Kubernetes集群。如果您已经建立了ACK集群可以通过部署虚拟节点基于Virtual Kubelet技术的方式来使用ECI。有了虚拟节点后当您的ACK集群需要扩容时无需规划节点的计算容量可以直接在虚拟节点下按需创建ECIECI与集群中真实节点上的Pod之间网络互通。建议您将长时间运行的业务负载的弹性流量部分调度至ECI这可以缩短弹性扩容的时间减少扩容成本并充分利用已有资源。当业务流量下降后您可以快速释放部署在ECI上的Pod从而降低使用成本。在ACK集群中使用ECI的流程如下创建ACK集群部署ack-virtual-node组件产生虚拟节点准备容器镜像创建应用。如果您在本地IDC或者阿里云ECS上自建了Kubernetes集群同样可以通过部署虚拟节点VNode的方式来使用ECI。VNode对标原生Kubernetes节点内置了virtual-kubelet、kube-proxy等组件兼容原生Kubernetes节点API。当有Pod调度到VNode上时将在ECI上运行。ECI提供了VNodectl命令行工具方便接入和管理VNode。在混合使用ECI和普通节点的场景下一般可以通过配置Pod Label、配置Namespace Label和配置ECI弹性调度等方式将Pod调度到ECI。给Pod添加alibabacloud.com/ecitrue的标签Pod将以ECI方式运行并且所在的节点是虚拟节点。ACK集群中的虚拟节点默认带有virtual-kubelet.io/provideralibabacloud:NoSchedule的污点需要在Pod中增加对应的容忍度才能调度到虚拟节点上。3. ECI网络与安全组配置ECI实例目前只能部署在VPC网络中。交换机CIDR块中的IP地址数量决定了可以在该交换机中创建的ECI实例的最大数量因此在创建ECI实例之前需要规划好交换机的CIDR块。安全组是一种虚拟防火墙具备状态检测和数据包过滤能力用于在云端划分安全域。通过添加安全组规则您可以控制安全组内ECI实例的入流量和出流量。一个安全组可以管理同一个VPC内的多个ECI实例一个ECI实例必须属于一个安全组。创建ECI实例时必须要指定安全组。调用CreateContainerGroup接口创建ECI实例时可以通过SecurityGroupId参数来指定安全组。创建成功的ECI实例不支持修改安全组如果想要变更安全组需要重新创建ECI实例。安全组分为普通安全组和企业安全组。如果您对整体规模和运维效率有较高需求建议使用企业安全组相比普通安全组企业安全组大幅提升了组内支持容纳的实例数量简化了规则配置方式。对于安全组内的ECI实例您可以添加安全组规则来控制其出入流量当ECI实例需要与所在安全组之外的网络进行通信时可以添加允许访问的安全组规则实现网络互通在运行ECI实例的过程中发现部分请求来源有恶意攻击行为时可以添加拒绝访问的安全组规则实现网络隔离。如果需要从公网访问VPC内的ECI实例需要在安全组中开放对应的端口。当ECI需要访问RDS等数据库服务时可以在RDS白名单中添加VPC或交换机网段属于该网段的ECI实例均可访问该RDS实例也可以在RDS白名单中添加安全组该安全组中的ECI实例均可以访问该RDS实例。4. ECI存储卷挂载ECI支持挂载多种存储卷类型包括OSS对象存储和云盘等。4.1 挂载OSSOSS是阿里云提供的海量、安全、低成本、高可靠的存储空间适合存储非结构化数据如图片、音视频等。部署阿里云CSI插件后可以在自建的Kubernetes集群使用阿里云OSS作为Volume。挂载OSS时仅支持静态数据卷。OSS为共享存储一个OSS Bucket可以挂载到多个Pod上。不支持动态挂载OSS即OSS不支持动态创建PV。挂载目录中建议存放的文件数不超过1000个文件数量过多时OSSFS会占用大量内存可能导致Pod发生OOM。以下是使用PVC方式静态挂载OSS到ECI Pod的YAML示例apiVersion: v1 kind: PersistentVolume metadata: name: oss-pv labels: alicloud-pvname: oss-pv spec: capacity: storage: 25Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: oss-pv volumeAttributes: bucket: oss-test url: oss-cn-beijing-internal.aliyuncs.com otherOpts: -o max_stat_cache_size0 -o allow_other path: / ramRole: 相关参数说明如下driver配置为ossplugin.csi.alibabacloud.com表示使用阿里云OSS CSI插件volumeHandle为PV的唯一标识符与metadata中的name保持一致bucket为OSS Bucket的名称目前只支持挂载Bucket不支持挂载Bucket下的子目录或文件url为OSS的接入域名Endpoint。挂载OSS时支持定制化参数输入例如-o max_stat_cache_size0代表禁用属性缓存每次访问文件都会从OSS中获取最新的属性信息-o allow_other代表允许其他用户访问挂载的文件系统。4.2 挂载云盘部署阿里云CSI插件后可以在自建的Kubernetes集群使用阿里云云盘作为Volume。使用PVC方式挂载云盘时支持静态数据卷和动态数据卷。云盘只能挂载到同一可用区的VNode上运行的ECI Pod。5. ECI监控、日志与事件5.1 查看监控信息在ECI实例详情页面可以查看CPU利用率、内存利用率、网络流量、磁盘使用情况等监控信息。云监控会自动从ECI实例采集资源指标您可以在云监控控制台中查看指标图表跟踪实例运行状况。您可以针对ECI实例的一个或多个监控指标设置报警规则例如CPU利用率高于80%当监控数据符合报警规则时云监控会自动发送报警通知便于您及时了解资源运行状态处理异常情况。云监控支持监控ECI实例的CPU利用率、内存利用率、存储空间容量等指标。5.2 采集日志到SLSECI支持对接阿里云日志服务SLS将ECI日志采集到SLS中。ECI支持通过容器的环境变量传入日志相关的自定义配置实现通过SLS自动采集容器日志。仅在创建ECI实例时才能通过环境变量自定义配置日志采集更新实例时传入的日志相关环境变量不会生效。以下是通过环境变量配置日志采集的示例apiVersion: v1 kind: Pod metadata: name: eci-log-demo spec: containers: - name: app image: nginx:latest env: - name: aliyun_logs_logstore value: stdout - name: aliyun_logs_logstore_project value: your-project-name - name: aliyun_logs_logstore_logstore value: your-logstore-name5.3 查看事件在实例详情页面的事件页签下可以查看当前实例对应的最近50条事件。事件列表展示事件名称、类型Normal/Warning、描述、开始时间和结束时间等信息。通过查看事件可以快速定位和排查实例运行中的问题。6. ECI高级特性6.1 镜像缓存加速镜像缓存功能用于加速实例创建。使用镜像缓存创建ECI实例可以加速拉取镜像减少ECI实例的启动耗时。您可以预先将需要使用的镜像制作成缓存快照然后基于该快照来创建ECI实例避免或减少镜像层的下载从而提升实例的创建速度。经实测以使用Docker Hub的Flink镜像约386.26 MB创建Pod为例正常创建过程中镜像准备阶段需要耗时50秒使用镜像缓存后大幅缩短了启动时间。开启自动匹配镜像缓存后如果匹配到了镜像缓存则可以加速ECI实例创建如果没有完全匹配的镜像缓存则系统会自动创建一个镜像缓存该镜像缓存不收取创建费用可用于后续创建同类镜像的ECI实例。调用CreateContainerGroup接口创建ECI实例时可以通过AutoMatchImageCache参数来开启自动匹配镜像缓存。在控制台创建时可以在容器组配置区域展开高级配置然后选中自动匹配镜像缓存。6.2 弹性伸缩对于运行同一业务的ECI实例可以将其加入到弹性伸缩组中。设置伸缩组最小实例数来保证日常业务运行设置伸缩组最大实例数来避免成本超标同时可以设置伸缩规则配合定时任务或报警任务来实现自动扩缩容组内的ECI实例。弹性伸缩会实时统计指标数据在统计值满足报警条件时触发报警并在生效周期内自动执行伸缩规则动态调整伸缩组内的ECI实例数量。创建伸缩组时需选择ECI作为伸缩组类型。在伸缩配置中可以设置容器组的CPU、内存规格。通过Kubernetes YAML文件方式也可以为ECI类型的伸缩组创建伸缩配置。7. ECI成本优化实践ECI采用按量按秒计费模式用户仅为容器实际配置的CPU和内存资源付费。以下是一些成本优化的实操建议合理选择规格大部分场景下如果没有特殊的规格需求如GPU、本地盘等推荐指定vCPU和内存来创建ECI实例。系统会尝试使用多种ECS规格进行支撑以提供比ECS单规格更好的弹性和资源供应能力。利用内网访问当ECI需要访问同地域的其他阿里云服务如OSS、RDS等时优先使用内网Endpoint进行访问避免产生外网流量费用。快速释放闲置资源业务流量下降后及时释放部署在ECI上的Pod避免为闲置资源付费。配合弹性伸缩组的自动缩容策略可以实现资源的自动回收。使用镜像缓存通过镜像缓存加速实例启动不仅提升了用户体验还能减少实例运行时长从而降低成本。混合部署策略将长时间运行的稳定业务负载部署在ECS节点上将弹性流量部分调度至ECI。这样可以充分利用已有资源同时享受ECI的弹性能力。8. 总结阿里云弹性容器实例ECI作为Serverless容器运行服务通过控制台、OpenAPI/SDK、ACK Serverless集群、ACK集群及自建Kubernetes集群四种方式为不同技术栈和业务场景的用户提供了灵活的接入选择。ECI与Kubernetes生态的深度融合使得用户可以在享受Serverless免运维体验的同时充分利用Kubernetes的编排、负载均衡、定时调度等能力。在实际生产应用中镜像缓存加速、日志服务SLS采集、云监控告警、存储卷挂载等高级特性为ECI提供了完备的可观测性和数据持久化能力。合理的网络与安全组配置保障了ECI实例的网络安全而弹性伸缩和成本优化策略则帮助用户在保证业务弹性的同时有效控制成本。无论是快速上手的个人开发者还是需要大规模容器化部署的企业用户ECI都能提供安全、弹性、免运维的容器运行环境。随着Serverless容器技术的不断发展ECI将成为云原生应用部署的重要基础设施之一。常见问题解答问ECI实例和普通ECS实例有什么区别答ECI是Serverless容器运行服务用户无需管理底层服务器只需提供Docker镜像即可运行容器按容器实际消耗的CPU和内存按秒计费。而ECS是虚拟机服务用户需要自行管理和维护操作系统及运行环境。问ECI实例如何与Kubernetes集群对接答ECI可以通过三种方式与Kubernetes对接ACK Serverless集群完全基于ECI、ACK集群中部署虚拟节点混合使用ECI和ECS、自建Kubernetes集群中部署VNode。问创建ECI实例时必须配置哪些网络资源答创建ECI实例时必须指定VPC、交换机VSwitch和安全组。ECI实例只能部署在VPC网络中一个ECI实例必须属于一个安全组。问如何加速ECI实例的启动速度答可以使用镜像缓存功能将需要使用的镜像预先制作成缓存快照基于该快照创建ECI实例可以避免或减少镜像层的下载。在控制台创建时可开启自动匹配镜像缓存或通过API的AutoMatchImageCache参数开启。问ECI支持哪些存储类型答ECI支持挂载OSS对象存储和云盘作为数据卷。OSS为共享存储支持ReadWriteMany访问模式云盘支持静态和动态数据卷挂载。问如何采集ECI容器的日志答ECI支持对接阿里云日志服务SLS通过容器的环境变量传入日志相关的自定义配置实现自动采集容器日志到SLS中。日志相关配置仅在创建ECI实例时生效。