kubernetes scheduler 基本原理
kubernetes scheduler 作為乙個單獨的程序部署在 master 節點上,它會 watch kube-apiserver 程序去發現 podspec.nodename 為空的 pod,然後根據指定的演算法將 pod 排程到合適的 node 上,這一過程也叫繫結(bind)。scheduler 的輸入是需要被排程的 pod 和 node 的資訊,輸出是經過排程演算法篩選出條件最優的 node,並將該 pod 繫結到這個 node 上。如下圖所示:
scheduler 排程演算法分為兩個階段:
預選 (predicates)
根據predicates策略去濾掉不符合 policies 的 node.
優選 (priorities)
經過 predicates 剩下的 node,需要經過priorities 策略選出乙個最優的 node,並將 pod 繫結到該 node 上。根據下面這張排程圖詳細描述下
1. 首先 scheduler 根據 predicates 集合過濾掉不符合的 node。例如,如果 podspec 指定的請求資源 (resource requests),那麼 scheduler 會過濾掉沒有足夠資源的 node。
2. 其次 scheduler 會根據 priority functions 集合從 predicates 中過濾出來的 node 中,選出乙個最優的 node。
演算法實現:
對每乙個 node, priority functions 會計算出乙個 0-10 之間的數字,表示 pod 放到該 node 的合適程度,其中 10 表示非常合適,0 表示不合適,priority functions 集合中的每乙個函式都有乙個權重 (weight),最終的值為 weight 和 priority functions 的乘積,而乙個節點的 weight 就是所有 priority functions 結果的加和。例如,有兩個 priority functions: priorityfunc1 和 priorityfunc2,對應的 weight 分別為 weight1 和 weight2,那麼 nodea 的最終得分是:
3. 最終,得分最高的 node 勝出(如果有多個得分相同的 node,會隨機的選取乙個 node 作為最終勝出的 node)。
k8s元件介紹
master 管理節點 api server 供kubernetes api介面,主要處理 rest操作以及更新etcd中的物件。所有資源增刪改查的唯一入口。scheduler 繫結pod到node上,資源排程。controller manager 所有其他群集級別的功能,目前由控制器manager...
K8S各個元件介紹
k8s集群架構 乙個k8s集群是由兩大部分組成 master節點和node節點 一.master節點主要包括api server scheduler controller manager etcd幾大元件 1.api server 提供其他模組之間的資料互動和通訊的樞紐 其他模組通過api serv...
k8s元件核心流程介紹
master kube apiserver kube controller manager kube scheduler node kubelet proxy 1 基礎知識 api version api groups 目前,有幾個api groups在使用 包括 pod replicationco...