030.核心組件-Scheduler

来源:https://www.cnblogs.com/itzgr/archive/2020/03/18/12516271.html
-Advertisement-
Play Games

一 Scheduler原理 1.1 原理解析 Kubernetes Scheduler是負責Pod調度的重要功能模塊,Kubernetes Scheduler在整個系統中承擔了“承上啟下”的重要功能,“承上”是指它負責接收Controller Manager創建的新Pod,為其調度至目標Node;“ ...


一 Scheduler原理

1.1 原理解析

Kubernetes Scheduler是負責Pod調度的重要功能模塊,Kubernetes Scheduler在整個系統中承擔了“承上啟下”的重要功能,“承上”是指它負責接收Controller Manager創建的新Pod,為其調度至目標Node;“啟下”是指調度完成後,目標Node上的kubelet服務進程接管後繼工作,負責Pod接下來生命周期。 Kubernetes Scheduler的作用是將待調度的Pod(API新創建的Pod、Controller Manager為補足副本而創建的Pod等)按照特定的調度演算法和調度策略綁定(Binding)到集群中某個合適的Node上,並將綁定信息寫入etcd中。 在整個調度過程中涉及三個對象,分別是待調度Pod列表、可用Node列表,以及調度演算法和策略。 概述而言,就是通過調度演算法調度為待調度Pod列表中的每個Pod從Node列表中選擇一個最適合的Node。隨後,目標節點上的kubelet通過API Server監聽到Kubernetes Scheduler產生的Pod綁定事件,然後獲取對應的Pod清單,下載Image鏡像並啟動容器。 完整的流程如下圖示: clipboard
Kubernetes Scheduler當前提供的預設調度流程分為以下兩步: 預選調度過程,即遍歷所有目標Node,篩選出符合要求的候選節點。為此,Kubernetes內置了多種預選策略(xxx Predicates)供用戶選擇。 確定最優節點,在第1步的基礎上,採用優選策略(xxx Priority)計算出每個候選節點的積分,積分最高者勝出。Kubernetes Scheduler的調度流程是通過插件方式載入的“調度演算法提供者”(AlgorithmProvider)具體實現的。

二 Scheduler策略

2.1 策略種類

一個AlgorithmProvider其實就是包括了一組預選策略與一組優先選擇策略的結構體。 Scheduler中可用的預選策略包含:NoDiskConflict、PodFitsResources、PodSelectorMatches、PodFitsHost、CheckNodeLabelPresence、CheckServiceAffinity和PodFitsPorts策略等。 其預設的AlgorithmProvider載入的預選策略Predicates包括:PodFitsPorts(PodFitsPorts)、PodFitsResources(PodFitsResources)、NoDiskConflict(NoDiskConflict)、MatchNodeSelector(PodSelectorMatches)和HostName(PodFitsHost),即每個節點只有通過前面提及的5個預設預選策略後,才能初步被選中,進入下一個流程。
  1. NoDiskConflict
判斷備選Pod的gcePersistentDisk或AWSElasticBlockStore和備選的節點中已存在的Pod是否存在衝突。檢測過程如下。
    • 首先,讀取備選Pod的所有Volume的信息(即pod.Spec.Volumes),對每個Volume執行以下步驟進行衝突檢測。
    • 如果該Volume是gcePersistentDisk,則將Volume和備選節點上的所有Pod的每個Volume都進行比較,如果發現相同的gcePersistentDisk,則返回false,表明存在磁碟衝突,檢查結束,反饋給調度器該備選節點不適合作為備選Pod;
    • 如果該Volume是AWSElasticBlockStore,則將Volume和備選節點上的所有Pod的每個Volume都進行比較,如果發現相同的AWSElasticBlockStore,則返回false,表明存在磁碟衝突,檢查結束,反饋給調度器該備選節點不適合備選Pod。
    • 如果檢查完備選Pod的所有Volume均未發現衝突,則返回true,表明不存在磁碟衝突,反饋給調度器該備選節點適合備選Pod。
  1. PodFitsResources
判斷備選節點的資源是否滿足備選Pod的需求,檢測過程如下。
    • 計算備選Pod和節點中已存在Pod的所有容器的需求資源(記憶體和CPU)的總和。
    • 獲得備選節點的狀態信息,其中包含節點的資源信息。
    • 如果在備選Pod和節點中已存在Pod的所有容器的需求資源(記憶體和CPU)的總和,超出了備選節點擁有的資源,則返回false,表明備選節點不適合備選Pod,否則返回true,表明備選節點適合備選Pod。
  1. PodSelectorMatches
判斷備選節點是否包含備選Pod的標簽選擇器指定的標簽。
    • 如果Pod沒有指定spec.nodeSelector標簽選擇器,則返回true。
    • 否則,獲得備選節點的標簽信息,判斷節點是否包含備選Pod的標簽選擇器(spec.nodeSelector)所指定的標簽,如果包含,則返回true,否則返回false。
  1. PodFitsHost
判斷備選Pod的spec.nodeName域所指定的節點名稱和備選節點的名稱是否一致,如果一致,則返回true,否則返回false。
  1. CheckNodeLabelPresence
如果用戶在配置文件中指定了該策略,則Scheduler會通過RegisterCustomFitPredicate方法註冊該策略。該策略用於判斷策略列出的標簽在備選節點中存在時,是否選擇該備選節點。
    • 讀取備選節點的標簽列表信息。
    • 如果策略配置的標簽列表存在於備選節點的標簽列表中,且策略配置的presence值為false,則返回false,否則返回true;
    • 如果策略配置的標簽列表不存在於備選節點的標簽列表中,且策略配置的presence值為true,則返回false,否則返回true。
  1. CheckServiceAffinity
