天天看點

#yyds幹貨盤點#K8S-節點 /Pod 親和排程

節點親和是排程程式用來确定 Pod 對象排程位置(哪個或哪類節點)的排程法則,這些規則基于節點上的自定義标簽和 Pod 對象上指定的标簽選擇器進行定義,而支援這種排程機制的有 NodeName 和 NodeAffinity 排程插件。

在 Pod 上定義節點親和規則時有兩種類型的節點親和關系:強制(required)親和和首選(preferred)親和,或分别稱為硬親和與軟親和。強制親和限定了排程 Pod 資源時必須要滿足的規則,無可用節點時 Pod 對象會被置為 Pending 狀态,直到滿足規則的節點出現。相比較來說,首選親和規則實作的是一種柔性排程限制,它同樣傾向于将 Pod 運作在某類特定的節點之上,但無法滿足排程需求時,排程器将選擇一個無法比對規則的節點,而非将 Pod 置于 Pending 狀态。

多個軟親和條件并存時,它還支援為每個條件定義 weight 屬性以差別它們優先級,取值範圍是 1~100,數字越大優先級越高。

在 Pod 規範上定義節點親和規則的關鍵點有兩個:一是給節點規劃并配置合乎期望的标簽;二是為 Pod 對象定義合理的标簽選擇器。

Pod 資源可以使用.spec.nodeName 直接指定要運作的目标節點,也可以基于.spec.nodeSelector 指定的标簽選擇器過濾符合條件的節點作為可用目标節點,最終選擇則基于打分機制完成。

Pod 規範中的.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution 字段用于定義節點的強制親和關系,它的值是一個對象清單,可由一到多個 nodeSelectorTerms 對象組成,彼此間為“邏輯或”關系。nodeSelectorTerms 用于定義節點選擇器,其值為對象清單,它支援 matchExpressions 和 matchFields 兩種複雜的表達機制。

繼續閱讀