0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Kube-scheduler調(diào)度器內(nèi)部流轉(zhuǎn)過程

阿銘linux ? 來源:阿銘linux ? 2023-05-06 09:14 ? 次閱讀

K8S調(diào)度器Kube-schduler的主要作用是將新創(chuàng)建的Pod調(diào)度到集群中的合適節(jié)點上運行。kube-scheduler的調(diào)度算法非常靈活,可以根據(jù)不同的需求進行自定義配置,比如資源限制、親和性和反親和性等。 kube-scheduler的工作原理

監(jiān)聽API Server:kube-scheduler會監(jiān)聽API Server上的Pod對象,以獲取需要被調(diào)度的Pod信息。它會通過API Server提供的REST API接口獲取Pod的信息,例如Pod的標(biāo)簽、資源需求等信息。

篩選可用節(jié)點:kube-scheduler會根據(jù)Pod的資源需求和約束條件(例如Pod需要的特定節(jié)點標(biāo)簽)篩選出可用的Node節(jié)點。它會從所有注冊到集群中的Node節(jié)點中選擇符合條件的節(jié)點。

計算分值:kube-scheduler會為每個可用的節(jié)點計算一個分值,以決定哪個節(jié)點是最合適的。分值的計算方式可以通過調(diào)度算法來指定,例如默認的算法是將節(jié)點資源利用率和距離Pod的網(wǎng)絡(luò)延遲等因素納入考慮。

選擇節(jié)點:kube-scheduler會選擇分值最高的節(jié)點作為最終的調(diào)度目標(biāo),并將Pod綁定到該節(jié)點上。如果有多個節(jié)點得分相等,kube-scheduler會隨機選擇一個節(jié)點。

更新API Server:kube-scheduler會更新API Server上的Pod對象,將選定的Node節(jié)點信息寫入Pod對象的spec字段中,然后通知Kubelet將Pod綁定到該節(jié)點上并啟動容器。

Kube-scheduler調(diào)度器內(nèi)部流轉(zhuǎn)過程

b72cd95c-eb92-11ed-90ce-dac502259ad0.png

Scheduler 通過注冊 client-go 的 informer 的 handler 方法監(jiān)聽 api-server 的 pod 和 node 變更事件,從而實現(xiàn)將 pod 的信息更新 scheduler 的 activeQ,podbackoffQ,unschedulableQ 三個隊列中。

帶調(diào)度的 pod 會進入到 activeQ 的調(diào)度隊列中,activeQ 是一個維護著 pod 優(yōu)先級的堆結(jié)構(gòu),調(diào)度器在調(diào)度循環(huán)中每次從堆中取出優(yōu)先級最高的 pod 進行調(diào)度。

取出的待調(diào)度 pod 會經(jīng)過調(diào)度器的一系列調(diào)度算法找到合適的 node 節(jié)點進行綁定。如果調(diào)度算法判定沒有適合的節(jié)點,會將 pod 更新為不可調(diào)度狀態(tài),并扔進 unschedulable 的隊列中。

調(diào)度器在執(zhí)行綁定操作的時候是一個異步過程,調(diào)度器會先在緩存中創(chuàng)建一個和原來 pod 一樣的 assume pod 對象用模擬完成節(jié)點的綁定,如將 assume pod 的 nodename 設(shè)置成綁定節(jié)點名稱,同時通過異步執(zhí)行綁定指令操作。

在 pod 和 node 綁定前,scheduler需要確保 volume 已經(jīng)完成綁定操作,確認完所有綁定前準(zhǔn)備工作,scheduler 會向 api-server 發(fā)送一個 bind 對象,對應(yīng)節(jié)點的 kubelet 將待綁定的pod在節(jié)點運行起來。

為節(jié)點計算分值 節(jié)點分值計算是通過調(diào)度器算法實現(xiàn)的,而不是固定的。默認情況下,kube-scheduler采用的是DefaultPreemption算法,其計算分值的方式包括以下幾個方面:

節(jié)點的資源利用率 kube-scheduler會考慮每個節(jié)點的CPU和內(nèi)存資源利用率,將其納入節(jié)點分值的計算中。資源利用率越低的節(jié)點得分越高。

節(jié)點上的Pod數(shù)目 kube-scheduler會考慮每個節(jié)點上已經(jīng)存在的Pod數(shù)目,將其納入節(jié)點分值的計算中。如果節(jié)點上已經(jīng)有大量的Pod,新的Pod可能會導(dǎo)致資源競爭和擁堵,因此節(jié)點得分會相應(yīng)降低。

