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等。