ECI能为Kubernetes提供基础的容器Pod运行环境,每个ECI实例相当于一个Pod。本文主要介绍弹性容器实例ECI Pod的使用准备工作、使用限制以及核心功能,包括安全隔离、CPU/Memory资源和规格配置、镜像拉取、存储、网络、日志收集等。
前提条件
已创建ACK集群或ACK Serverless集群,并已在集群中部署虚拟节点。详情请参见创建集群和步骤一:部署ack-virtual-node组件。
已开通弹性容器实例服务。登录弹性容器实例控制台开通相应的服务。
Kubernetes应用限制
ACK的虚拟节点基于Kubernetes社区的Virtual Kubelet技术实现。ACK Serverless集群会通过虚拟节点实现与ECI的无缝对接。因此ECI实例并不会运行在一个集中式的真实节点上,而是打散分布在整个阿里云的资源池中。
基于公有云的安全性和虚拟节点本身带来的限制,ECI目前还不支持Kubernetes中HostPath、DaemonSet等功能,具体如下表所示。
不支持的功能 | 说明 | 推荐替代方案 |
HostPath | 挂载本地宿主机文件到容器中 | 使用emptyDir、云盘或者NAS文件系统 |
HostNetwork | 将宿主机端口映射到容器上 | 使用type=LoadBalancer的负载均衡 |
DaemonSet | 在容器所在宿主机上部署Static Pod | 通过sidecar形式在Pod中部署多个镜像 |
Privileged权限 | 容器拥有privileged权限 | 使用Security Context为Pod添加Capability |
type=NodePort的Service | 将宿主机端口映射到容器上 | 使用type=LoadBalancer的负载均衡 |
核心功能
安全隔离
作为安全可靠的Serverless容器运行环境,每个ECI实例底层通过轻量级安全沙箱技术完全强隔离,实例间互不影响。同时,不同虚拟节点上的ECI Pod分布在不同的可用区,且同一可用区上的实例在调度时尽可能分布在不同的物理机上,进一步保障了高可用性。
CPU/Memory资源或规格配置
功能项 | 说明 |
指定vCPU和Memory来申请资源和计费 | |
指定Pod的ECS规格 | |
抢占式实例 | 您可以通过配置Annotation使用Spot可抢占式实例,大幅降低计算成本。抢占式实例的详细信息,请参见使用抢占式实例。 |
镜像拉取与缓存
镜像拉取
ECI Pod默认每次启动后使用内部的containerd从远端拉取容器镜像。如果镜像为公共镜像,则需要开通VPC的公网NAT网关,或者给ECI Pod挂载EIP。建议您将容器镜像存储在阿里云镜像仓库(ACR),通过VPC网络减少镜像拉取时间。另外,对于ACR上的私有镜像,实现了免密拉取功能,方便您使用。
镜像缓存
为加速实例的创建速度,ECI提供镜像缓存功能。您可以预先将需要使用的镜像制作成缓存快照,然后基于该快照来创建ECI实例,避免或减少镜像层的下载,从而提升实例的创建速度。镜像缓存的创建分为手动创建和自动创建两种方式,具体操作,请参见使用ImageCache加速创建Pod。
存储
支持多种使用存储的方式:
CSI:
CSI是当前Kubernetes社区推荐的插件实现方案,阿里云提供的CSI插件主要包括以下几部分:
CSI-Plugin:实现数据卷的挂载、卸载功能。
CSI-Provisioner:实现数据卷的自动创建能力,目前支持云盘、NAS两种数据卷创建能力。
NFS:参考示例。
PV/PVC:参考示例。
网络
ECI Pod默认使用Host网络模式,占用交换机vSwitch的一个弹性网卡ENI资源。
在Kubernetes集群环境中,ECI Pod与ECS节点上的Pod互联互通,方法如下:
LoadBalancer Service挂载ECI Pod:也可以支持Service同时挂载ECS节点上的Pod和ECI Pod。
访问ClusterIP Service:ECI Pod可以访问集群中的ClusterIP地址。
挂载EIP:支持给ECI Pod挂载EIP,可自动创建或者绑定到已有的EIP实例。
日志采集
您可以直接配置Pod的Env收集stdout
或者文件日志,将其采集到阿里云日志服务SLS中。一般情况下,您无需额外部署一个logtail sidecar
容器。
支持和追加的Annotation
您可以在Pod Spec中配置Annotation,充分使用ECI提供的功能。详细信息,请参见ECI Pod Annotation。
- 本页导读 (1)