Pod與節(jié)點的親和性和互斥性 kube-scheduler會考慮Pod與節(jié)點的親和性和互斥性,將其納入節(jié)點分值的計算中。如果Pod與節(jié)點存在親和性,例如Pod需要特定的節(jié)點標(biāo)簽或節(jié)點與Pod在同一區(qū)域,節(jié)點得分會相應(yīng)提高。如果Pod與節(jié)點存在互斥性,例如Pod不能與其他特定的Pod共存于同一節(jié)點,節(jié)點得分會相應(yīng)降低。

節(jié)點之間的網(wǎng)絡(luò)延遲 kube-scheduler會考慮節(jié)點之間的網(wǎng)絡(luò)延遲,將其納入節(jié)點分值的計算中。如果節(jié)點之間的網(wǎng)絡(luò)延遲較低,節(jié)點得分會相應(yīng)提高。

Pod的優(yōu)先級 kube-scheduler會考慮Pod的優(yōu)先級,將其納入節(jié)點分值的計算中。如果Pod具有高優(yōu)先級,例如是關(guān)鍵業(yè)務(wù)的部分,節(jié)點得分會相應(yīng)提高。

這些因素的相對權(quán)重可以通過kube-scheduler的命令行參數(shù)或者調(diào)度器配置文件進行調(diào)整。需要注意的是,kube-scheduler的算法是可擴展的,可以根據(jù)需要編寫自定義的調(diào)度算法來計算節(jié)點分值。 調(diào)度策略

默認調(diào)度策略(DefaultPreemption):默認調(diào)度策略是kube-scheduler的默認策略,其基本原則是為Pod選擇一個未滿足需求的最小代價節(jié)點。如果無法找到這樣的節(jié)點,就會考慮使用預(yù)選,即將一些已經(jīng)調(diào)度的Pod驅(qū)逐出去來為新的Pod騰出空間。

帶優(yōu)先級的調(diào)度策略(Priority):帶優(yōu)先級的調(diào)度策略基于Pod的優(yōu)先級對節(jié)點進行排序,優(yōu)先選擇優(yōu)先級高的Pod。該策略可以通過設(shè)置Pod的PriorityClass來實現(xiàn)。

節(jié)點親和性調(diào)度策略(NodeAffinity):節(jié)點親和性調(diào)度策略基于節(jié)點標(biāo)簽或其他條件,選擇與Pod需要的條件相匹配的節(jié)點。這可以通過在Pod定義中使用NodeAffinity配置實現(xiàn)。

Pod 親和性調(diào)度策略(PodAffinity):Pod 親和性調(diào)度策略根據(jù)Pod的標(biāo)簽和其他條件,選擇與Pod相似的其他Pod所在的節(jié)點。這可以通過在Pod定義中使用PodAffinity配置實現(xiàn)。

Pod 互斥性調(diào)度策略(PodAntiAffinity):Pod 互斥性調(diào)度策略選擇與Pod不相似的其他Pod所在的節(jié)點,以避免同一節(jié)點上運行相似的Pod。這可以通過在Pod定義中使用PodAntiAffinity配置實現(xiàn)。

資源限制調(diào)度策略(ResourceLimits):資源限制調(diào)度策略選擇可用資源最多的節(jié)點,以滿足Pod的資源需求。這可以通過在Pod定義中使用ResourceLimits配置實現(xiàn)。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • REST
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    9422
  • API接口
    +關(guān)注

    關(guān)注

    1

    文章

    84

    瀏覽量

    10454
  • 調(diào)度器
    +關(guān)注

    關(guān)注

    0

    文章

    98

    瀏覽量

    5261

