溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

K8s動(dòng)態(tài)調(diào)度器怎么配置

發(fā)布時(shí)間:2022-01-11 17:41:12 來(lái)源:億速云 閱讀:174 作者:iii 欄目:云計(jì)算

這篇文章主要講解了“K8s動(dòng)態(tài)調(diào)度器怎么配置”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“K8s動(dòng)態(tài)調(diào)度器怎么配置”吧!

引言

在 K8s 集群運(yùn)營(yíng)過(guò)程中,常常會(huì)被節(jié)點(diǎn) CPU 和內(nèi)存的高使用率所困擾,既影響了節(jié)點(diǎn)上 Pod 的穩(wěn)定運(yùn)行,也會(huì)增加節(jié)點(diǎn)故障的幾率。為了應(yīng)對(duì)集群節(jié)點(diǎn)高負(fù)載的問(wèn)題,平衡各個(gè)節(jié)點(diǎn)之間的資源使用率,應(yīng)該基于節(jié)點(diǎn)的實(shí)際資源利用率監(jiān)控信息,從以下兩個(gè)策略入手:

  • 在 Pod 調(diào)度階段,應(yīng)當(dāng)優(yōu)先將 Pod 調(diào)度到資源利用率低的節(jié)點(diǎn)上運(yùn)行,不調(diào)度到資源利用率已經(jīng)很高的節(jié)點(diǎn)上

  • 在監(jiān)控到節(jié)點(diǎn)資源率較高時(shí),可以自動(dòng)干預(yù),遷移節(jié)點(diǎn)上的一些 Pod 到利用率低的節(jié)點(diǎn)上

為此,我們提供 動(dòng)態(tài)調(diào)度器 + Descheduler 的方案來(lái)實(shí)現(xiàn),目前在公有云 TKE 集群內(nèi)【組件管理】- 【調(diào)度】分類下已經(jīng)提供這兩個(gè)插件的安裝入口,文末還針對(duì)具體的客戶案例提供了最佳實(shí)踐的例子。

動(dòng)態(tài)調(diào)度器

原生的 Kubernetes 調(diào)度器有一些很好的調(diào)度策略用來(lái)應(yīng)對(duì)節(jié)點(diǎn)資源分配不均的問(wèn)題,比如 BalancedResourceAllocation,但是存在一個(gè)問(wèn)題是這樣的資源分配是靜態(tài)的,不能代表資源真實(shí)使用情況,節(jié)點(diǎn)的 CPU/內(nèi)存利用率 經(jīng)常處于不均衡的狀態(tài)。所以,需要有一種策略可以基于節(jié)點(diǎn)的實(shí)際資源利用率進(jìn)行調(diào)度。動(dòng)態(tài)調(diào)度器所做的就是這樣的工作。

K8s動(dòng)態(tài)調(diào)度器怎么配置

技術(shù)原理

原生 K8s 調(diào)度器提供了 scheduler extender 機(jī)制來(lái)提供調(diào)度擴(kuò)展的能力。相比修改原生 scheduler 代碼添加策略,或者實(shí)現(xiàn)一個(gè)自定義的調(diào)度器,使用 scheduler extender 的方式侵入性更少,實(shí)現(xiàn)更加靈活。所以我們選擇基于 scheduler extender 的方式來(lái)添加基于節(jié)點(diǎn)的實(shí)際資源利用率進(jìn)行調(diào)度的策略。

scheduler extender 可以在原生調(diào)度器的預(yù)選和優(yōu)選階段加入自定義的邏輯,提供和原生調(diào)度器內(nèi)部策略同樣的效果。

架構(gòu)

K8s動(dòng)態(tài)調(diào)度器怎么配置

  • node-annotator:負(fù)責(zé)拉取 Prometheus 中的監(jiān)控?cái)?shù)據(jù),定期同步到 Node 的 annotation 里面,同時(shí)負(fù)責(zé)其他邏輯,如動(dòng)態(tài)調(diào)度器調(diào)度有效性衡量指標(biāo),防止調(diào)度熱點(diǎn)等邏輯。

  • dynamic-scheduler:負(fù)責(zé) scheduler extender 的優(yōu)選和預(yù)選接口邏輯實(shí)現(xiàn),在預(yù)選階段過(guò)濾掉資源利用率高于閾值的節(jié)點(diǎn),在優(yōu)選階段優(yōu)先選擇資源利用率低的節(jié)點(diǎn)進(jìn)行調(diào)度。