如果用戶在配置文件中指定了該策略,則Scheduler會通過RegisterCustomFitPredicate方法註冊該策略。該策略用於判斷備選節點是否包含策略指定的標簽,或包含和備選Pod在相同Service和Namespace下的Pod所在節點的標簽列表。如果存在,則返回true,否則返回false。
  1. PodFitsPorts
判斷備選Pod所用的埠列表中的埠是否在備選節點中已被占用,如果被占用,則返回false,否則返回true。 Scheduler中的優選策略包含:LeastRequestedPriority、CalculateNodeLabelPriority和BalancedResourceAllocation等。每個節點通過優先選擇策略時都會算出一個得分,計算各項得分,最終選出得分值最大的節點作為優選的結果(也是調度演算法的結果)。
  • LeastRequestedPriority
該優選策略用於從備選節點列表中選出資源消耗最小的節點。
    1. 計算出在所有備選節點上運行的Pod和備選Pod的CPU占用量totalMilliCPU。
    2. 計算出在所有備選節點上運行的Pod和備選Pod的記憶體占用量totalMemory。
    3. 計算每個節點的得分,計算規則大致如下,其中,NodeCpuCapacity為節點CPU計算能力,NodeMemoryCapacity為節點記憶體大小。
  • CalculateNodeLabelPriority
如果用戶在配置文件中指定了該策略,則scheduler會通過RegisterCustomPriorityFunction方法註冊該策略。該策略用於判斷策略列出的標簽在備選節點中存在時,是否選擇該備選節點。如果備選節點的標簽在優選策略的標簽列表中且優選策略的presence值為true,或者備選節點的標簽不在優選策略的標簽列表中且優選策略的presence值為false,則備選節點score=10,否則備選節點score=0。
  • BalancedResourceAllocation
該優選策略用於從備選節點列表中選出各項資源使用率最均衡的節點。
    1. 計算出在所有備選節點上運行的Pod和備選Pod的CPU占用量totalMilliCPU。
    2. 計算出在所有備選節點上運行的Pod和備選Pod的記憶體占用量totalMemory。
    3. 計算每個節點的得分,計算規則大致如下,其中,NodeCpuCapacity為節點的CPU計算能力,NodeMemoryCapacity為節點的記憶體大小。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 死鎖問題出現 2. 死鎖的成因 3. 死鎖的4個必要條件 4. 死鎖處理方法 1. 死鎖預防 2. 死鎖避免 判斷這次請求是否會引起死鎖? 演算法實現 死鎖避免之銀行家演算法實例 請求出現時: 首先假裝分配,然後調用銀行家演算法 3. 死鎖檢測+恢復: 發現問題再處理 例題: 4. 死鎖忽略 ...
  • 8. gitlab相關介紹 8.1 gitlab優勢 社區版本,自己可以在公司搭建環境 維護人員多,版本更新塊 易用性強,上手快 集成CI(持續集成) 集成CD(持續發佈) 8.2 持續集成 8.2.1 持續集成的優勢 快速發現錯誤。每完成一點更新,就集成到主幹,可以快速發現錯誤,定位錯誤也比較容易 ...
  • 一、進程描述符 進程式控制制塊PCB:是OS控制進程運行用的數據結構,是一個task_struct結構體。 PCB包括:進程標識信息(進程標識符PID等)、執行現場信息(CPU現場,進程切換時需要保存現場信息)、進程映像信息(進程地址空間,即進程在運行時代碼、數據、棧放在什麼位置,方便OS對地址空間進行 ...
  • 最近使用了parallels desktop 安裝了win10,啟動後發現會導致mac無聲音。後來百度到重啟coreaudiod進程可解決(在活動監視器里直接結束該進程後會自動重啟) 參考鏈接:MAC技巧:兩個方法,輕鬆解決蘋果電腦沒聲音! https://baijiahao.baidu.com/s ...
  • 命令幾乎是每個程式員都會用到的Linux命令。這個命令用來查看Linux系統的綜合性能,比如CPU使用情況,記憶體使用情況。這個命令能幫助我快速定位程式的性能問題。 雖然這個命令很重要,但是之前對於這個命令的使用幾乎僅限於查看下哪個進程使用的CPU最高,哪個進程占用的記憶體最高。對於輸出的各個參數的含義 ...
  • 虛擬機沒有VMnet0 橋接模式,你可以試試以下幾種方式,儘量都試試,因為具體情況原因有很多種!! 首先打開虛擬網路編輯器,發現沒有橋接。。。深吸一口氣,說我沒有毒!!! 一、先右擊開始 網路連接 更改網路適配器,查看一下是否有下麵這倆個 如果沒有,試試最靠命運的方法,重啟主機!!!(win10這樣 ...
  • 一 kube-proxy原理 1.1 kube-proxy概述 Kubernetes為了支持集群的水平擴展、高可用性,抽象出了Service的概念。Service是對一組Pod的抽象,它會根據訪問策略(如負載均衡策略)來訪問這組Pod。Kubernetes在創建Service時會為Service分配 ...
  • 一 kubelet概述 1.1 kubelet作用 在Kubernetes集群中,在每個Node(又稱Minion)上都會啟動一個kubelet服務進程。該進程用於處理Master下發到本節點的任務,管理Pod及Pod中的容器。每個kubelet進程都會在API Server上註冊節點自身的信息,定 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...