新聞中心
調(diào)度框架
FEATURE STATE: Kubernetes 1.19 [stable]

臨潼ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
調(diào)度框架是面向 Kubernetes 調(diào)度器的一種插件架構, 它為現(xiàn)有的調(diào)度器添加了一組新的“插件” API。插件會被編譯到調(diào)度器之中。 這些 API 允許大多數(shù)調(diào)度功能以插件的形式實現(xiàn),同時使調(diào)度“核心”保持簡單且可維護。
框架工作流程
調(diào)度框架定義了一些擴展點。調(diào)度器插件注冊后在一個或多個擴展點處被調(diào)用。 這些插件中的一些可以改變調(diào)度決策,而另一些僅用于提供信息。
每次調(diào)度一個 Pod 的嘗試都分為兩個階段,即 調(diào)度周期 和 綁定周期。
調(diào)度周期和綁定周期
調(diào)度周期為 Pod 選擇一個節(jié)點,綁定周期將該決策應用于集群。 調(diào)度周期和綁定周期一起被稱為“調(diào)度上下文”。
調(diào)度周期是串行運行的,而綁定周期可能是同時運行的。
如果確定 Pod 不可調(diào)度或者存在內(nèi)部錯誤,則可以終止調(diào)度周期或綁定周期。 Pod 將返回隊列并重試。
擴展點
下圖顯示了一個 Pod 的調(diào)度上下文以及調(diào)度框架公開的擴展點。 在此圖片中,“過濾器”等同于“斷言”,“評分”相當于“優(yōu)先級函數(shù)”。
一個插件可以在多個擴展點處注冊,以執(zhí)行更復雜或有狀態(tài)的任務。
隊列排序
這些插件用于對調(diào)度隊列中的 Pod 進行排序。 隊列排序插件本質(zhì)上提供 ?less(Pod1, Pod2)? 函數(shù)。 一次只能啟動一個隊列插件。
PreFilter
這些插件用于預處理 Pod 的相關信息,或者檢查集群或 Pod 必須滿足的某些條件。 如果 PreFilter 插件返回錯誤,則調(diào)度周期將終止。
Filter
這些插件用于過濾出不能運行該 Pod 的節(jié)點。對于每個節(jié)點, 調(diào)度器將按照其配置順序調(diào)用這些過濾插件。如果任何過濾插件將節(jié)點標記為不可行, 則不會為該節(jié)點調(diào)用剩下的過濾插件。節(jié)點可以被同時進行評估。
PostFilter
這些插件在 Filter 階段后調(diào)用,但僅在該 Pod 沒有可行的節(jié)點時調(diào)用。 插件按其配置的順序調(diào)用。如果任何 PostFilter 插件標記節(jié)點為“Schedulable”, 則其余的插件不會調(diào)用。典型的 PostFilter 實現(xiàn)是搶占,試圖通過搶占其他 Pod 的資源使該 Pod 可以調(diào)度。
PreScore
這些插件用于執(zhí)行 “前置評分(pre-scoring)” 工作,即生成一個可共享狀態(tài)供 Score 插件使用。 如果 PreScore 插件返回錯誤,則調(diào)度周期將終止。
Score
這些插件用于對通過過濾階段的節(jié)點進行排序。調(diào)度器將為每個節(jié)點調(diào)用每個評分插件。 將有一個定義明確的整數(shù)范圍,代表最小和最大分數(shù)。 在標準化評分階段之后,調(diào)度器將根據(jù)配置的插件權重 合并所有插件的節(jié)點分數(shù)。
NormalizeScore
這些插件用于在調(diào)度器計算 Node 排名之前修改分數(shù)。 在此擴展點注冊的插件被調(diào)用時會使用同一插件的 Score 結果。 每個插件在每個調(diào)度周期調(diào)用一次。
例如,假設一個 ?BlinkingLightScorer ?插件基于具有的閃爍指示燈數(shù)量來對節(jié)點進行排名。
func ScoreNode(_ *v1.pod, n *v1.Node) (int, error) {
return getBlinkingLightCount(n)
}然而,最大的閃爍燈個數(shù)值可能比 ?NodeScoreMax ?小。要解決這個問題, ?BlinkingLightScorer ?插件還應該注冊該擴展點。
func NormalizeScores(scores map[string]int) {
highest := 0
for _, score := range scores {
highest = max(highest, score)
}
for node, score := range scores {
scores[node] = score*NodeScoreMax/highest
}
}如果任何 NormalizeScore 插件返回錯誤,則調(diào)度階段將終止。
Note: 希望執(zhí)行“預保留”工作的插件應該使用 NormalizeScore 擴展點。
Reserve
Reserve 是一個信息性的擴展點。 管理運行時狀態(tài)的插件(也成為“有狀態(tài)插件”)應該使用此擴展點,以便 調(diào)度器在節(jié)點給指定 Pod 預留了資源時能夠通知該插件。 這是在調(diào)度器真正將 Pod 綁定到節(jié)點之前發(fā)生的,并且它存在是為了防止 在調(diào)度器等待綁定成功時發(fā)生競爭情況。
這個是調(diào)度周期的最后一步。 一旦 Pod 處于保留狀態(tài),它將在綁定周期結束時觸發(fā) ?Unreserve ?插件 (失敗時)或 ?PostBind ?插件(成功時)。
Permit
Permit 插件在每個 Pod 調(diào)度周期的最后調(diào)用,用于防止或延遲 Pod 的綁定。 一個允許插件可以做以下三件事之一:
- 批準
- 拒絕
- 等待(帶有超時)
一旦所有 Permit 插件批準 Pod 后,該 Pod 將被發(fā)送以進行綁定。
如果任何 Permit 插件拒絕 Pod,則該 Pod 將被返回到調(diào)度隊列。 這將觸發(fā)?Unreserve ?插件。
如果一個 Permit 插件返回 “等待” 結果,則 Pod 將保持在一個內(nèi)部的 “等待中” 的 Pod 列表,同時該 Pod 的綁定周期啟動時即直接阻塞直到得到 批準。如果超時發(fā)生,等待 變成 拒絕,并且 Pod 將返回調(diào)度隊列,從而觸發(fā) ?Unreserve ?插件。
Note: 盡管任何插件可以訪問 “等待中” 狀態(tài)的 Pod 列表并批準它們 (查看 FrameworkHandle)。 我們期望只有允許插件可以批準處于 “等待中” 狀態(tài)的預留 Pod 的綁定。 一旦 Pod 被批準了,它將發(fā)送到 ?
PreBind?階段。
PreBind
這些插件用于執(zhí)行 Pod 綁定前所需的所有工作。 例如,一個 PreBind 插件可能需要制備網(wǎng)絡卷并且在允許 Pod 運行在該節(jié)點之前 將其掛載到目標節(jié)點上。
如果任何 PreBind 插件返回錯誤,則 Pod 將被 拒絕 并且 退回到調(diào)度隊列中。
Bind
Bind 插件用于將 Pod 綁定到節(jié)點上。直到所有的 PreBind 插件都完成,Bind 插件才會被調(diào)用。 各 Bind 插件按照配置順序被調(diào)用。Bind 插件可以選擇是否處理指定的 Pod。 如果某 Bind 插件選擇處理某 Pod,剩余的 Bind 插件將被跳過。
PostBind
這是個信息性的擴展點。 PostBind 插件在 Pod 成功綁定后被調(diào)用。這是綁定周期的結尾,可用于清理相關的資源。
Unreserve
這是個信息性的擴展點。 如果 Pod 被保留,然后在后面的階段中被拒絕,則 Unreserve 插件將被通知。 Unreserve 插件應該清楚保留 Pod 的相關狀態(tài)。
使用此擴展點的插件通常也使用 Reserve。
插件 API
插件 API 分為兩個步驟。首先,插件必須完成注冊并配置,然后才能使用擴展點接口。 擴展點接口具有以下形式。
type Plugin interface {
Name() string
}
type QueueSortPlugin interface {
Plugin
Less(*v1.pod, *v1.pod) bool
}
type PreFilterPlugin interface {
Plugin
PreFilter(context.Context, *framework.CycleState, *v1.pod) error
}
// ...
插件配置
你可以在調(diào)度器配置中啟用或禁用插件。 如果你在使用 Kubernetes v1.18 或更高版本,大部分調(diào)度 插件 都在使用中且默認啟用。
除了默認的插件,你還可以實現(xiàn)自己的調(diào)度插件并且將它們與默認插件一起配置。 你可以訪問 scheduler-plugins 了解更多信息。
如果你正在使用 Kubernetes v1.18 或更高版本,你可以將一組插件設置為 一個調(diào)度器配置文件,然后定義不同的配置文件來滿足各類工作負載。
當前文章:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes調(diào)度框架
鏈接地址:http://www.dlmjj.cn/article/dpddijc.html


咨詢
建站咨詢