實(shí)現(xiàn)細(xì)節(jié)

  1. 動(dòng)態(tài)調(diào)度器的策略在優(yōu)選階段的權(quán)重如何配置?

原生調(diào)度器的調(diào)度策略在優(yōu)選階段有一個(gè)權(quán)重配置,每個(gè)策略的評(píng)分乘以權(quán)重得到該策略的總得分。對(duì)權(quán)重越高的策略,符合條件的節(jié)點(diǎn)越容易調(diào)度上。默認(rèn)所有策略配置權(quán)重為 1,為了提升動(dòng)態(tài)調(diào)度器策略的效果,我們把動(dòng)態(tài)調(diào)度器優(yōu)選策略的權(quán)重設(shè)置為 2。

  1. 動(dòng)態(tài)調(diào)度器如何防止調(diào)度熱點(diǎn)?

在集群中,如果出現(xiàn)一個(gè)新增的節(jié)點(diǎn),為了防止新增的節(jié)點(diǎn)調(diào)度上過(guò)多的節(jié)點(diǎn),我們會(huì)通過(guò)監(jiān)聽(tīng)調(diào)度器調(diào)度成功事件,獲取調(diào)度結(jié)果,標(biāo)記每個(gè)節(jié)點(diǎn)過(guò)去一段時(shí)間的調(diào)度 Pod 數(shù),比如 1min、5min、30min 內(nèi)的調(diào)度 Pod 數(shù)量,衡量節(jié)點(diǎn)的熱點(diǎn)值然后補(bǔ)償?shù)焦?jié)點(diǎn)的優(yōu)選評(píng)分中。

產(chǎn)品能力

組件依賴

組件依賴較少,僅依賴基礎(chǔ)的節(jié)點(diǎn)監(jiān)控組件 node-exporter 和 Prometheus。Prometheus 支持托管和自建兩種方式,使用托管方式可以一鍵安裝動(dòng)態(tài)調(diào)度器,而使用自建 Prometheus 也提供了監(jiān)控指標(biāo)配置方法。

K8s動(dòng)態(tài)調(diào)度器怎么配置

組件配置

調(diào)度策略目前可以基于 CPU 和內(nèi)存兩種資源利用率。

預(yù)選階段

K8s動(dòng)態(tài)調(diào)度器怎么配置

配置節(jié)點(diǎn) 5分鐘內(nèi) CPU 利用率、1小時(shí)內(nèi)最大 CPU 利用率,5分鐘內(nèi)平均內(nèi)存利用率,1小時(shí)內(nèi)最大內(nèi)存利用率的閾值,超過(guò)了就會(huì)在預(yù)選階段過(guò)濾節(jié)點(diǎn)。

優(yōu)選階段

K8s動(dòng)態(tài)調(diào)度器怎么配置

動(dòng)態(tài)調(diào)度器優(yōu)選階段的評(píng)分根據(jù)截圖中 6個(gè)指標(biāo)綜合評(píng)分得出,6個(gè)指標(biāo)各自的權(quán)重表示優(yōu)選時(shí)更側(cè)重于哪個(gè)指標(biāo)的值,使用 1h 和 1d 內(nèi)最大利用率的意義是要記錄節(jié)點(diǎn) 1h 和 1d 內(nèi)的利用率峰值,因?yàn)橛械臉I(yè)務(wù) Pod 的峰值周期可能是按照小時(shí)或者天,避免調(diào)度新的 Pod 時(shí)導(dǎo)致在峰值時(shí)間節(jié)點(diǎn)的負(fù)載進(jìn)一步升高。

產(chǎn)品效果

