建立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