做網(wǎng)站建設(shè)的公司有哪些方面建設(shè)網(wǎng)站公司
1、資源與調(diào)度
調(diào)度是容器編排系統(tǒng)最核心的功能之一,“編排”一詞本身便包 含“調(diào)度”的含義。調(diào)度是指為新創(chuàng)建的Pod找到一個(gè)最恰當(dāng)?shù)乃拗鳈C(jī) 節(jié)點(diǎn)來(lái)運(yùn)行它,這個(gè)過(guò)程成功與否、結(jié)果恰當(dāng)與否,關(guān)鍵取決于容器 編排系統(tǒng)是如何管理與分配集群節(jié)點(diǎn)的資源的??梢哉J(rèn)為調(diào)度是必須 以容器編排系統(tǒng)的資源管控為前提,那我們就先從Kubernetes的資源 模型談起。
2、資源
在Kubernetes中,資源是一個(gè)廣義的概念,涵蓋了系統(tǒng)中所有能夠接觸到的方方面面。廣義上,Kubernetes系統(tǒng)中的資源包括工作負(fù)荷(如Pod、ReplicaSet、Service等)、存儲(chǔ)(如Volume、PersistentVolume、Secret等)、策略(如SecurityContext、ResourceQuota、LimitRange等)、身份(如ServiceAccount、Role、ClusterRole等)。這種“一切皆為資源”的設(shè)計(jì)使得Kubernetes能夠順利實(shí)施聲明式API,為系統(tǒng)建立了一套囊括抽象元素和物理元素的領(lǐng)域特定語(yǔ)言。通過(guò)不同層級(jí)間資源的使用
資源模型
資源模型是Kubernetes設(shè)計(jì)的核心之一。在Kubernetes中,資源被廣泛抽象化,涵蓋了系統(tǒng)中的所有組件。這些資源不僅包括物理資源(如處理器、內(nèi)存、存儲(chǔ)等),還包括邏輯資源(如工作負(fù)載、策略、身份等)。這種設(shè)計(jì)使得Kubernetes能夠通過(guò)聲明式API進(jìn)行管理,實(shí)現(xiàn)了靈活的資源調(diào)度和管理。
物理資源
物理資源包括處理器、內(nèi)存、磁盤存儲(chǔ)等,這些資源直接與底層硬件相對(duì)應(yīng)。
-
計(jì)算資源:包括處理器(CPU)和內(nèi)存。處理器資源被稱為可壓縮資源(Compressible Resource),當(dāng)處理器資源不足時(shí),Pod的運(yùn)行速度會(huì)變慢,但不會(huì)被系統(tǒng)直接終止。內(nèi)存資源則被稱為不可壓縮資源(Incompressible Resource),當(dāng)內(nèi)存資源不足時(shí),Pod會(huì)因?yàn)閮?nèi)存溢出(Out-Of-Memory, OOM)而被系統(tǒng)直接終止。
-
存儲(chǔ)資源:包括各種類型的磁盤存儲(chǔ),如本地磁盤、NFS、云存儲(chǔ)等。這些資源在Kubernetes中通過(guò)Volume進(jìn)行管理和使用。
-
網(wǎng)絡(luò)資源:包括網(wǎng)絡(luò)帶寬和網(wǎng)絡(luò)地址。這些資源通常用于確保Pod之間以及Pod與外部系統(tǒng)之間的網(wǎng)絡(luò)通信。
資源供需關(guān)系
在Kubernetes的資源模型中,Node是資源的提供者,而Pod是資源的使用者。調(diào)度的核心任務(wù)就是將Pod與合適的Node進(jìn)行匹配。
-
Node:每個(gè)Node提供一定數(shù)量的計(jì)算資源、存儲(chǔ)資源和網(wǎng)絡(luò)資源。這些資源通過(guò)Node對(duì)象進(jìn)行描述和管理。
-
Pod:Pod是Kubernetes中最小的調(diào)度單元,一個(gè)Pod可以包含一個(gè)或多個(gè)容器。Pod通過(guò)聲明其所需的資源(如CPU、內(nèi)存)與Node的資源進(jìn)行匹配。調(diào)度器根據(jù)Pod的資源需求和Node的資源狀況,選擇最合適的Node來(lái)運(yùn)行Pod。
3、服務(wù)質(zhì)量與優(yōu)先級(jí)
Kubernetes中的服務(wù)質(zhì)量(Quality of Service, QoS)和優(yōu)先級(jí)機(jī)制,用于管理資源分配和使用,確保關(guān)鍵任務(wù)能夠獲得足夠的資源。
服務(wù)質(zhì)量分類
Kubernetes將Pod的服務(wù)質(zhì)量分為三類:Guaranteed、Burstable和BestEffort。這三類服務(wù)質(zhì)量對(duì)應(yīng)不同的資源分配策略。
-
Guaranteed:當(dāng)Pod的所有容器都指定了相同的CPU和內(nèi)存請(qǐng)求值和限制值時(shí),該P(yáng)od被分類為Guaranteed。這類Pod具有最高的優(yōu)先級(jí),能夠確保獲得其請(qǐng)求的所有資源。
-
Burstable:當(dāng)Pod的容器指定了請(qǐng)求值,但沒(méi)有指定限制值時(shí),該P(yáng)od被分類為Burstable。這類Pod在資源充足時(shí)能夠獲得更多資源,但在資源緊張時(shí),可能會(huì)被系統(tǒng)限制其資源使用。
-
BestEffort:當(dāng)Pod的所有容器都沒(méi)有指定CPU和內(nèi)存請(qǐng)求值時(shí),該P(yáng)od被分類為BestEffort。這類Pod具有最低的優(yōu)先級(jí),只能在資源充足時(shí)獲得資源。
優(yōu)先級(jí)與搶占
優(yōu)先級(jí)和搶占機(jī)制用于確保高優(yōu)先級(jí)的Pod能夠獲得必要的資源。
-
Pod優(yōu)先級(jí):每個(gè)Pod可以設(shè)置一個(gè)優(yōu)先級(jí),表示其相對(duì)重要性。調(diào)度器在選擇節(jié)點(diǎn)時(shí),會(huì)優(yōu)先考慮高優(yōu)先級(jí)的Pod。
-
搶占機(jī)制:當(dāng)高優(yōu)先級(jí)Pod無(wú)法找到合適的節(jié)點(diǎn)時(shí),調(diào)度器會(huì)嘗試通過(guò)搶占低優(yōu)先級(jí)Pod的資源來(lái)滿足高優(yōu)先級(jí)Pod的需求。被搶占的Pod會(huì)被終止,釋放其占用的資源。
驅(qū)逐機(jī)制
驅(qū)逐機(jī)制是Kubernetes確保系統(tǒng)穩(wěn)定性和性能的重要手段。當(dāng)節(jié)點(diǎn)資源緊張或Pod運(yùn)行狀態(tài)異常時(shí),系統(tǒng)會(huì)驅(qū)逐一些Pod,以釋放資源和恢復(fù)正常運(yùn)行。
4、 節(jié)點(diǎn)壓力驅(qū)逐
當(dāng)節(jié)點(diǎn)的資源(如CPU、內(nèi)存)使用達(dá)到閾值時(shí),Kubernetes會(huì)驅(qū)逐部分Pod,以緩解節(jié)點(diǎn)壓力。
-
內(nèi)存壓力驅(qū)逐:當(dāng)節(jié)點(diǎn)內(nèi)存不足時(shí),系統(tǒng)會(huì)優(yōu)先驅(qū)逐B(yǎng)estEffort和Burstable Pod,以釋放內(nèi)存資源。Guaranteed Pod通常不會(huì)被驅(qū)逐,除非所有其他Pod都被驅(qū)逐后,仍無(wú)法緩解內(nèi)存壓力。
-
磁盤壓力驅(qū)逐:當(dāng)節(jié)點(diǎn)的磁盤使用達(dá)到閾值時(shí),系統(tǒng)會(huì)驅(qū)逐Pod,以釋放磁盤空間。被驅(qū)逐的Pod通常是那些使用大量臨時(shí)存儲(chǔ)的Pod。
Pod狀態(tài)驅(qū)逐
當(dāng)Pod運(yùn)行狀態(tài)異常時(shí),Kubernetes也會(huì)驅(qū)逐這些Pod,以確保系統(tǒng)的整體健康。
- 健康檢查:Kubernetes通過(guò)liveness probe和readiness probe對(duì)Pod進(jìn)行健康檢查。當(dāng)Pod的健康檢查失敗時(shí),系統(tǒng)會(huì)將其標(biāo)記為不健康,并可能將其驅(qū)逐。
?默認(rèn)調(diào)度器
Kubernetes的默認(rèn)調(diào)度器是Pod調(diào)度的核心組件,負(fù)責(zé)將新創(chuàng)建的Pod分配到合適的節(jié)點(diǎn)上運(yùn)行。
調(diào)度算法
默認(rèn)調(diào)度器使用一組算法來(lái)確定Pod的最佳運(yùn)行節(jié)點(diǎn)。這些算法分為兩類:Predicate算法和Priority算法。
-
Predicate算法:用于篩選符合Pod資源需求的節(jié)點(diǎn)。常見(jiàn)的Predicate算法包括檢查節(jié)點(diǎn)的可用資源、節(jié)點(diǎn)端口沖突、節(jié)點(diǎn)親和性等。
-
Priority算法:用于在符合條件的節(jié)點(diǎn)中選擇最佳節(jié)點(diǎn)。常見(jiàn)的Priority算法包括LeastRequestedPriority(選擇資源使用最少的節(jié)點(diǎn))、BalancedResourceAllocation(選擇資源分配最均衡的節(jié)點(diǎn))等。
?調(diào)度流程
默認(rèn)調(diào)度器的調(diào)度流程包括以下步驟:
- 接收調(diào)度請(qǐng)求:當(dāng)新Pod創(chuàng)建時(shí),調(diào)度器接收調(diào)度請(qǐng)求,并將Pod加入調(diào)度隊(duì)列。
- 節(jié)點(diǎn)篩選:使用Predicate算法篩選出符合Pod資源需求的節(jié)點(diǎn)。
- 節(jié)點(diǎn)打分:使用Priority算法對(duì)篩選出的節(jié)點(diǎn)進(jìn)行打分,并選擇得分最高的節(jié)點(diǎn)。
- 綁定節(jié)點(diǎn):將Pod綁定到選定的節(jié)點(diǎn)上,通知kubelet在該節(jié)點(diǎn)上創(chuàng)建Pod。
調(diào)度性能優(yōu)化
在大規(guī)模集群中,調(diào)度性能是一個(gè)關(guān)鍵問(wèn)題。Kubernetes通過(guò)以下機(jī)制來(lái)優(yōu)化調(diào)度性能:
-
調(diào)度緩存:調(diào)度器維護(hù)一個(gè)調(diào)度緩存,記錄所有節(jié)點(diǎn)的資源使用情況,避免頻繁的遠(yuǎn)程調(diào)用,提高調(diào)度效率。
-
狀態(tài)共享的雙循環(huán)調(diào)度機(jī)制:Kubernetes采用Informer Loop和Scheduler Loop兩個(gè)控制循環(huán),分別負(fù)責(zé)監(jiān)控資源變化和執(zhí)行調(diào)度任務(wù),確保調(diào)度器能夠?qū)崟r(shí)響應(yīng)集群狀態(tài)的變化。
總結(jié)
第十四章詳細(xì)介紹了Kubernetes的資源模型、服務(wù)質(zhì)量與優(yōu)先級(jí)、驅(qū)逐機(jī)制和默認(rèn)調(diào)度器。這些機(jī)制共同構(gòu)成了Kubernetes高效、靈活的資源調(diào)度體系,確保了集群的穩(wěn)定性和性能。通過(guò)對(duì)物理資源的精細(xì)管理和調(diào)度算法的優(yōu)化,Kubernetes能夠在大規(guī)模集群中高效運(yùn)行,滿足各種復(fù)雜應(yīng)用的需求。