為了衡量動(dòng)態(tài)調(diào)度器對(duì)增強(qiáng) Pod 調(diào)度到低負(fù)載節(jié)點(diǎn)的提升效果,結(jié)合調(diào)度器的實(shí)際調(diào)度結(jié)果,獲取所有調(diào)度到的節(jié)點(diǎn)在調(diào)度時(shí)刻的的 CPU/內(nèi)存利用率以后統(tǒng)計(jì)以下幾個(gè)指標(biāo):

  • cpu_utilization_total_avg :所有調(diào)度到的節(jié)點(diǎn) CPU 利用率平均值。

  • memory_utilization_total_avg :所有調(diào)度到的節(jié)點(diǎn)內(nèi)存利用率平均值。

  • effective_dynamic_schedule_count :有效調(diào)度次數(shù),當(dāng)調(diào)度到節(jié)點(diǎn)的 CPU 利用率小于當(dāng)前所有節(jié)點(diǎn) CPU 利用率的中位數(shù),我們認(rèn)為這是一次有效調(diào)度,effective_dynamic_schedule_count 加 0.5分,對(duì)內(nèi)存也是同理。

  • total_schedule_count :所有調(diào)度次數(shù),每次新的調(diào)度累加1。

  • effective_schedule_ratio :有效調(diào)度比率,即 effective_dynamic_schedule_count/total_schedule_count 下面是在同一集群中不開(kāi)啟動(dòng)態(tài)調(diào)度和開(kāi)啟動(dòng)態(tài)調(diào)度各自運(yùn)行一周的指標(biāo)變化,可以看到對(duì)于集群調(diào)度的增強(qiáng)效果。

指標(biāo)未開(kāi)啟動(dòng)態(tài)調(diào)度開(kāi)啟動(dòng)態(tài)調(diào)度
cpu_utilization_total_avg0.300.17
memory_utilization_total_avg0.280.23
effective_dynamic_schedule_count21603620
total_schedule_count78607470
effective_schedule_ratio0.2730.486

Descheduler

現(xiàn)有的集群調(diào)度場(chǎng)景都是一次性調(diào)度,即一錘子買賣。后續(xù)出現(xiàn)節(jié)點(diǎn) CPU 和內(nèi)存利用率過(guò)高,也無(wú)法自動(dòng)調(diào)整 Pod 的分布,除非觸發(fā)節(jié)點(diǎn)的 eviction manager 后驅(qū)逐,或者人工干預(yù)。這樣在節(jié)點(diǎn) CPU/內(nèi)存利用率高時(shí),影響了節(jié)點(diǎn)上所有 Pod 的穩(wěn)定性,而且負(fù)載低的節(jié)點(diǎn)資源還被浪費(fèi)。

針對(duì)此場(chǎng)景,借鑒 K8s 社區(qū) Descheduler 重調(diào)度的設(shè)計(jì)思想,給出基于各節(jié)點(diǎn) CPU/內(nèi)存實(shí)際利用率進(jìn)行驅(qū)逐的策略。

架構(gòu)

K8s動(dòng)態(tài)調(diào)度器怎么配置

Descheduler 從 apiserver 中獲取 Node 和 Pod 信息,從 Prometheus 中獲取 Node 和 Pod 監(jiān)控信息,然后經(jīng)過(guò)Descheduler 的驅(qū)逐策略,驅(qū)逐 CPU/內(nèi)存使用率高的節(jié)點(diǎn)上的 Pod ,同時(shí)我們加強(qiáng)了 Descheduler 驅(qū)逐 Pod 時(shí)的排序規(guī)則和檢查規(guī)則,確保驅(qū)逐 Pod 時(shí)服務(wù)不會(huì)出現(xiàn)故障。驅(qū)逐后的 Pod 經(jīng)過(guò)動(dòng)態(tài)調(diào)度器的調(diào)度會(huì)被調(diào)度到低水位的節(jié)點(diǎn)上,實(shí)現(xiàn)降低高水位節(jié)點(diǎn)故障率,提升整體資源利用率的目的。

產(chǎn)品能力

產(chǎn)品依賴