原文標(biāo)題:這些Kubernetes調(diào)度知識點你知道嗎

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    leader選舉在kubernetes controller中是如何實現(xiàn)的

    在 Kubernetes 的 kube-controller-manager , kube-scheduler, 以及使用 Operator 的底層實現(xiàn) controller-rumtime 都支持高可用系統(tǒng)中的 leader 選舉。
    的頭像 發(fā)表于 07-21 10:03 ?1744次閱讀

    深入探討Linux的進程調(diào)度

    Linux操作系統(tǒng)作為一個開源且廣泛應(yīng)用的操作系統(tǒng),其內(nèi)核設(shè)計包含了許多核心功能,而進程調(diào)度Scheduler)就是其中一個至關(guān)重要的模塊。進程調(diào)度
    的頭像 發(fā)表于 08-13 13:36 ?959次閱讀
    深入探討Linux的進程<b class='flag-5'>調(diào)度</b><b class='flag-5'>器</b>

    用于vGPU的GPU調(diào)度程序

    / libnvidia-vgpu進程)?十多年來,有更復(fù)雜的調(diào)度程序。如果你查看網(wǎng)絡(luò)硬件,你可以看到更多高級調(diào)度程序(https://en.wikipedia.org/wiki/Network_scheduler
    發(fā)表于 09-11 16:37

    調(diào)度運行的過程是怎樣的? 它的應(yīng)用有哪些?

    調(diào)度是由哪幾部分組成的?調(diào)度運行的過程是怎樣的?調(diào)度
    發(fā)表于 04-27 07:12

    電機實際的運轉(zhuǎn)過程是怎樣的?

    什么是步進電機?具有哪些優(yōu)缺點?步進電機的工作原理是什么?有哪些種類?電機實際的運轉(zhuǎn)過程是怎樣的?
    發(fā)表于 10-19 09:08

    關(guān)于RTT中scheduler線程調(diào)度的學(xué)習(xí)

    RTT中的scheduler并不是以一個類的形式存在,更類似傳統(tǒng)的過程編程。個人認為這一點在編程風(fēng)格上和其他的組件是不夠統(tǒng)一的。 下面引用一段RTT官網(wǎng)上,關(guān)于RTT線程調(diào)度的介紹。 RTT中提
    發(fā)表于 04-27 14:19

    從零開始入門 K8s | 調(diào)度調(diào)度流程和算法介紹

    等,并介紹了兩種方式用于實現(xiàn)自定義調(diào)度能力。 調(diào)度流程 調(diào)度流程概覽 Kubernetes 作為當(dāng)下最主流的容器自動化運維平臺,作為 K8s 的容器編排的核心組件 kube-scheduler
    發(fā)表于 03-09 17:04 ?1188次閱讀

    基于Web的Kubernetes scheduler模擬

    ./oschina_soft/kube-scheduler-simulator.zip
    發(fā)表于 05-13 09:54 ?1次下載
    基于Web的Kubernetes <b class='flag-5'>scheduler</b>模擬<b class='flag-5'>器</b>

    Kube-capacity CLI的安裝與用法

    使用 Kube-capacity CLI 查看 Kubernetes 資源請求、限制和利用率
    的頭像 發(fā)表于 07-03 15:30 ?1124次閱讀

    Kube Multisensor NodeMCU模塊板

    電子發(fā)燒友網(wǎng)站提供《Kube Multisensor NodeMCU模塊板.zip》資料免費下載
    發(fā)表于 07-18 16:37 ?0次下載
    <b class='flag-5'>Kube</b> Multisensor NodeMCU模塊板

    容器進程調(diào)度時是該優(yōu)先考慮CPU資源還是內(nèi)存資源

    當(dāng)然實際中 k8s 的調(diào)度策略不是這么簡單的,系統(tǒng)默認的 kube-scheduler 調(diào)度外還有直接指定Node主機名、節(jié)點親和性、Pod親和性、nodeSelector 等等
    的頭像 發(fā)表于 08-16 18:20 ?1364次閱讀

    kube-scheduler v1.21 的調(diào)度流程分析

    Scheduler 在整個系統(tǒng)中承擔(dān)了“承上啟下”的重要功能?!俺猩稀笔侵杆撠?zé)接受 Controller Manager 創(chuàng)建的新 Pod,為其安排 Node;“啟下”是指安置工作完成后,目標(biāo)
    的頭像 發(fā)表于 08-22 09:15 ?1159次閱讀

    NVIDIA Triton 系列文章(11):模型類別與調(diào)度-1

    在 Triton 推理服務(wù)的使用中,模型(model)類別與調(diào)度scheduler)、批量處理(batcher)類型的搭配,是整個管
    的頭像 發(fā)表于 01-11 06:35 ?878次閱讀

    Linux調(diào)度的核心scheduler_tick介紹

    scheduler_tick在Linux內(nèi)核中扮演著關(guān)鍵角色。它不僅負責(zé)處理定時中斷和更新系統(tǒng)時間,還記錄進程的運行時間,并決定是否需要進行任務(wù)切換。通過這些功能,scheduler_tick有效保障了系統(tǒng)的時間管理和任務(wù)
    的頭像 發(fā)表于 08-22 14:54 ?445次閱讀

    重新分配pod節(jié)點

    升級至v1.15.12; Master節(jié)點的服務(wù)包括:apiserver、controller-manager、kube-scheduler; Node節(jié)點的服務(wù)包括:kubelet
    的頭像 發(fā)表于 01-02 09:17 ?67次閱讀
    重新分配pod節(jié)點