揭開K8S排程演算法的神秘面紗

2021-10-05 17:22:18 字數 1384 閱讀 2441

我在前幾期的部落格中搭建出了k8s集群,其中只有兩個node節點。然而在真正的生產環境中可不止兩個node節點,如何合理的分配伺服器資源、提高利用率、讓整個集群執行的更加穩定使得scheduler這個角色在集群中的地位愈發重要。

api-server會將建立pod的請求傳送給kube-scheduler,並且將pod資訊記錄在etcd資料庫中。之後kube-scheduler會根據預選(過濾)規則,首先過濾掉一部分node節點中的pod,沒有被過濾掉的pod可以看做是可以被排程的pod,之後再通過更加嚴格的規則給剩下的pod打分,這一步也叫作優選。打分最高的pod可以看做被優先分配到pod任務。

(一)、建立pod的命令被api-server的api介面接收到。api-server將pod資訊儲存在etcd資料庫中。

(二)、kube-scheduler通過api-server檢視有哪些可用的pod。

(三)、kube-scheduler通過一組演算法過濾掉一部分不可用的pod或者node節點。

(四)、kube-scheduler再通過更加嚴格的打分機制對所有的可用pod進行打分。

(五)、通過打分選出分數最高的pod,並將pod進行繫結之後儲存在etcd中。

(六)、node節點的kubelet接收到api-server指令進行pod建立。

kube-scheduler首先通過以下規則對所有node節點或者pod進行初步的過濾。

在經過重重過濾之後,剩下的都是k8s集群可用的pod和node節點。之後kube-scheduler會根據另一套規則給每個節點和待分配的pod進行打分。

1.首先可用的node和pod會被打分函式進行打分,分數在0-10分之間。並且每個打分函式還有乙個權重值。那麼乙個可用的node節點最後的總分就是:σ函式打分*函式的權重值。

列如:node節點總分=(函式1的打分 * 函式1權重值)+......+(函式n的打分 * 函式n的權重值)
2.打分函式即優先順序函式的種類:

這裡只介紹了一部分的優先順序函式演算法,還有許多演算法在這裡未解釋有興趣的小夥伴可以上網查一下哦。

kube-scheduler元件將整個集群資源調配變得很科學。比如該如何分配pod的副本到其他的node節點中,或者如何分配pod使得集群運轉的更加高效。此外kube-scheduler還支援第三方的排程器進行擴充套件,所以是一種外掛程式化的實現。

K8s排程演算法註冊流程

我的k8s集群是二進位制搭建的,因此我在二進位制檔案中新增我的排程演算法,並且在相關檔案中註冊我的演算法。在kubernetes server二進位制檔案中 kubernetes pkg scheduler下有algorithm 和 algorithmprovider兩個模組 algorithm模組...

k8s排程 原理 K8s排程原理和Pod生命週期

1 k8s排程原理 pod只存在某乙個物理節點上,可以執行多個container 2 pod的生命週期 暫停pod,可以暫停deployment kubectl get depolyment kubectl scale replicas 0 deployment 刪除pod。刪除之後,狀態變成suc...

k8s 指定排程節點

pod.spec.nodename將 pod 直接排程到指定的 node 節點上,會跳過 scheduler 的排程策略,該匹配規則是強制匹配 我的節點 root master scheduler kubectl get node name status roles age version mast...