kubernetes(二)

前序

集群當(dāng)中,我們很少直接創(chuàng)建一個 pod 來啟動應(yīng)用服務(wù)计呈,而是通過控制器來創(chuàng)建 pod 從而運行應(yīng)用實例掌挚,比如: Deployment雨席、DaemonSet、Job 等控制器完成對一組 Pod 副本的創(chuàng)建吠式。
在大多數(shù)情況下我們使用 Deployment 控制創(chuàng)建 pod 的時候 pod 的副本集會被成功的調(diào)度在集群中任意一個可用的節(jié)點上運行陡厘,而忽略了副本集具體會被調(diào)度到那個節(jié)點上抽米,但是在真正的生產(chǎn)環(huán)境中也會存在一定的需求,比如希望某個 pod 運行在指定的節(jié)點上糙置,或者集群資源的利用率過高無法再運行 pod云茸,但是這個 pod 又非常重要必須要運行到節(jié)點當(dāng)中,此時就可以通過 pod 的調(diào)度策略來解決以上問題谤饭。
Scheduler 是 kubernetes 的調(diào)度器标捺,主要的任務(wù)是把定義的 pod 分配到集群的節(jié)點上。聽起來非常簡單揉抵,但有很多要考慮的問題:
(1)公平:如何保證每個節(jié)點都能被分配資源
(2)資源高效利用:集群所有資源最大化被使用
(3)效率:調(diào)度的性能要好亡容,能夠盡快地對大批量的 pod 完成調(diào)度工作
(4)靈活:允許用戶根據(jù)自己的需求控制調(diào)度的邏輯

Kubernetes 調(diào)度原理概述

Kubernetes 調(diào)度過程可以分為以下幾個階段:

調(diào)度的基本過程

  • Pod 提交到 API Server
    當(dāng)一個 Pod 被創(chuàng)建時,它會通過 Kubernetes API Server 進(jìn)入調(diào)度隊列功舀,等待調(diào)度器選擇合適的節(jié)點來運行萍倡。

  • 調(diào)度器選擇節(jié)點
    Kubernetes 使用調(diào)度器(Scheduler)來選擇節(jié)點身弊。調(diào)度器需要根據(jù) Pod 的要求(如資源辟汰、親和性、反親和性阱佛、污點和容忍等)選擇一個合適的節(jié)點帖汞。

  • Pod 到節(jié)點的綁定
    調(diào)度器選擇節(jié)點后,會將 Pod 綁定到該節(jié)點凑术,并向 API Server 更新該 Pod 的狀態(tài)翩蘸。

  • 容器調(diào)度執(zhí)行
    節(jié)點上的 kubelet 會接收到該 Pod,并開始拉取容器鏡像淮逊,最終啟動容器催首。

調(diào)度器的決策過程

Kubernetes 調(diào)度器的決策過程主要包括以下幾個步驟:

  • 篩選階段(Filtering)
    調(diào)度器根據(jù) Pod 的資源需求、節(jié)點的資源容量以及其他約束條件泄鹏,篩選出一組符合要求的節(jié)點郎任。這些條件包括:
    (1)節(jié)點的資源(CPU、內(nèi)存备籽、存儲等)是否足夠舶治;
    (2)節(jié)點是否滿足 Pod 的節(jié)點選擇器(Node Selector)要求;
    (3)節(jié)點是否滿足親和性(Affinity)和反親和性(Anti-Affinity)等規(guī)則车猬;
    (4)節(jié)點是否具備指定的標(biāo)簽霉猛;
    (5)節(jié)點是否有足夠的網(wǎng)絡(luò)帶寬等。

