Kubernetes的Pod調度算法

Kubernetes的Pod調度算法

在本文檔中,解釋了如何為Pod選擇節點的算法。在選擇Pod的目標節點之前有兩個步驟。第一步是過濾所有節點(預選),第二步是對剩余節點進行排名(優選),以找到最適合Pod的節點。

預選

預選的目的是過濾掉不滿足Pod某些要求的節點。例如,如果節點上的空閑資源(通過容量減去已經在節點上運行的所有Pod的資源請求的總和來測量)小于Pod的所需資源,則不應在優選階段考慮該節點打分排名,就被過濾掉了。目前,有幾個“預選策略”實現了不同的過濾策略

  • NoDiskConflict 檢查pod請求的卷以及已掛載的卷存在沖突。如果這個主機已經掛載了卷,其它同樣使用這個卷的Pod不能調度到這個主機上。目前支持的卷包括:AWS EBS,GCE PD,ISCSI和Ceph RBD。僅檢查這些受支持類型的持久卷聲明。直接添加到pod的持久卷不會被評估,也不受此策略的約束。
  • NoVolumeZoneConflict 檢查給定的zone限制前提下,檢查如果在此主機上部署Pod是否存在卷沖突。
  • PodFitsResources 檢查可用資源(CPU和內存)是否滿足Pod的要求。測量空閑資源是通過節點容量減去節點上所有Pod的請求總和。要了解有關Kubernetes中資源QoS的更多信息,請查看QoS提議。
  • PodFitsHostPorts 檢查Pod所需的任何HostPort是否已在節點上占用
  • HostName 篩選出除PodSpec的``NodeName字段中指定的節點之外的所有節點 簡單來說就是檢查主機名稱是不是Pod指定的HostName`
  • MatchNodeSelector 檢查節點的標簽是否與Pod的nodeSelector字段中指定的標簽匹配,并且從Kubernetes v1.2開始,也匹配nodeAffinityif present。有關兩者的詳細信息,請參見此處
  • MaxEBSVolumeCount 確保掛載的ElasticBlockStore卷的數量不超過最大值(默認情況下為39,因為Amazon建議最多40個,其中40個為根卷保留其中一個 - 請參閱Amazon的文檔)。可以通過設置KUBE_MAX_PD_VOLS環境變量來控制最大值。
  • MaxGCEPDVolumeCount 確保掛載的GCE PersistentDisk卷的數量不超過最大值(默認情況下,16,這是GCE允許的最大值 - 請參閱GCE的文檔)??梢酝ㄟ^設置KUBE_MAX_PD_VOLS環境變量來控制最大值。
  • CheckNodeMemoryPressure 檢查是否可以在提示memory pressure的節點上安排pod。目前,BestEffort這種Qos等級的pod不能被調度到 memory pressure的節點上,因為它會被kubelet自動驅逐。
  • CheckNodeDiskPressure 檢查是否可以在提示disk pressure節點上安排Pod。目前,Pod不會被調度在disk pressure`節點上,因為它會被kubelet自動驅逐。

上述預選的詳細信息可以在pkg / scheduler / algorithm / predicates / predicates.go中找到。上面提到的所有策略可以組合使用以執行復雜的過濾策略。默認情況下,Kubernetes使用這些謂詞中的一些,但不是全部。您可以在pkg / scheduler / algorithmprovider / defaults / defaults.go中查看默認使用的。

優選

預選節點被認為適合托管Pod,并且通常存在多個節點。Kubernetes優先考慮這些節點,以找到Pod的“最佳”節點。優先級由一組優先級函數執行。對于每一個節點,優先級函數給出從0-10開始的分數,其中10代表“最優選”,0代表“最不優選”。每個優先級函數由正數加權,每個節點的最終得分通過將所有加權得分相加來計算。例如,假設有兩個優先級的功能,priorityFunc1priorityFunc2與加權系數weight1weight2分別一些NodeA上的最后得分是:

finalScoreNodeA = (weight1 * priorityFunc1) + (weight2 * priorityFunc2)

在計算所有節點的分數之后,選擇具有最高分數的節點作為Pod的主機。如果存在多個具有相同最高分數的節點,則選擇其中的隨機節點。

目前,Kubernetes調度程序提供了一些實用的優先級功能,包括:

  • LeastRequestedPriority:如果新的pod要分配給一個節點,這個節點的優先級就由節點空閑的那部分與總容量的比值(即(總容量-節點上pod的容量總和-新pod的容量)/總容量)來決定。CPU和內存的權重相等,比值最大的節點的得分最高。需要注意的是,這個優先級函數起到了按照資源消耗來跨節點分配pods的作用。計算公式如下:
score = cpu((capacity – sum(requested)) * 10 / capacity) + memory((capacity – sum(requested)) * 10 / capacity) / 2
  • BalancedResourceAllocation:盡量選擇在部署Pod后各項資源更均衡的機器,計算公式如下:
score = 10 – abs(cpuFraction-memoryFraction)*10
  • SelectorSpreadPriority:對于屬于同一個service、replication controller的Pod,盡量分散在不同的主機上。如果指定了區域,則會盡量把Pod分散在不同區域的不同主機上
  • CalculateAntiAffinityPriority:對于屬于同一個service的Pod,盡量分散在不同的具有指定標簽的主機上
  • ImageLocalityPriority:根據主機上是否已具備Pod運行的環境來打分。ImageLocalityPriority會判斷主機上是否已存在Pod運行所需的鏡像,根據已有鏡像的大小返回一個0-10的打分。如果主機上不存在Pod所需的鏡像,返回0;如果主機上存在部分所需鏡像,則根據這些鏡像的大小來決定分值,鏡像越大,打分就越高。
  • NodeAffinityPriority:(Kubernetes v1.2)Kubernetes調度中的親和性機制。Node Selectors(調度時將pod限定在指定節點上),支持多種操作符(In, NotIn, Exists, DoesNotExist, Gt, Lt),而不限于對節點labels的精確匹配。
    另外,Kubernetes支持兩種類型的選擇器:
    一種是“hard(requiredDuringSchedulingIgnoredDuringExecution)”選擇器,它保證所選的主機必須滿足所有Pod對主機的規則要求。這種選擇器更像是之前的nodeselector,在nodeselector的基礎上增加了更合適的表現語法。
    另一種是“soft(preferresDuringSchedulingIgnoredDuringExecution)”選擇器,它作為對調度器的提示,調度器會盡量但不保證滿足NodeSelector的所有要求。
    Kubernetes調度中的親和性機制請看這里了解更多詳情。

參考文檔:

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-scheduling/scheduler_algorithm.md

https://blog.csdn.net/WaltonWang/article/details/54604392

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容

  • kubernets中負責pod調度的重要模塊是kube-schduler。kube-scheduler就是調度安排...
    ywhu閱讀 3,348評論 0 4
  • 1、基礎架構 1.1 Master Master節點上面主要由四個模塊組成:APIServer、scheduler...
    阿斯蒂芬2閱讀 10,902評論 0 44
  • 一、 K8s 是什么? Kubernetes(k8s)是自動化容器操作的開源平臺,這些操作包括部署,調度和節點集群...
    loveroot閱讀 6,654評論 1 21
  • 其實對于過節除了可以偷懶之外,沒有可期待的 最怕 過節時別人來一句 呀 你咋沒有回家啊 對于多年的留守少女來說...
    胡愛琉閱讀 192評論 0 0
  • 行者順達 秋涼菊黃換夏芳 人憂心重無心賞 情牽中秋千里歸 娘親門口等兒郎
    行者順達閱讀 235評論 7 2