k8s擴(kuò)展調(diào)度能力的三種實(shí)現(xiàn)方式
Kubernetes 調(diào)度器擴(kuò)展原理
Kubernetes 調(diào)度器擴(kuò)展主要通過兩種機(jī)制實(shí)現(xiàn):
調(diào)度框架(Scheduling Framework)和調(diào)度器擴(kuò)展器(Extender)。
前者是內(nèi)置的可編程插件體系,后者是外部的獨(dú)立服務(wù)。
調(diào)度框架(Scheduling Framework)
調(diào)度框架將調(diào)度過程分解為多個(gè)階段,每個(gè)階段允許通過插件擴(kuò)展:
1. 調(diào)度周期(Scheduling Cycle)
- QueueSort插件:定義 Pod 的調(diào)度隊(duì)列排序規(guī)則。
- PreFilter插件:檢查 Pod 的調(diào)度前提條件(如資源請(qǐng)求是否合法)。
- Filter插件:替代原生的 Predicates 邏輯,過濾不滿足條件的節(jié)點(diǎn)。
- PostFilter插件:當(dāng)無可用節(jié)點(diǎn)時(shí)觸發(fā)(如搶占邏輯)。
- PreScore插件:為 Score 階段準(zhǔn)備數(shù)據(jù)。
- Score插件:替代原生的 Priorities 邏輯,為節(jié)點(diǎn)打分。
- NormalizeScore插件:標(biāo)準(zhǔn)化分?jǐn)?shù)到統(tǒng)一范圍(如 0-100)。
- Reserve插件:預(yù)留資源(綁定前執(zhí)行清理邏輯)。
2. 綁定周期(Binding Cycle)
- PreBind插件:綁定前執(zhí)行(如掛載網(wǎng)絡(luò)存儲(chǔ))。
- Bind插件:將 Pod 綁定到節(jié)點(diǎn)(默認(rèn)實(shí)現(xiàn)為 API 調(diào)用)。
- PostBind插件:綁定后執(zhí)行通知類操作。
插件通過實(shí)現(xiàn)接口注冊(cè)到框架,例如:
type ScorePlugin interface {
Score(ctx context.Context, state *CycleState, pod *v1.Pod, nodeName string) (int64, *Status)
}
調(diào)度器擴(kuò)展器(Extender)
Extender 是獨(dú)立于調(diào)度器的 HTTP 服務(wù),通過配置 kube-scheduler 的 --policy-config-file 實(shí)現(xiàn)擴(kuò)展:
1. 擴(kuò)展點(diǎn)支持
- Filter:擴(kuò)展節(jié)點(diǎn)過濾邏輯。
- Prioritize:擴(kuò)展節(jié)點(diǎn)打分邏輯。
- Preempt:擴(kuò)展搶占邏輯。
- Bind:擴(kuò)展綁定邏輯。
2. 通信協(xié)議
調(diào)度器通過 HTTP POST 請(qǐng)求與 Extender 交互,請(qǐng)求體包含 Pod 和節(jié)點(diǎn)列表,響應(yīng)返回過濾結(jié)果或打分。
示例 Filter 請(qǐng)求體:
{
"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)
完全獨(dú)立的調(diào)度器實(shí)現(xiàn):
- 監(jiān)聽未調(diào)度的 Pod(
pod.spec.schedulerName匹配自定義名稱)。 - 調(diào)用 Kubernetes API 完成綁定(需具備
bind權(quán)限)。 - 可與默認(rèn)調(diào)度器共存,通過
schedulerName區(qū)分。
性能與隔離考量
- 調(diào)度框架:插件運(yùn)行在調(diào)度器進(jìn)程中,性能高但可能影響穩(wěn)定性。
- Extender:獨(dú)立進(jìn)程隔離性好,但 HTTP 通信有延遲。
- 自定義調(diào)度器:靈活性最高,但需重復(fù)實(shí)現(xiàn)基礎(chǔ)功能。
典型場(chǎng)景選擇:
- 簡(jiǎn)單策略擴(kuò)展優(yōu)先用調(diào)度框架插件。
- 復(fù)雜外部依賴(如對(duì)接內(nèi)部系統(tǒng))適合 Extender。
- 特殊調(diào)度需求(如批量任務(wù))可開發(fā)自定義調(diào)度器。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Kubernetes節(jié)點(diǎn)自動(dòng)伸縮(Cluster Autoscaler)原理及分析
ClusterAutoscaler是Kubernetes官方提供的自動(dòng)伸縮組件,通過監(jiān)控未調(diào)度的Pod并自動(dòng)調(diào)整節(jié)點(diǎn)數(shù)量,實(shí)現(xiàn)集群資源的動(dòng)態(tài)調(diào)配,它支持Pod、節(jié)點(diǎn)和資源粒度的自動(dòng)伸縮,通過配置合理的參數(shù)和策略,可以有效地提升集群的彈性,減少人工干預(yù),降低運(yùn)維成本2026-01-01
K8s?EphemeralContainer臨時(shí)容器解讀
Kubernetes臨時(shí)容器用于調(diào)試無shell容器,通過shareProcessNamespace參數(shù)實(shí)現(xiàn)安全登錄與故障排查,排查后可刪除,版本1.25及以上默認(rèn)啟用,需使用預(yù)裝debug工具的鏡像(如busybox)2025-08-08
使用kubeadm部署kubernetes1.27.1版本教程
文章概述了K8s集群搭建的準(zhǔn)備與兩種部署方式:kubeadm(快速)和二進(jìn)制(手動(dòng)),涵蓋單master配置、硬件要求、網(wǎng)絡(luò)設(shè)置及初始化流程,適用于測(cè)試環(huán)境,提供參考經(jīng)驗(yàn)2025-08-08
虛擬化技術(shù)概述 虛擬機(jī)安裝與管理手冊(cè)
這篇文章主要為大家詳細(xì)介紹了虛擬化技術(shù)原理,如何安裝與管理虛擬機(jī)virt-manger,virsh等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10