依賴基礎(chǔ)的節(jié)點(diǎn)監(jiān)控組件 node-exporter 和Prometheus。Prometheus 支持托管和自建兩種方式,使用托管方式可以一鍵安裝 Descheduler,使用自建 Prometheus 也提供了監(jiān)控指標(biāo)配置方法。

組件配置

K8s動(dòng)態(tài)調(diào)度器怎么配置

Descheduler 根據(jù)用戶配置的利用率閾值,超過(guò)閾值水位后開(kāi)始驅(qū)逐 Pod ,使節(jié)點(diǎn)負(fù)載盡量降低到目標(biāo)利用率水位以下。

產(chǎn)品效果

通過(guò) K8s 事件

通過(guò) K8s 事件可以看到 Pod 被重調(diào)度的信息,所以可以開(kāi)啟集群事件持久化功能來(lái)查看 Pod 驅(qū)逐歷史。

K8s動(dòng)態(tài)調(diào)度器怎么配置

節(jié)點(diǎn)負(fù)載變化

在類似如下節(jié)點(diǎn) CPU 使用率監(jiān)控視圖內(nèi),可以看到在開(kāi)始驅(qū)逐之后,節(jié)點(diǎn)的 CPU 利用率下降。

K8s動(dòng)態(tài)調(diào)度器怎么配置

最佳實(shí)踐

集群狀態(tài)

拿一個(gè)客戶的集群為例,由于客戶的業(yè)務(wù)大多是內(nèi)存消耗型的,所以更容易出現(xiàn)內(nèi)存利用率很高的節(jié)點(diǎn),各個(gè)節(jié)點(diǎn)的內(nèi)存利用率也很不平均,未使用動(dòng)態(tài)調(diào)度器之前的各個(gè)節(jié)點(diǎn)監(jiān)控是這樣的: K8s動(dòng)態(tài)調(diào)度器怎么配置

動(dòng)態(tài)調(diào)度器配置

配置預(yù)選和優(yōu)選階段的參數(shù)如下:

K8s動(dòng)態(tài)調(diào)度器怎么配置

在預(yù)選階段過(guò)濾掉 5分鐘內(nèi)平均內(nèi)存利用率超過(guò) 60%或者 1h內(nèi)最大內(nèi)存利用率超過(guò) 70%的節(jié)點(diǎn),即 Pod 不會(huì)調(diào)度到這些這些節(jié)點(diǎn)上。

K8s動(dòng)態(tài)調(diào)度器怎么配置

在優(yōu)選階段將 5分鐘平均內(nèi)存利用率權(quán)重配置為 0.8,1h 和1d 內(nèi)最大內(nèi)存利用率權(quán)重配置為 0.2、0.2,而將 CPU 的指標(biāo)權(quán)重都配置為 0.1。這樣優(yōu)選時(shí)更優(yōu)先選擇調(diào)度到內(nèi)存利用率低的節(jié)點(diǎn)上。

Descheduler配置

K8s動(dòng)態(tài)調(diào)度器怎么配置

配置 Descheduler 的參數(shù)如下,當(dāng)節(jié)點(diǎn)內(nèi)存利用率超過(guò) 80%這個(gè)閾值的時(shí)候,Descheduler 開(kāi)始對(duì)節(jié)點(diǎn)上的 Pod 進(jìn)行驅(qū)逐,盡量使節(jié)點(diǎn)內(nèi)存利用率降低到目標(biāo)值 60% 為止。

集群優(yōu)化后狀態(tài)

通過(guò)以上的配置,運(yùn)行一段時(shí)間后,集群內(nèi)各節(jié)點(diǎn)的內(nèi)存利用率數(shù)據(jù)如下,可以看到集群節(jié)點(diǎn)的內(nèi)存利用率分布已經(jīng)趨向于均衡:

K8s動(dòng)態(tài)調(diào)度器怎么配置

感謝各位的閱讀,以上就是“K8s動(dòng)態(tài)調(diào)度器怎么配置”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)K8s動(dòng)態(tài)調(diào)度器怎么配置這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

k8s
AI