配置资源规整时忽略特定容器

创建ECI Pod(即ECI实例)时,如果指定的vCPU和内存规格不满足ECI规格约束,系统会在满足资源需求的同时自动向最接近的ECI规格进行资源规整,规整后的规格过大可能会造成一定程度的资源浪费。对于一些不影响业务的容器(例如Sidecar容器),可以为其设置环境变量,实现资源规整时忽略该容器,以避免资源浪费,节约ECI使用成本。

功能说明

指定vCPU和内存创建ECI实例时,您可以自定义指定每个容器的vCPU和内存,但汇总到实例级别时,需满足ECI实例整体的vCPU和内存约束。如果实例级别没有配置vCPU和内存,则会汇总计算所有容器的规格之和,对于总和不满足ECI规格的情况,系统会自动进行资源规整。

资源规整2

一般情况下,容器内指定的vCPU和内存为容器资源上限,实际运行实例时,系统会动态调整资源分配。因此对于实例内一些不影响业务的特定容器,您可以通过设置环境变量__ECI_RESOURCE_IGNORE__:TRUE的方式,实现实例资源规整时忽略这些容器,避免资源规整后创建的实例规格过大,出现资源浪费。

示例如下:

资源规整

如上图所示,假设在华东1(杭州)地域创建一个ECI实例,该ECI实例包含3个容器,容器1和2(业务容器)均配置为2 vCPU、4 GiB内存,容器3(Sidecar容器)配置为0.25 vCPU、0.5 GiB内存。一般情况下,系统会自动将实例规格规整到6 vCPU、10 GiB内存。但实际情况下可能并不需要6 vCPU、10 GiB的资源,在不影响业务的基础上,您可以为Sidecar容器设置环境变量__ECI_RESOURCE_IGNORE__:TRUE。配置后,系统会忽略Sidecar容器,将实例规格规整到4 vCPU、8GiB内存。

配置说明

为ECI Pod内的容器设置以下环境变量可以配置ECI资源规整忽略该容器:

env: 
- name: "__ECI_RESOURCE_IGNORE__"
  value: "TRUE"

配置示例

按以下YAML创建Deployment,每个ECI Pod的规格为2 vCPU、4 GiB内存,即采用nginx1容器的limits,忽略nginx2容器的limits。

说明

如果nginx2容器没有设置环境变量__ECI_RESOURCE_IGNORE__:TRUE,汇总nginx1容器和nginx2容器的资源需求为3 vCPU、6 GiB。在华东1(杭州)地域创建该Deployment时,资源规整后实际创建的ECI Pod为4 vCPU、6 GiB内存。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
    spec:
      containers:
      - name: nginx1
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        resources:
          limits:
            cpu: "2000m"    
            memory: "4096Mi"   
      - name: nginx2
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        resources:
          limits:
            cpu: "1000m"    
            memory: "2048Mi"   
        env: 
        - name: "__ECI_RESOURCE_IGNORE__"
          value: "TRUE"
      restartPolicy: Always