预留系统开销

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均不会生效。

配置示例

  1. 创建一个开启系统开销预留的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
  2. 查看Pod详情,确认Pod的实际规格。

    kubectl get pod
    kubectl describe pod <pod-name>

    在Pod详情的Annotations中可以看到Pod的实际规格为4 vCPU,10 GiB内存。

    系统开销-k8s-.png

    在Pod详情的Events中可以看到相关事件。

    系统开销-k8s.png