指定ECS和ECI的資源分配
在ACK集群中部署服務(wù)時,您可以使用容忍度和節(jié)點(diǎn)親和性來聲明只使用ECS或ECI彈性資源,或者是在ECS資源不足時自動申請ECI資源。通過配置調(diào)度策略,您可以在不同工作負(fù)載場景下實(shí)現(xiàn)對彈性資源的不同需求。
相關(guān)概念
污點(diǎn):ACK集群中的Virtual Node默認(rèn)都會打上污點(diǎn)
virtual-kubelet.io/provider=alibabacloud:NoSchedule
,以避免您在不知情的情況下使用ECI彈性資源。容忍度:容忍度(Toleration)應(yīng)用于Pod上。容忍度允許調(diào)度器將該P(yáng)od調(diào)度到帶有對應(yīng)污點(diǎn)的Node。在ACK集群中,需要配置以下Toleration來容忍污點(diǎn)
virtual-kubelet.io/provider=alibabacloud:NoSchedule
,才能讓Pod使用ECI資源。tolerations: - key: virtual-kubelet.io/provider operator: Equal value: alibabacloud effect: NoSchedule
節(jié)點(diǎn)親和性:節(jié)點(diǎn)親和性(nodeAffinity)規(guī)定了Pod調(diào)度時的軟需求或者偏好,且在這種偏好不被滿足時成功調(diào)度該P(yáng)od到其他節(jié)點(diǎn)。
前提條件
已在ACK集群Pro版中部署ack-virtual-node。具體操作,請參見ACK使用ECI。
已在ACK集群Pro版中啟用虛擬節(jié)點(diǎn)的調(diào)度策略。具體操作,請參見開啟集群虛擬節(jié)點(diǎn)調(diào)度策略。
操作步驟
下文將介紹如何通過污點(diǎn)、容忍度、節(jié)點(diǎn)親和性完成以下調(diào)度策略:
只使用ECI:只使用ECI彈性資源,不使用集群的ECS資源。
優(yōu)先使用ECS:當(dāng)前集群ECS資源不足時,使用ECI彈性資源。
只使用ECS:只使用集群現(xiàn)有的ECS資源。
只使用ECI
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-only
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
tolerations:
- key: virtual-kubelet.io/provider
operator: Equal
value: alibabacloud
effect: NoSchedule
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: In
values:
- virtual-kubelet
containers:
- name: my-container
image: nginx
優(yōu)先使用ECS
apiVersion: apps/v1
kind: Deployment
metadata:
name: ecs-prefer
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
tolerations:
- key: virtual-kubelet.io/provider
operator: Equal
value: alibabacloud
effect: NoSchedule
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: type
operator: NotIn
values:
- virtual-kubelet
containers:
- name: my-container
image: nginx
當(dāng)您希望將負(fù)載優(yōu)先部署在帶有標(biāo)簽label_1=key_1的ECS節(jié)點(diǎn)池上,且該節(jié)點(diǎn)池資源不足時使用virtual-node進(jìn)行彈性伸縮時,可以通過以下方式部署。
apiVersion: apps/v1
kind: Deployment
metadata:
name: some-ecs-prefer
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
tolerations:
- key: virtual-kubelet.io/provider
operator: Equal
value: alibabacloud
effect: NoSchedule
affinity:
nodeAffinity:
# 指定Pod必須調(diào)度到帶有l(wèi)abel_1:key_1或type:virtual-kubelet標(biāo)簽的節(jié)點(diǎn)上。
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: label_1
operator: In
values:
- key_1
- matchExpressions:
- key: type
operator: In
values:
- virtual-kubelet
# 指定Pod優(yōu)先調(diào)度到帶有l(wèi)abel_1:key_1標(biāo)簽的節(jié)點(diǎn)上。
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: label_1
operator: In
values:
- key_1
- weight: 1
preference:
matchExpressions:
- key: type
operator: In
values:
- virtual-kubelet
containers:
- name: my-container
image: nginx
如果您在與nodeAffinity類型關(guān)聯(lián)的nodeSelectorTerms中指定多個條件,只要其中一個nodeSelectorTerms滿足(各個條件按邏輯或操作組合)時,Pod就可以被調(diào)度到節(jié)點(diǎn)上。
如果您在與nodeSelectorTerms中的條件相關(guān)聯(lián)的單個matchExpressions字段中指定多個表達(dá)式,則只有當(dāng)所有表達(dá)式都滿足(各表達(dá)式按邏輯與操作組合)時,Pod才能被調(diào)度到節(jié)點(diǎn)上。
使用preferredDuringSchedulingIgnoredDuringExecution實(shí)現(xiàn)優(yōu)先ECS調(diào)度時,不能保證僅在ECS資源不足時才調(diào)度到ECI上。也會存在ECS資源充足的情況下,Pod也會被調(diào)度到ECI上的場景。
只使用ECS
為了避免您使用價格較為昂貴的ECI實(shí)例,Virtual Node默認(rèn)有污點(diǎn)(Taints)。
virtual-kubelet.io/provider=alibabacloud:NoSchedule
因此,只要您未配置對于該污點(diǎn)的容忍度,Pod將只調(diào)度到ECS上。
apiVersion: apps/v1
kind: Deployment
metadata:
name: ecs-only
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx