創建ECI Pod(即ECI實例)時,如果指定的vCPU和內存規格不滿足ECI規格約束,系統會在滿足資源需求的同時自動向最接近的ECI規格進行資源規整,規整后的規格過大可能會造成一定程度的資源浪費。對于一些不影響業務的容器(例如Sidecar容器),可以為其設置環境變量,實現資源規整時忽略該容器,以避免資源浪費,節約ECI使用成本。
功能說明
指定vCPU和內存創建ECI實例時,您可以自定義指定每個容器的vCPU和內存,但匯總到實例級別時,需滿足ECI實例整體的vCPU和內存約束。如果實例級別沒有配置vCPU和內存,則會匯總計算所有容器的規格之和,對于總和不滿足ECI規格的情況,系統會自動進行資源規整。
一般情況下,容器內指定的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