在现代云计算和容器化环境中,Pod实例是Kubernetes中最小的可部署单元,通常由一个或多个容器组成。Pod实例的计算类型和算力质量对于应用的性能以及资源利用率有着重要的影响。容器计算服务 ACS(Container Compute Service)提供了多种计算类型和相对应的算力质量,以满足多样化的业务需求。本文主要介绍ACS Pod的使用准备工作、使用限制以及核心功能,包括安全隔离、CPU/Memory/GPU资源和规格配置、镜像拉取、存储、网络和日志收集等。
计算类型定义
ACS当前提供了3种计算类型,其中通用计算提供2种类型,异构计算提供1种类型。不同的计算类型在资源供给上会有所区别,以适应不同的业务场景。
计算类型 | 标签 | 特点 |
通用型(默认) | general-purpose | 满足绝大部分无状态微服务应用 、Java Web应用、计算类任务等。 |
性能型 | performance | 满足性能需求更强的业务场景,如CPU Based AI/ML训练和推理、HPC批处理等。 |
GPU型 | gpu | 满足AI/HPC等异构计算场景 ,如GPU单卡、多卡推理,GPU并行计算等。 |
您可以通过Pod上的.alibabacloud.com/compute-class
标签来指定实例的计算类型。下面是一个Nginx应用的示例编排,指定了计算类型为通用型general-purpose
。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
alibabacloud.com/compute-class: general-purpose
spec:
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
算力质量定义
ACS当前提供了2种算力质量。不同的算力质量在资源供给上会有所区别,以适应不同的业务场景。
算力质量 | 标签 | 特点 | 典型应用场景 |
默认型 | default |
|
|
BestEffort型 | best-effort |
|
|
您可以通过Pod上的alibabacloud.com/compute-qos
标签来指定实例的算力质量。下面是一个Nginx应用的示例编排,指定了算力质量为默认型default
。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
alibabacloud.com/compute-qos: default
spec:
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
ACS算力质量定义和Kubernetes原生的QoS类型定义不同,目前默认型的算力质量对应Kubernetes的原生QoS Class是Guaranteed。
BestEffort算力质量实例为动态库存,强烈建议您在生产环境配置库存优先调度策略,在库存不足时由平台自动切换至默认型。更多信息,请参见自定义资源调度策略。
计算类型与算力质量的对应关系
计算类型(标签) | 支持的算力质量(标签) |
通用型(general-purpose) | 默认型(default)、BestEffort型(best-effort) |
性能型(performance) | 默认型(default) |
GPU型(gpu) | 默认型(default) |
Kubernetes应用限制
ACS通过虚拟节点与Kubernetes实现无缝对接,因此ACS Pod实例并不会运行在一个集中式的真实节点上,而是打散分布在整个阿里云的资源池中。基于公有云的安全性和虚拟节点本身带来的限制,ACS目前还不支持Kubernetes中的HostPath、DaemonSet等功能,具体如下表所示。
限制项 | 说明 | 校验失败时处理策略 | 推荐替代方案 |
DaemonSet | 限制使用Daemonset类工作负载 | Pod运行但无法正常工作 | 通过Sidecar形式在Pod中部署多个容器 |
HostPath | 限制挂载本地宿主机文件到容器中 | 拒绝提交 | 使用emptyDir、云盘或者NAS文件系统 |
type=NodePort的Service | 将宿主机端口映射到容器上 | 拒绝提交 | 使用 |
HostNetwork | 限制将宿主机端口映射到容器上 | 改写为 | 无需使用 |
HostIPC | 限制容器进程和宿主机进程间通信 | 改写为 | 无需使用 |
HostPID | 限制容器可见宿主机PID空间 | 改写为 | 无需使用 |
HostUsers | 限制使用用户命名空间 | 改写为空值 | 无需使用 |
Linux capabilities | 限制Linux系统特权(securityContext.capabilities)使用,不在允许值范围内的将被拒绝提交 说明 支持使用的特权:
| 拒绝提交 | 使用允许值 |
Sysctl | 限制内核参数(securityContext.sysctls)使用 说明
| 拒绝提交 | 使用允许值 |
PrivilegeEscalation | 限制容器进行特权提升(securityContext.allowPrivilegeEscalation) | 拒绝提交 | 使用默认配置 |
Privileged Container | 限制容器拥有privileged权限 | 拒绝提交 | 使用Security Context为Pod添加允许的capability或sysctl |
ImagePullPolicy | 限制镜像的下载策略 | 改写为 | 使用允许值 |
DNSPolicy | 限制使用特定的DNSPolicy 说明
|
| 使用允许值 |
核心功能
功能项 | 说明 |
安全隔离 | 作为安全可靠的Serverless容器运行环境,每个ACS Pod实例底层通过轻量级安全沙箱技术完全强隔离,实例间互不影响。同时实例在调度时尽可能分布在不同的物理机上,进一步保障了高可用性。 |
CPU/Memory/GPU/EphemeralStorage资源规格配置 |
|
镜像 | ACS Pod默认每次启动后使用与Pod关联的VPC从远端拉取容器镜像。如果镜像为公共镜像,则需要开通VPC的NAT网关。建议您将容器镜像存储在阿里云容器镜像服务 ACR(Container Registry),通过VPC网络减少镜像拉取时间。另外,对于ACR上的私有镜像,ACS提供了免密拉取ACR镜像功能,方便您使用。 |
存储 | ACS支持云盘、NAS、OSS和CPFS四种持久化存储。
|
网络 | ACS Pod默认使用独立的Pod IP,占用交换机vSwitch的一个弹性网卡。 在ACS集群环境中,Pod互联互通的方法如下:
|
日志采集 | 您可以直接配置Pod的环境变量收集 |
资源规格
General-Purpose/Performance计算类型
vCPU | Memory(GiB) | Memory支持步长(GiB) | 网络带宽(出+入)(Gbits/s)理论上限值 | 存储 |
0.25 | 0.5、1、2 | N/A | 0.08 | 30~512GiB, 额外的存储空间可以通过挂载NAS等存储卷扩展。 |
0.5 | 1~4 | 1 | 0.08 | |
1 | 1~8 | 0.1 | ||
1.5 | 2~12 | 1 | ||
2 | 2~16 | |||
2.5 | 3~20 | 1.5 | ||
3 | 3~24 | |||
3.5 | 4~28 | |||
4 | 4~32 | |||
4.5 | 5~36 | |||
5 | 5~40 | |||
5.5 | 6~44 | |||
6 | 6~48 | |||
6.5 | 7~52 | 2.5 | ||
7 | 7~56 | |||
7.5 | 8~60 | |||
8 | 8~64 | |||
8.5 | 9~68 | |||
9 | 9~72 | |||
9.5 | 10~76 | |||
10 | 10~80 | |||
10.5 | 11~84 | |||
11 | 11~88 | |||
11.5 | 12~92 | |||
12 | 12~96 | |||
12.5 | 13~100 | 3 | ||
13 | 13~104 | |||
13.5 | 14~108 | |||
14 | 14~112 | |||
14.5 | 15~116 | |||
15 | 15~120 | |||
15.5 | 16~124 | |||
16 | 16~128 |
如不指定规格,默认单个Pod的资源为0.25 vCPU和0.5 GiB内存。
ACS会自动规整不支持的规格,规整后容器的.resources.requests
不会变化,但Pod规格会通过.alibabacloud.com/pod-use-spec
标注透出。 当容器指定的资源上限(.resources.limits
) 超过了Pod的规格,ACS会以Pod规格来设置容器的资源上限。
ACS规整逻辑:如果所有容器相加的资源为2 vCPU和3.5 GiB内存,那么ACS将会自动规整Pod为2 vCPU和4 GiB内存。调整的额外资源会生效到第一个容器中。Pod会透出标注.alibabacloud.com/pod-use-spec=2-4Gi
。若Pod中单个容器指定了资源上限为3 vCPU和5 GiB内存,则该容器资源上限会生效成2 vCPU和4 GiB。
资源声明示例如下:
apiVersion: apps/v1
kind: Deployment
...
template:
metadata:
labels:
app: nginx
alibabacloud.com/compute-class: general-purpose
alibabacloud.com/compute-qos: default
spec:
containers:
- name: nginx
resources:
requests:
cpu: 2 # 声明CPU为2 vCPU
memory: "4Gi" #声明内存为 4 GiB
ephemeral-storage: "30Gi" #声明存储空间为30 GiB
GPU计算类型
GPU | vCPU | Memory(GiB) | Memory支持步长(GiB) | 网络带宽(出+入)(Gbits/s)理论上限值 | 存储 |
1 | 2 | 2~16 | 1 | 2 | 30~500GiB, 额外的存储空间可以通过挂载NAS等存储卷扩展。 |
4 | 4~32 | 1 | 4 | ||
6 | 6~48 | 1 | 6 | ||
8 | 8~64 | 1 | 8 | ||
10 | 10~80 | 1 | 10 | ||
12 | 12~96 | 1 | 12 | ||
14 | 14~112 | 1 | 14 | ||
16 | 16~128 | 1 | 16 | ||
2 | 16 | 16~128 | 1 | 16 | |
32 | 32、64、128、230 | N/A | 32 | ||
4 | 32 | 32、64、128、256 | N/A | 32 | |
64 | 64、128、256、460 | N/A | 64 | ||
8 | 64 | 64、128、256、512 | N/A | 64 | |
128 | 128、256、512、920 | N/A | 100 |
如不指定规格,GPU容器Pod会根据GPU类型选择最小规格Pod(如上图是2 vCPU,2GiB内存和1卡GPU)。
ACS会自动规整不支持的规格,规整后容器的.resources.requests
不会变化,但Pod规格会通过.alibabacloud.com/pod-use-spec
标注透出。 当容器指定的资源上限(resources.limits
) 超过了Pod的规格,ACS会以Pod规格来设置容器的资源上限。
CPU和Memory规整逻辑:如果所有容器相加的资源为2 vCPU和3.5 GiB内存,那么ACS将会自动规整Pod为2 vCPU和4 GiB内存。调整的额外资源会生效到第一个容器中。Pod会透出标注
.alibabacloud.com/pod-use-spec=2-4Gi
。若Pod中单个容器指定了资源上限为3 vCPU和5 GiB内存,则该容器资源上限会生效成2 vCPU和5 GiB。GPU规整逻辑:Pod申请的GPU数量不在表格中时,Pod提交失败。
端口占用说明
下表为ACS占用的端口情况,在部署服务时,请您避免使用以下端口。
端口 | 说明 |
111、10250、10255 | ACS集群使用端口,exec、logs、metrics等接口使用。 |