K8s 集群容量 - kluster capacity
背景
容器平臺(tái)的三個(gè)價(jià)值:穩(wěn)定性、效率、成本,都離不開(kāi)容量管理。容量管理是 Kubernetes 集群管理中非常重要的一部分。它可以確保系統(tǒng)中的資源得到合理的分配和使用,避免了因資源不足或浪費(fèi)導(dǎo)致的系統(tǒng)運(yùn)行異?;蛐实拖碌膯?wèn)題。通過(guò)容量管理,可以更好地控制和優(yōu)化系統(tǒng)資源的利用,保證 Kubernetes 集群的穩(wěn)定性和可靠性。容量管理還可以幫助管理員對(duì)系統(tǒng)進(jìn)行更好的規(guī)劃和預(yù)測(cè),避免因資源不足而需要緊急擴(kuò)容的情況出現(xiàn),從而提高了系統(tǒng)的可維護(hù)性和可靠性。
面臨的問(wèn)題
K8s 集群管理員或多或少會(huì)被如下問(wèn)題所困擾:
- 不清楚當(dāng)前集群資源使用或者剩余容量處于什么水位;
- 不清楚當(dāng)前集群資源浪費(fèi)情況如何;
- 不清楚當(dāng)前集群資源碎片程度如何;
- 不清楚如何設(shè)置調(diào)度策略配置值以提升資源利用效率;
- ...
資源是一個(gè)典型的可量化的指標(biāo),上述問(wèn)題均可以做到可量化,我們?nèi)鄙俚闹皇且粋€(gè)好用的工具。
項(xiàng)目介紹
kluster-capacity[1] 旨在通過(guò)模擬線上真實(shí)調(diào)度器的能力來(lái)解決上述問(wèn)題,目前已經(jīng)支持三個(gè)能力:容量評(píng)估,調(diào)度模擬,集群壓縮。
容量評(píng)估
介紹
隨著集群中節(jié)點(diǎn)上新的 Pod 被調(diào)度,消耗的資源越來(lái)越多。監(jiān)控集群中可用的資源非常重要,因?yàn)檫\(yùn)維人員可以及時(shí)增加當(dāng)前的資源,以免所有資源都耗盡。或者,采取不同的步驟來(lái)增加可用資源。
集群容量包括單個(gè)集群節(jié)點(diǎn)的容量。容量涵蓋了 CPU、內(nèi)存、磁盤空間和其他資源。
整體剩余可分配容量是一個(gè)估計(jì)值。目標(biāo)是分析剩余可分配的資源并估計(jì)可用容量,即可以在集群中安排給定資源需求的 Pod 實(shí)例數(shù)量。
增強(qiáng)
以下是對(duì)原集群容量的一些增強(qiáng)功能:
- 支持直接從集群中使用現(xiàn)有的 Pod 作為 Pod 模板。
- 支持針對(duì)不同的 Pod 模板進(jìn)行批量模擬。
運(yùn)行
更多運(yùn)行參數(shù)及功能,請(qǐng)執(zhí)行如下命令:
演示
假設(shè)集群運(yùn)行有 4 個(gè)節(jié)點(diǎn)和 1 個(gè)主節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)有 2 個(gè) CPU 和 4GB 內(nèi)存。而每個(gè) Pod 所需的資源為 150m CPU 和 100Mi 內(nèi)存。
隨著集群中運(yùn)行的 pod 數(shù)量增加,再次運(yùn)行分析時(shí),可調(diào)度的 pod 數(shù)量也會(huì)減少。
輸出格式
ce? 命令有一個(gè) --output (-o) 標(biāo)志,可以將其輸出格式化為 json 或 yaml。
調(diào)度模擬
介紹
調(diào)度器模擬以當(dāng)前集群中的所有 node、pod 等相關(guān)資源為輸入,模擬從沒(méi)有 pod 到創(chuàng)建并調(diào)度所有 pod 的過(guò)程。這可以用來(lái)計(jì)算集群壓縮率比,以評(píng)估調(diào)度效果或衡量調(diào)度算法的質(zhì)量。
與集群壓縮相比,其結(jié)果更加激進(jìn)和理想化。
運(yùn)行
更多運(yùn)行參數(shù)及功能,請(qǐng)執(zhí)行如下命令:
它支持兩種終止條件:AllSucceed? 和 AllScheduled?。前者是指所有pod調(diào)度成功后程序結(jié)束,后者是指所有 pod 至少被調(diào)度一次后程序退出。默認(rèn)值為 AllSucceed?。可以使用 --exit-condition 標(biāo)志設(shè)置退出條件。
演示
假設(shè)集群運(yùn)行有 4 個(gè)節(jié)點(diǎn)和 1 個(gè)主節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)有 2 個(gè) CPU 和 4GB 內(nèi)存。有 40 個(gè)資源需求是 100m CPU 和 200Mi 內(nèi)存的 Pod 需要被調(diào)度。
如果調(diào)度器使用 LeastAllocated 策略,調(diào)度結(jié)果可能如下所示:
如果調(diào)整調(diào)度器使用 MostAllocated 策略,調(diào)度結(jié)果可能如下所示:
可以分析上面的調(diào)度結(jié)果來(lái)評(píng)估調(diào)度策略的有效性和集群容量壓縮比。例如,上面的結(jié)果表示集群壓縮比為2,這意味著在理想情況下有50%的資源浪費(fèi)。
集群壓縮
介紹
集群壓縮以集群的當(dāng)前狀態(tài),包括所有 node、pod 和其他相關(guān)資源作為輸入,模擬通過(guò)移除節(jié)點(diǎn)來(lái)壓縮集群的過(guò)程。它可用于計(jì)算集群的壓縮比,這是衡量資源利用效率的指標(biāo)。
與模擬調(diào)度相比,集群壓縮的結(jié)果通常更顯示,可操作性更強(qiáng)。
運(yùn)行
更多運(yùn)行參數(shù)及功能,請(qǐng)執(zhí)行如下命令:
演示
假設(shè)集群運(yùn)行有 4 個(gè)節(jié)點(diǎn)和 1 個(gè)主節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)有 2 個(gè) CPU 和 4GB 內(nèi)存。運(yùn)行有 40 個(gè)資源需求是 100m CPU 和 200Mi 內(nèi)存的 Pod。
上面的結(jié)果表明,給定 40 個(gè) pod 的資源需求,在保證所有 pod 都能被調(diào)度的情況下,集群可以去掉 2 個(gè)節(jié)點(diǎn),壓縮比為 2,也就是有 50% 的資源浪費(fèi)。
演進(jìn)
當(dāng)前已經(jīng)支持上述三種能力,后續(xù)會(huì)繼續(xù)完善其他容量、資源管理相關(guān)能力,如
- 基于 snapshot 的模擬
- 資源碎片分析
幫助我們基于集群歷史某一時(shí)刻的狀態(tài)來(lái)進(jìn)行相關(guān)模擬操作,以及分析資源碎片情況等,歡迎體驗(yàn)并提出您的寶貴意見(jiàn),謝謝!
參考資料
[1]kluster-capacity: https://github.com/k-cloud-labs/kluster-capacity