篩選有一系列的算法可以使用:

  • PodFitsResources:節(jié)點上剩余的資源是否大于 pod 請求的資源

  • PodFitsHost:如果 pod 指定了 NodeName珠闰,檢查節(jié)點名稱是否和 NodeName 匹配

  • PodFitsHostPorts:節(jié)點上已經(jīng)使用的 port 是否和 pod 申請的 port 沖突

  • PodSelectorMatches:過濾掉和 pod 指定的 label 不匹配的節(jié)點

  • NoDiskConflict:已經(jīng) mount 的 volume 和 pod 指定的 volume 不沖突惜浅,除非它們都是只讀

    如果在預(yù)選過程中沒有合適的節(jié)點,pod 會一直在 pending 狀態(tài)伏嗜,不斷重試調(diào)度坛悉,直到有節(jié)點滿足條件杭朱。經(jīng)過這個步驟,如果有多個節(jié)點滿足條件吹散,就繼續(xù) 優(yōu)選 過程: 按照優(yōu)先級大小對節(jié)點排序弧械。

  • 優(yōu)選階段(Ranking)
    調(diào)度器會對篩選出來的節(jié)點進(jìn)行排序,選擇最優(yōu)的節(jié)點空民。
    優(yōu)選的標(biāo)準(zhǔn)包括:
    (1)最小化資源的浪費刃唐;
    (2)最大化資源的利用率;
    (3)節(jié)點的負(fù)載均衡界轩;
    (4)節(jié)點的健康狀態(tài)画饥;
    (5)節(jié)點的可擴(kuò)展性等。

對應(yīng)的優(yōu)先級選項包括:
(1)LeastRequestedPriority:通過計算 CPU 和 Memory 的使用率來決定權(quán)重浊猾,使用率越低權(quán)重越高抖甘。換句話說,這個優(yōu)先級指標(biāo)傾向于資源使用比例更低的節(jié)點
(2)BalancedResourceAllocation:節(jié)點上 CPU 和 Memory 使用率越接近葫慎,權(quán)重越高衔彻。這個應(yīng)該和上面的一起使用,不應(yīng)該單獨使用
(3)ImageLocalityPriority:傾向于已經(jīng)有要使用鏡像的節(jié)點偷办,鏡像總大小值越大艰额,權(quán)重越高

通過算法對所有的優(yōu)先級項目和權(quán)重進(jìn)行計算,得出最終的結(jié)果椒涯,調(diào)度器將選擇一個節(jié)點來運行 Pod柄沮,并更新該 Pod 的狀態(tài)。

調(diào)度策略和調(diào)度器擴(kuò)展

Kubernetes 允許用戶通過多種方式定制和擴(kuò)展調(diào)度策略废岂,以滿足不同的需求祖搓。

親和性和反親和性

  • 節(jié)點親和性(Node Affinity)
    節(jié)點親和性允許用戶根據(jù)節(jié)點的標(biāo)簽來約束 Pod 運行的節(jié)點。例如湖苞,可以配置某個 Pod 必須運行在具有特定標(biāo)簽(如 zone=us-west-1)的節(jié)點上拯欧。

  • Pod 親和性與反親和性(Pod Affinity and Anti-Affinity)
    Pod 親和性允許用戶指定某些 Pod 必須或不能與其他 Pod 一起運行袒啼。反親和性通常用于確保某些服務(wù)的高可用性,例如將副本部署在不同的節(jié)點上蚓再。

污點和容忍性(Taints and Tolerations)

  • 污點:節(jié)點可以設(shè)置污點,標(biāo)識節(jié)點不能接受某些 Pod摘仅。污點通常用于標(biāo)記節(jié)點的特殊性或不可用狀態(tài)(例如:維護(hù)狀態(tài)靶庙、硬件故障等)。
  • 容忍性:Pod 可以聲明容忍某些污點六荒,這使得它能夠在這些節(jié)點上調(diào)度。

資源請求和限制

  • 請求(Requests):Pod 對資源的最低要求掏击。當(dāng)一個 Pod 被調(diào)度時卵皂,Kubernetes 會確保節(jié)點上有足夠的資源來滿足這些請求。
  • 限制(Limits):Pod 可以設(shè)置資源的最大限制砚亭,防止容器消耗過多資源導(dǎo)致節(jié)點資源耗盡灯变。

調(diào)度策略的擴(kuò)展

