排程器工程 如何開發乙個排程器

2021-10-11 08:36:09 字數 1762 閱讀 4732

k8s擴充套件排程的方式:(1)scheduler-extender (2)scheduler-framework

傳統的scheduler-extender的缺陷:

scheduler-framework:在原有的排程流程基礎之上提供了多種豐富的擴充套件點介面,不需要進行http進行通訊,本身就是乙個「預設排程器」+「擴充套件點」編譯在乙個二進位制檔案裡。

之所以叫framework就是不用開發者去手動實現乙個排程器了,只需要根據自己的需求新增擴充套件點即可。

prefilter 在 scheduling cycle 開始時就被呼叫,只有當所有的 prefilter 外掛程式都返回 success 時,才能進入下乙個階段,否則 pod 將會被拒絕掉,標識此次排程流程失敗。prefilter 類似於排程流程啟動之前的預處理,可以對 pod 的資訊進行加工。同時 prefilter 也可以進行一些預置條件的檢查,去檢查一些集群維度的條件,判斷否滿足 pod 的要求。

3)filter

filter 外掛程式是 scheduler v1 版本中的 predicate 的邏輯,用來過濾掉不滿足 pod 排程要求的節點。為了提公升效率,filter 的執行順序可以被配置,這樣使用者就可以將可以過濾掉大量節點的 filter 策略放到前邊執行,從而減少後邊 filter 策略執行的次數,例如我們可以把 nodeselector 的 filter 放到第乙個,從而過濾掉大量的節點。node 節點執行 filter 策略是併發執行的,所以在同一排程週期中多次呼叫過濾器。

4)postfilter

新的 postfilter 的介面定義在 1.19 的版本會發布,主要是用於處理當 pod 在 filter 階段失敗後的操作,例如搶占,autoscale 觸發等行為。

5)prescore

prescore 在之前版本稱為 postfilter,現在修改為 prescore,主要用於在 score 之前進行一些資訊生成。此處會獲取到通過 filter 階段的節點列表,我們也可以在此處進行一些資訊預處理或者生成一些日誌或者監控資訊。

6)scoring

scoring 擴充套件點是 scheduler v1 版本中 priority 的邏輯,目的是為了基於 filter 過濾後的剩餘節點,根據 scoring 擴充套件點定義的策略挑選出最優的節點。scoring 擴充套件點分為兩個階段:

打分:打分階段會對 filter 後的節點進行打分,scheduler 會呼叫所配置的打分策略

歸一化: 對打分之後的結構在 0-100 之間進行歸一化處理

7)reserve

reserve 擴充套件點是 scheduler v1 版本的 assume 的操作,此處會對排程結果進行快取,如果在後邊的階段發生了錯誤或者失敗的情況,會直接進入 unreserve 階段,進行資料回滾。

8)permit

permit 擴充套件點是 framework v2 版本引入的新功能(延遲排程),當 pod 在 reserve 階段完成資源預留之後,bind 操作之前,開發者可以定義自己的策略在 permit 節點進行攔截,根據條件對經過此階段的 pod 進行 allow、reject 和 wait 的 3 種操作。allow 表示 pod 允許通過 permit 階段。reject 表示 pod 被 permit 階段拒絕,則 pod 排程失敗。wait 表示將 pod 處於等待狀態,開發者可以設定超時時間。

通過permit可以實現gangscheduler。具體可檢視部落格

CFS排程器(一)

關於排程類和優先順序的概念,前面的文章 排程器概述 中已經做了介紹了,本文不在重述。本文主要關注的就是cfs排程器,或者叫做fair sched class排程類。這種排程器是被sched normal sched batch這兩種排程策略使用的。本文基於linux4.0 提到排程器涉及到兩個問題 ...

Erlang排程器一窺

erlang r15的一項新特性是可以通過dtrace或systemtap跟蹤虛擬機器中的各種行為 參見 通過這些跟蹤資訊可以從旁觀者的角度窺探到erlang的工作原理。編寫了乙個小程式,把跟蹤資訊畫出來,如下圖所示。這個跟蹤的跟蹤物件是乙個名為random的benchmark程式。random建立...

linux排程器(一) 概述

本次分析的kernel 為2.6.32 220。並且我們先不考慮smp。當前linux的排程程式由兩個排程器組成 主排程器,週期性排程器 兩者又統稱為核心排程器 並且每個排程器包括兩個內容 排程框架 其實質就是兩個函式框架 及排程器類。排程器類是實現了不同排程策略的例項,如 cfs rt class...