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

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

3天內不再提示

Kube-scheduler調度器內部流轉過程

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

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

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

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

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

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

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

Kube-scheduler調度器內部流轉過程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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






審核編輯:劉清

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

    關注

    0

    文章

    32

    瀏覽量

    9394
  • API接口
    +關注

    關注

    1

    文章

    82

    瀏覽量

    10420
  • 調度器
    +關注

    關注

    0

    文章

    98

    瀏覽量

    5232

原文標題:這些Kubernetes調度知識點你知道嗎

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

收藏 人收藏

    評論

    相關推薦

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

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

    深入探討Linux的進程調度

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

    用于vGPU的GPU調度程序

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

    調度運行的過程是怎樣的? 它的應用有哪些?

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

    電機實際的運轉過程是怎樣的?

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

    關于RTT中scheduler線程調度的學習

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

    從零開始入門 K8s | 調度調度流程和算法介紹

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

    基于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 ?1060次閱讀

    Kube Multisensor NodeMCU模塊板

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

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

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

    kube-scheduler v1.21 的調度流程分析

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

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

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

    國產調度之光——Fsched到底有多能打?

    ,就夠了嗎? 三、全面對比:速石研發(fā)平臺 VS LSF Suite 四、如果你想嘗試AI—— 五、不止半導體領域。。。。 介紹一下主角——速石自研調度Fsched fastone Scheduler,簡稱Fsched,是速石科
    的頭像 發(fā)表于 08-30 22:01 ?543次閱讀
    國產<b class='flag-5'>調度</b><b class='flag-5'>器</b>之光——Fsched到底有多能打?

    Linux調度的核心scheduler_tick介紹

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