Kubernetes 允許通過 調(diào)度器插件 或 自定義調(diào)度器 來擴(kuò)展調(diào)度邏輯捅膘。例如,可以通過調(diào)度器插件來處理復(fù)雜的調(diào)度需求刃泌,如節(jié)點的資源預(yù)測署尤、負(fù)載均衡優(yōu)化、不同工作負(fù)載的優(yōu)先級管理等沐寺。

大規(guī)模集群中的性能優(yōu)化

在大規(guī)模 Kubernetes 集群中,調(diào)度器的性能至關(guān)重要混坞。隨著節(jié)點數(shù)和 Pod 數(shù)量的增加钢坦,調(diào)度的復(fù)雜性急劇上升,可能導(dǎo)致調(diào)度延遲厨诸、資源浪費甚至系統(tǒng)不穩(wěn)定禾酱。因此,優(yōu)化 Kubernetes 調(diào)度器的性能變得尤為重要颤陶。

優(yōu)化

優(yōu)化調(diào)度延遲

  • 調(diào)度器高可用和擴(kuò)展性:可以通過增加調(diào)度器副本數(shù)量(通過 kube-scheduler 的高可用部署)來提高調(diào)度器的吞吐量和容錯性。此外垦江,可以通過水平擴(kuò)展多個調(diào)度器來分擔(dān)負(fù)載搅方。

  • 調(diào)度器的緩存機(jī)制:Kubernetes 調(diào)度器需要頻繁訪問集群的狀態(tài)信息绽族,包括節(jié)點信息衩藤、Pod 信息、資源使用情況等赏表。優(yōu)化調(diào)度器的緩存機(jī)制,減少不必要的查詢岁诉,可以顯著降低調(diào)度延遲跋选。

  • Pod 分配優(yōu)先級:為了避免調(diào)度延遲過長涕癣,可以根據(jù) Pod 的優(yōu)先級和緊急性進(jìn)行排序坠韩,優(yōu)先調(diào)度那些需要及時啟動的 Pod炼列。

優(yōu)化資源利用

  • 資源需求精確化:合理配置 Pod 的資源請求和限制,以避免資源的過度分配和浪費俭尖。可以通過使用 Vertical Pod Autoscaler(VPA) 來自動調(diào)整 Pod 的資源請求和限制稽犁。

  • 負(fù)載均衡:合理的負(fù)載均衡策略能夠確保節(jié)點負(fù)載均衡,避免某些節(jié)點過載熊赖,而其他節(jié)點閑置虑椎。可以使用 Pod Affinity/Anti-Affinity 或 Node Affinity 來優(yōu)化調(diào)度捆姜,提高資源利用率。

  • 混合負(fù)載調(diào)度:在大規(guī)模集群中墨缘,不同類型的工作負(fù)載(如批處理、實時處理镊讼、Web 服務(wù)等)可能有不同的資源需求和時效性。使用不同的調(diào)度策略卸亮,如優(yōu)先級隊列玩裙、QoS(服務(wù)質(zhì)量)等,來區(qū)分并優(yōu)化不同類型的 Pod 調(diào)度溶诞。

集群管理與監(jiān)控

  • 集群監(jiān)控與自動化調(diào)度:結(jié)合 Prometheus 和 Grafana 等監(jiān)控工具决侈,對集群資源和調(diào)度過程進(jìn)行實時監(jiān)控±蹈瑁可以基于監(jiān)控數(shù)據(jù)動態(tài)調(diào)整調(diào)度策略,避免某些節(jié)點資源過度或不足孽亲,確保集群的高效運行展父。

  • 集群規(guī)模化管理:當(dāng)集群規(guī)模增大時旭等,可以通過將集群劃分為多個小的子集群(如多租戶環(huán)境)來降低調(diào)度復(fù)雜度衡载。使用 Cluster Federation 或 Multi-cluster 策略來管理跨集群的調(diào)度和資源隙袁。

