k8s擴展調(diào)度能力的三種實現(xiàn)方式
Kubernetes 調(diào)度器擴展原理
Kubernetes 調(diào)度器擴展主要通過兩種機制實現(xiàn):
調(diào)度框架(Scheduling Framework)和調(diào)度器擴展器(Extender)。
前者是內(nèi)置的可編程插件體系,后者是外部的獨立服務(wù)。
調(diào)度框架(Scheduling Framework)
調(diào)度框架將調(diào)度過程分解為多個階段,每個階段允許通過插件擴展:
1. 調(diào)度周期(Scheduling Cycle)
- QueueSort插件:定義 Pod 的調(diào)度隊列排序規(guī)則。
- PreFilter插件:檢查 Pod 的調(diào)度前提條件(如資源請求是否合法)。
- Filter插件:替代原生的 Predicates 邏輯,過濾不滿足條件的節(jié)點。
- PostFilter插件:當無可用節(jié)點時觸發(fā)(如搶占邏輯)。
- PreScore插件:為 Score 階段準備數(shù)據(jù)。
- Score插件:替代原生的 Priorities 邏輯,為節(jié)點打分。
- NormalizeScore插件:標準化分數(shù)到統(tǒng)一范圍(如 0-100)。
- Reserve插件:預留資源(綁定前執(zhí)行清理邏輯)。
2. 綁定周期(Binding Cycle)
- PreBind插件:綁定前執(zhí)行(如掛載網(wǎng)絡(luò)存儲)。
- Bind插件:將 Pod 綁定到節(jié)點(默認實現(xiàn)為 API 調(diào)用)。
- PostBind插件:綁定后執(zhí)行通知類操作。
插件通過實現(xiàn)接口注冊到框架,例如:
type ScorePlugin interface {
Score(ctx context.Context, state *CycleState, pod *v1.Pod, nodeName string) (int64, *Status)
}
調(diào)度器擴展器(Extender)
Extender 是獨立于調(diào)度器的 HTTP 服務(wù),通過配置 kube-scheduler 的 --policy-config-file 實現(xiàn)擴展:
1. 擴展點支持
- Filter:擴展節(jié)點過濾邏輯。
- Prioritize:擴展節(jié)點打分邏輯。
- Preempt:擴展搶占邏輯。
- Bind:擴展綁定邏輯。
2. 通信協(xié)議
調(diào)度器通過 HTTP POST 請求與 Extender 交互,請求體包含 Pod 和節(jié)點列表,響應(yīng)返回過濾結(jié)果或打分。
示例 Filter 請求體:
{
"Pod": {"metadata": {"name": "nginx"}},
"Nodes": {"items": [{"metadata": {"name": "node-1"}}]}
}
3. 配置示例
{
"extenders": [{
"urlPrefix": "http://extender-service:80",
"filterVerb": "filter",
"prioritizeVerb": "prioritize",
"weight": 1
}]
}
自定義調(diào)度器(Custom Scheduler)
完全獨立的調(diào)度器實現(xiàn):
- 監(jiān)聽未調(diào)度的 Pod(
pod.spec.schedulerName匹配自定義名稱)。 - 調(diào)用 Kubernetes API 完成綁定(需具備
bind權(quán)限)。 - 可與默認調(diào)度器共存,通過
schedulerName區(qū)分。
性能與隔離考量
- 調(diào)度框架:插件運行在調(diào)度器進程中,性能高但可能影響穩(wěn)定性。
- Extender:獨立進程隔離性好,但 HTTP 通信有延遲。
- 自定義調(diào)度器:靈活性最高,但需重復實現(xiàn)基礎(chǔ)功能。
典型場景選擇:
- 簡單策略擴展優(yōu)先用調(diào)度框架插件。
- 復雜外部依賴(如對接內(nèi)部系統(tǒng))適合 Extender。
- 特殊調(diào)度需求(如批量任務(wù))可開發(fā)自定義調(diào)度器。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
2022最新青龍面板對接機器人的詳細過程(傻妞對接onebot(oicq)協(xié)議實現(xiàn)機器人功能)
這篇文章主要介紹了2022最新青龍面板對接機器人的詳細過程(傻妞對接onebot(oicq)協(xié)議實現(xiàn)機器人功能),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
Kubernetes(k8s?1.23))安裝與卸載詳細教程
這篇文章主要介紹了Kubernetes(k8s?1.23))安裝與卸載,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07

