在ACK叢集中部署服務時,您可以使用容忍度和節點親和性來聲明只使用ECS或ECI彈性資源,或者是在ECS資源不足時自動申請ECI資源。通過配置調度策略,您可以在不同工作負載情境下實現對彈性資源的不同需求。
相關概念
汙點:ACK叢集中的Virtual Node預設都會打上汙點
virtual-kubelet.io/provider=alibabacloud:NoSchedule
,以避免您在不知情的情況下使用ECI彈性資源。容忍度:容忍度(Toleration)應用於Pod上。容忍度允許調度器將該Pod調度到帶有對應汙點的Node。在ACK叢集中,需要配置以下Toleration來容忍汙點
virtual-kubelet.io/provider=alibabacloud:NoSchedule
,才能讓Pod使用ECI資源。tolerations: - key: virtual-kubelet.io/provider operator: Equal value: alibabacloud effect: NoSchedule
節點親和性:節點親和性(nodeAffinity)規定了Pod調度時的軟需求或者偏好,且在這種偏好不被滿足時成功調度該Pod到其他節點。
前提條件
已在ACK叢集Pro版中部署ack-virtual-node。具體操作,請參見ACK使用ECI。
已在ACK叢集Pro版中啟用虛擬節點的調度策略。具體操作,請參見開啟叢集虛擬節點調度策略。
操作步驟
下文將介紹如何通過汙點、容忍度、節點親和性完成以下調度策略:
只使用ECI:只使用ECI彈性資源,不使用叢集的ECS資源。
優先使用ECS:當前叢集ECS資源不足時,使用ECI彈性資源。
只使用ECS:只使用叢集現有的ECS資源。
只使用ECI
優先使用ECS
當您希望將負載優先部署在帶有標籤label_1=key_1的ECS節點池上,且該節點池資源不足時使用virtual-node進行Auto Scaling時,可以通過以下方式部署。
如果您在與nodeAffinity類型關聯的nodeSelectorTerms中指定多個條件,只要其中一個nodeSelectorTerms滿足(各個條件按邏輯或操作組合)時,Pod就可以被調度到節點上。
如果您在與nodeSelectorTerms中的條件相關聯的單個matchExpressions欄位中指定多個運算式,則只有當所有運算式都滿足(各運算式按邏輯與操作組合)時,Pod才能被調度到節點上。
使用preferredDuringSchedulingIgnoredDuringExecution實現優先ECS調度時,不能保證僅在ECS資源不足時才調度到ECI上。也會存在ECS資源充足的情況下,Pod也會被調度到ECI上的情境。
只使用ECS
為了避免您使用價格較為昂貴的ECI執行個體,Virtual Node預設有汙點(Taints)。
virtual-kubelet.io/provider=alibabacloud:NoSchedule
因此,只要您未配置對於該汙點的容忍度,Pod將只調度到ECS上。