工作負載親和/反親和調度概述
在Kubernetes中,工作負載親和/反親和調度允許您根據現有Pod的標簽和拓撲域(如節點、可用區等)來調度新的Pod。這有助于優化資源利用、減少網絡延遲和提高應用性能。
拓撲域
拓撲域是通過節點的標簽(topologyKey)來定義的。例如,kubernetes.io/hostname可以將每個節點視為一個獨立的拓撲域,而failure-domain.beta.kubernetes.io/zone則可以將每個可用區視為一個拓撲域。
調度策略類型
負載親和:
不配置:默認行為,不進行特殊調度。
優先多可用區部署:通過Pod反親和策略,盡量將Pod分散到不同的可用區。
強制多可用區部署:強制將Pod分散到不同的可用區,如果無法滿足,則Pod無法調度。
自定義親和策略:根據Pod標簽實現靈活的調度策略。
自定義親和策略:
工作負載親和性:
必須滿足(硬約束):如果滿足條件的Pod已經存在于某個拓撲域,則新Pod必須調度到該拓撲域。
盡量滿足(軟約束):如果滿足條件的Pod已經存在于某個拓撲域,則新Pod優先調度到該拓撲域,但不是必須的。
工作負載反親和性:
必須滿足(硬約束):如果滿足條件的Pod已經存在于某個拓撲域,則新Pod不能調度到該拓撲域。
盡量滿足(軟約束):如果滿足條件的Pod已經存在于某個拓撲域,則新Pod盡量不調度到該拓撲域,但不是必須的。
策略設置參數說明
參數 用途 說明 權重(Weight) 在“盡量滿足”(Preferred)策略中,權重用于評估節點對Pod的適合程度。 取值范圍:1-100
調度器會計算每個節點的總評分,該評分由節點的其他優先級函數評分和此權重附加的評分相加得出。Pod將被調度到總評分最高的節點上。命名空間(Namespace) 指定調度策略生效的命名空間。 調度策略將僅應用于指定命名空間內的Pod和節點。 拓撲域(Topology Domain) 通過節點的標簽和標簽值定義調度的節點范圍。 使用topologyKey(如kubernetes.io/hostname或kubernetes.io/os)來劃分拓撲域。
kubernetes.io/hostname:每個節點是一個獨立的拓撲域,適用于單個節點級別的親和性調度。
kubernetes.io/os:具有相同操作系統的節點屬于同一拓撲域,適用于將多個節點作為一個整體進行調度。
標簽名(Label Name) 設置工作負載親和/反親和性時,指定需要匹配的Pod標簽。 調度器將查找具有指定標簽名的Pod,并根據親和/反親和規則進行調度。 操作符(Operator) 定義標簽匹配關系。 取值范圍:
In:Pod的標簽值在指定的標簽值列表中。
NotIn:Pod的標簽值不在指定的標簽值列表中。
Exists:Pod存在指定的標簽名。
DoesNotExist:Pod不存在指定的標簽名。
標簽值(Label Value) 設置工作負載親和/反親和性時,指定Pod標簽對應的值。 與標簽名和操作符一起使用,用于確定Pod是否符合親和/反親和規則。
配置負載親和/反親和調度策略
進入創建負載的頁面,在高級配置中,選擇調度策略,在負載親和配置中,添加親和與反親和策略。
例如,將新創建的前端應用(附帶app=frontend標簽)負載分散調度,同時與后端應用(附帶app=backend標簽)盡量部署到同個zone同一個節點,在負載親和配置中通過kubernetes.io/hostname拓撲域,每個這樣的域僅包含一個節點,在執行工作負載親和性調度時,可以確保將它們盡量部署到同一節點上;通過topology.kubernetes.io/zone拓撲域,將前后端的負載部署到同個zone。在負載反親和配置中,通過topology.kubernetes.io/zone拓撲域,將前端負載分散到不同的zone,通過kubernetes.io/hostname拓撲域,盡量將前端負載分散到不同的節點上。