kubernetes實踐之四十九:Scheduler原理分析

百聯達發表於2018-05-29
一: 簡介


1.Kubernetes  scheduler在整個系統中承擔了“承上啟下”的重要功能,“承上是指它負責接收Controller Manager創新的新Pod,為其安排一個落腳的Node;  "啟下"是指安置工作完成後,目標Node上的kubelet服務程式接管後繼工作。

2.Kubernetes scheduler的作用是將待排程的Pod,按照特定的排程演算法和排程策略繫結到叢集中的某個合適的Node上,並將繫結資訊寫入etcd中,在整個排程過程中涉及三個物件,分別是:待排程Pod列表,可用Node列表,以及排程演算法和策略。

3.目標節點上的kubelet通過API Server監聽到Kubernetes scheduler 產生的Pod繫結事件,然後獲取對應的Pod清單,下載Image映象,並啟動容器。

二:排程流程

1.預先排程過程,即遍歷所有目標Node,篩選出符合要求的候選節點。

2.確定最優節點,在第1步的基礎上,採用優選策略計算出每個候選節點的積分,積分最高者勝出。

三:預選策略

1. NoDiskConflict
判斷備選Pod的gcePersistentDisk或AWSElasticBlockStore和備選的節點中已存在的Pod是否存在衝突。

2.PodFitsResources
判斷備選節點的資源是否滿足備選Pod的需求。

3.PodSelectorMathes
判斷備選節點是否包含備選Pod的標籤選擇器指定的標籤。

4.PodFitsHost
判斷備選Pod的spec.nodeName域所指定的節點名稱和備選節點的名稱是否一致。如果一致,則返回true,否則返回false.

5.CheckNodeLabelPresence
如果使用者在配置檔案中指定了該策略,則scheduler會通過RegisterCustomFitPredicate方法註冊該策略。

6.CheckServiceAffinity
該策略用於判斷備選節點是否包含策略指定的標籤,或包含和備選Pod在相同Service和Namespace下的Pod所在節點的標籤列表。 如果存在,則返回true,否則返回false.

7.PodFitsPorts

判斷備選Pod所用的埠列表中的埠是否在被選中已被佔用,如果被佔用則返回false,否則返回true

四:優選策略

1.LeastRequestedPriority
從備選節點列表中選出資源消耗最小的節點。

2.CalculateNodeLabelPriority
該策略用於判斷策略列出的標籤在備選節點中存在時,是否選擇該備選節點。

3.BalancedResourceAllocation
從備選節點列表中選出各項資源使用率最均衡的節點。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2155294/,如需轉載,請註明出處,否則將追究法律責任。

相關文章