調(diào)度器優(yōu)化策略

  • 改進(jìn)調(diào)度算法:調(diào)度器的核心是調(diào)度算法,改進(jìn)調(diào)度算法(如動態(tài)調(diào)度菩收、基于成本的調(diào)度等)可以減少調(diào)度的復(fù)雜度。例如娜饵,針對大規(guī)模集群,可以使用基于啟發(fā)式算法、機(jī)器學(xué)習(xí)或預(yù)測模型的調(diào)度算法來優(yōu)化 Pod 的調(diào)度決策拳亿。

  • 延遲控制:大規(guī)模集群中的調(diào)度延遲可能會影響系統(tǒng)響應(yīng)時間愿伴。通過減少不必要的調(diào)度決策、合并調(diào)度任務(wù)和預(yù)先分配資源來減少調(diào)度延遲鹅经。

資源監(jiān)控與自動擴(kuò)展

  • Horizontal Pod Autoscaler (HPA):Kubernetes 提供了 HPA 用于基于 CPU怎诫、內(nèi)存等資源的使用情況自動調(diào)整 Pod 的副本數(shù)。通過合理配置 HPA蹦误,可以確保 Pod 在負(fù)載高峰期有足夠的副本來處理請求涌哲。

  • Cluster Autoscaler:Cluster Autoscaler 用于自動調(diào)整集群節(jié)點數(shù),根據(jù)集群負(fù)載的變化自動增加或減少節(jié)點數(shù)量阀圾。這可以在保證資源充足的情況下減少不必要的節(jié)點開銷。

總結(jié)

Kubernetes 的調(diào)度系統(tǒng)是集群運行的核心部分涡真,確保了容器的高效調(diào)度和資源的合理分配肾筐。在大規(guī)模集群中,調(diào)度的復(fù)雜性和性能要求更高东亦,因此優(yōu)化調(diào)度器的策略至關(guān)重要唬渗。通過靈活的調(diào)度策略、優(yōu)化調(diào)度算法镊逝、精確的資源管理和集群監(jiān)控,可以有效提高集群的性能歹啼,保證系統(tǒng)的穩(wěn)定性與高效運行。

調(diào)度原理與性能優(yōu)化的結(jié)合狸眼,是 Kubernetes 在大規(guī)模集群中順利運行的關(guān)鍵所在。隨著集群規(guī)模的擴(kuò)大也榄,對調(diào)度器的優(yōu)化需求將不斷增長司志,未來的 Kubernetes 調(diào)度器可能會更加智能化、自動化囚霸,適應(yīng)不同的業(yè)務(wù)需求和資源變化激才。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市劣挫,隨后出現(xiàn)的幾起案子东帅,更是在濱河造成了極大的恐慌,老刑警劉巖靠闭,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愧膀,死亡現(xiàn)場離奇詭異,居然都是意外死亡檩淋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熬芜,“玉大人福稳,你說我怎么就攤上這事」呐。” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵钮糖,是天一觀的道長酌住。 經(jīng)常有香客問我,道長酪我,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任秩伞,我火速辦了婚禮欺矫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脸爱。我一直安慰自己毡代,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布捏鱼。 她就那樣靜靜地躺著酪耕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迂烁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天藏斩,我揣著相機(jī)與錄音却盘,去河邊找鬼媳拴。 笑死兆览,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的子巾。 我是一名探鬼主播小压,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缠导!你這毒婦竟也來了溉痢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤髓削,失蹤者是張志新(化名)和其女友劉穎镀娶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梯码,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡轩娶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年鳄抒,在試婚紗的時候發(fā)現(xiàn)自己被綠了闯捎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片许溅。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贤重,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出并蝗,到底是詐尸還是另有隱情耐朴,我是刑警寧澤盹憎,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布陪每,位于F島的核電站镰吵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疤祭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一戏售、第九天 我趴在偏房一處隱蔽的房頂上張望草穆。 院中可真熱鬧,春花似錦悲柱、人聲如沸锋喜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至功偿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間共耍,已是汗流浹背吨瞎。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留字旭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓拍柒,卻偏偏與公主長得像屈暗,于是被迫代替她去往敵國和親拆讯。 傳聞我的和親對象是個殘疾皇子养叛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容