Nomad技术手册:调度(Scheduling)
調(diào)度是Nomad的核心功能之一。它是將任務(wù)從作業(yè)分配給客戶機的過程。此過程必須遵循作業(yè)中聲明的約束,并優(yōu)化資源利用率。本文檔記錄了Nomad中調(diào)度工作方式的詳細信息,以幫助用戶和開發(fā)人員構(gòu)建一個心智模型。這個設(shè)計很大程度上受到了谷歌在針對大型計算集群的靈活的、可伸縮的調(diào)度器Omega,以及使用Borg在谷歌進行大規(guī)模集群管理上的工作的啟發(fā)。
高級主題!這個頁面涵蓋了Nomad的技術(shù)細節(jié)。您不需要了解這些細節(jié)就可以有效地使用Nomad。對于那些希望了解它們而不需要通過源代碼進行深入研究的人來說,這里提供了詳細的文檔。
Nomad調(diào)度
Nomad有四個主要的“術(shù)語”;作業(yè)(jobs)、節(jié)點(nodes)、分配(allocations)和評估(evaluations)。作業(yè)由用戶提交,并表示所需的狀態(tài)。作業(yè)是要運行的任務(wù)的聲明性描述,這些任務(wù)受到約束并需要資源。可以在運行Nomad客戶端的集群節(jié)點上調(diào)度任務(wù)。作業(yè)中任務(wù)到客戶端的映射是使用分配完成的。分配用于聲明作業(yè)中的一組任務(wù)應(yīng)該在特定節(jié)點上運行。調(diào)度是確定適當(dāng)分配的過程,是評估的一部分。
任何時候,外部狀態(tài)(期望的或突發(fā)的)發(fā)生變化,都將創(chuàng)建一個評估。期望的狀態(tài)是基于作業(yè)的,這意味著如果提交了新作業(yè)、更新了現(xiàn)有作業(yè)或注銷了作業(yè),期望的狀態(tài)都將發(fā)生變更。突發(fā)狀態(tài)是基于客戶端節(jié)點的,因此我們必須處理系統(tǒng)中任何客戶端的故障。這些事件觸發(fā)了一個新評估的創(chuàng)建,因為Nomad必須評估環(huán)境的狀態(tài),并將其與期望的狀態(tài)進行協(xié)調(diào)。
這張圖顯示了通過Nomad進行評估的流程:
評估的生命周期始于導(dǎo)致創(chuàng)建評估的事件。在掛起狀態(tài)中創(chuàng)建評估,并將其放入評估代理程序。在主服務(wù)器上運行了一個評估代理。評估代理用于管理未決評估的隊列,提供優(yōu)先級排序,并確保至少一次運行。
Nomad服務(wù)器運行調(diào)度進程(broker),默認為每個CPU內(nèi)核一個進程,用于處理評估。進程從代理隊列中取出評估,然后按照作業(yè)指定的方式調(diào)用適當(dāng)?shù)恼{(diào)度器。Nomad附帶了一個優(yōu)化的長存服務(wù)的服務(wù)調(diào)度器(service)、一個用于快速放置批作業(yè)的批調(diào)度器(batch)、一個用于在每個節(jié)點上運行作業(yè)的系統(tǒng)調(diào)度器(system)以及一個用于內(nèi)部維護的核心調(diào)度器(core)。Nomad還可以擴展以支持定制調(diào)度器。
調(diào)度器負責(zé)處理評估并生成分配計劃。計劃是收回、更新或創(chuàng)建分配的一組集合。用于生成計劃的特定邏輯可能因調(diào)度器而異,但通常情況下,調(diào)度器需要首先協(xié)調(diào)期望狀態(tài)和實際狀態(tài),以確定必須執(zhí)行的操作:需要放置新的分配,可能需要更新、遷移或停止現(xiàn)有的分配。
分配被分成兩個不同的階段,可行性校驗和排名。在第一階段,調(diào)度器通過過濾掉不健康的節(jié)點、缺少必要驅(qū)動程序的節(jié)點和沒有達到指定約束的節(jié)點來找到可用的節(jié)點。
第二階段是排名,調(diào)度程序?qū)捎霉?jié)點進行打分,以找到最合適的節(jié)點。評分主要基于裝箱,用來優(yōu)化應(yīng)用程序的資源利用率和密度,但也增加了親和性和反親和性規(guī)則。Nomad自動應(yīng)用了一個任務(wù)反親和性規(guī)則,該規(guī)則阻止一個任務(wù)組的多個實例合并。這種反親和性和裝箱優(yōu)化了的組合密度,同時減少了相關(guān)故障的概率。
一旦調(diào)度器對足夠的節(jié)點進行了排序,就會選擇最高級別的節(jié)點并將其添加到分配計劃中。
當(dāng)計劃完成時,調(diào)度器將計劃提交給將計劃的主節(jié)點,主節(jié)點再將計劃添加到計劃隊列。計劃隊列管理掛起的計劃,提供優(yōu)先順序,并允許Nomad處理并發(fā)競爭。多個調(diào)度器并行運行,沒有鎖定或保留,使Nomad樂觀地并行。因此,調(diào)度器可能會在同一個節(jié)點上重疊工作,導(dǎo)致資源過度訂閱。計劃隊列允許主節(jié)點對此進行保護,并執(zhí)行計劃的部分或完全拒絕。
當(dāng)主節(jié)點處理計劃時,它在沒有沖突時創(chuàng)建分配,否則會在計劃結(jié)果中通知調(diào)度器失敗。計劃結(jié)果會向調(diào)度器提供反饋,允許它在前一個計劃被部分或完全拒絕時終止或探查備用計劃。
一旦調(diào)度器完成了評估的處理,它就會更新評估的狀態(tài),并向評估代理承認交付。這就完成了評估的生命周期。然后創(chuàng)建、修改或刪除的分配將由客戶端節(jié)點接收并開始執(zhí)行。
總結(jié)
以上是生活随笔為你收集整理的Nomad技术手册:调度(Scheduling)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud Gateway
- 下一篇: lombok @EqualsAndHas