ECI Pod(即ECI实例)的系统开销会占用部分内存导致实际可用内存小于指定的内存,如果您希望ECI Pod实际可用的内存≥指定的内存,可以开启系统开销预留功能,以此来确保ECI Pod实际可用内存能够符合业务所需。
功能说明
ECI实例的系统开销包含轻量虚拟化、内核和系统组件。这些开销与实例规格相关,主要表现在内存上。例如:一个4 vCPU,8 GiB内存的ECI实例,最大会有0.5 GiB的系统开销。此时,该实例实际可用的内存约为7.5 GiB,这可能不符合您指定vCPU和内存创建ECI实例时的预期。如果您希望ECI实例实际可用的内存≥指定的内存,可以开启系统开销预留功能。
ECI实例的内存系统开销大约在0.5~2 GiB不等,随实例规格大小变化。
开启系统开销预留功能后,系统会自动为ECI实例附加系统开销占用的内存,然后向上规整到最接近的规格,并按规整后的规格计费。
例如:在华北1(青岛)地域创建ECI实例时,指定规格为4 vCPU,8 GiB内存,同时开启系统开销功能。由于指定内存(8 GiB)+系统开销预留内存(0.5 GiB)=8.5 GiB,规整后实际生成的ECI实例为4 vCPU,10 GiB内存。
关于ECI支持的vCPU和内存规格,请参见规格说明。
使用限制
系统开销预留功能具有以下限制:
目前仅预留内存,不预留vCPU。
仅适用于指定vCPU和内存创建ECI实例。
如果指定ECS规格创建ECI实例,请自行预留。
配置说明
您可以在Pod metadata中添加Annotation来开启系统开销预留。对应Anotation如下:
k8s.aliyun.com/eci-overhead-reservation-option: "{\"enableOverheadReservation\":true}"
Annotation请添加在Pod的metadata下,例如:创建Deployment时,Annotation需添加在spec>template>metadata下。
仅支持在创建ECI Pod时添加ECI相关Annotation来生效ECI功能,更新ECI Pod时添加或者修改ECI相关Annotation均不会生效。
配置示例
创建一个开启系统开销预留的Pod。
kubectl create -f overhead-test.yaml
overhead-test.yaml的内容示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: test labels: app: test spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: name: nginx-test labels: app: nginx alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-use-specs : "4-8Gi" #指定规格为4 vCPU,8 GiB内存 k8s.aliyun.com/eci-overhead-reservation-option: "{\"enableOverheadReservation\":true}" # 开启系统开销预留 spec: containers: - name: nginx image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2 ports: - containerPort: 80
查看Pod详情,确认Pod的实际规格。
kubectl get pod kubectl describe pod <pod-name>
在Pod详情的
Annotations
中可以看到Pod的实际规格为4 vCPU,10 GiB内存。在Pod详情的
Events
中可以看到相关事件。