kubernetes之Scheduler原理分析

scheduler在整個系統承擔了承上啓下的重要功能node

承上值負責接受Controller Manager建立新的pod,安排目標Node算法

旗下指安置工做完成後,目標Node上的kubelet服務進程接管後續工做,負責pod生命週期下半生。ide

kubernetes Scheduler做用是將待調度的pod,按照特定的調度算法和調度策略綁定到集羣中合適的Node上,並將綁定信息寫入etcd中。整個調度過程涉及三個對象。分別是待調度Pod列表,可用Node列表,以及調度算法和策略。簡單地說,就是經過調度算法爲待調度pod列表地每一個pod從Node裏欸報中選擇一個最合適的Node對象

默認調度流程生命週期

(1)預選調度過程,即遍歷全部目標node,篩選出符合要求的候選節點。內置了多種預選策略。進程

(2)肯定最優節點,在第一步的基礎上,採用優選策略計算每一個候選節點的積分,分高者勝出。資源

Scheduler中可用的預選策略包含:NoDiskConflict,PodFitsResources,PodSelectorMatches,PodFitsHost,CheckNodeLabelPresence,CheckServiceAffinity和PodFitsPorts策略等。其默認的AlgorithmProvider加載的預選策略predicates包括:PodFitsPorts、PodFitsResources、NoDiskConflict、MatchNodeSelector和HostName每一個節點只有經過前面說起的5個默認預選策略後,才能初步被選中,進入下一個流程。kubernetes

1)NoDiskConflictit

判斷備選pod的GCEPersistentDisk或AWSElasticBlockStore和備選的節點中已存在的Pod是否存在衝突。io

讀取備選pod的全部Volume信息

若是Volume是GCEPersistenDisk,將Volume和備選節點上的全部pod每一個Volume比較,相同的返回false,代表磁盤衝突。

若是全部Volume均爲發現衝突,返回true。

2)FodFitsResources

判斷節點的資源是否知足備選pod的需求

計算pod全部容器的需求資源中和,獲取備選節點狀態信息,包含資源信息。若是節點資源超過需求資源,返回true。不然返回false。

3)PodSelectorMatches

判斷備選節點是否包含備選pod的標籤選擇器指定的標籤

若是pod沒有指定spec.nodeSelector標籤選擇器,返回true

不然,獲取備選節點的標籤西悉尼,若是包含pod的標籤選擇器,返回true,不然返回false

4)PodFitsHost

判斷備選pod的spec.nodeName域所指定的節點名稱和備選節點名稱是否一致,若是一致true不然false

5)CheckNodeLabelPresence

6)CheckServiceAffinity

7) PodFitsPorts

判斷備選pod所用端口是否在備選節點中被佔用,若是被佔用,返回false,不然true

Scheduler優選策略包括LeastRequestedPriority、CalculateNodeLabelPriority和BalancedResourceAllocation等。

相關文章
相關標籤/搜索