看得見的成本!1款工具實(shí)現(xiàn)K8S資源成本監(jiān)控可視化

計(jì)算Kubernetes成本的復(fù)雜性
采用Kubernetes和基于服務(wù)的架構(gòu)可以為企業(yè)帶來諸多好處,如團(tuán)隊(duì)可以更快地遷移以及應(yīng)用程序可以更輕松地?cái)U(kuò)展等。但是這一轉(zhuǎn)變也帶來了一些復(fù)雜性,比如云成本的可見性。這是由于應(yīng)用程序及其資源需求常常是動(dòng)態(tài)變化的,并且團(tuán)隊(duì)共享核心資源而沒有與工作負(fù)載掛鉤的透明價(jià)格。此外,能夠充分意識(shí)到Kubernetes所帶來的優(yōu)勢(shì)的企業(yè)通常會(huì)將資源運(yùn)行在不同類型的機(jī)器上,甚至?xí)\(yùn)行在多個(gè)云提供程序上。
在本文中,我們將了解在企業(yè)中為showback/chargeback項(xiàng)目實(shí)現(xiàn)成本監(jiān)控的最佳實(shí)踐和不同實(shí)現(xiàn)方式,以及如何授權(quán)用戶對(duì)這些信息采取行動(dòng)。我們首先會(huì)了解Kubecost,它提供了一種開源的方式來確??缢蠯ubernetes工作負(fù)載一致和準(zhǔn)確的可見性。

常見K8S設(shè)置,團(tuán)隊(duì)工作負(fù)載分布在K8S節(jié)點(diǎn)和集群上
讓我們進(jìn)一步了解最佳實(shí)踐,以準(zhǔn)確分配和監(jiān)控Kubernetes的工作負(fù)載成本以及相關(guān)托管服務(wù)上的支出。
成本分配
精確分配資源成本是在Kubernetes環(huán)境中創(chuàng)建成本可見性和實(shí)現(xiàn)高效成本利用的首要步驟。
要正確進(jìn)行這一步驟,你需要在工作負(fù)載層面通過單個(gè)容器進(jìn)行成本分配。工作負(fù)載分配完成后,通過匯總不同的工作負(fù)載集合,成本可以正確地分配給各個(gè)團(tuán)隊(duì)、部門甚至個(gè)人開發(fā)者。在工作負(fù)載層面的成本分配框架如下所示:

讓我們一點(diǎn)點(diǎn)拆解這個(gè)框架。
資源消耗的平均數(shù)量由Kubernetes scheduler進(jìn)行計(jì)算或者由云提供程序提供,這取決于被測(cè)量的特定資源。我們建議根據(jù)request和usage的最大值來計(jì)算內(nèi)存和CPU分配。這樣就能夠反映出由Kubernetes scheduler本身所預(yù)留的資源量。另一方面,諸如負(fù)載均衡器和持久卷等資源會(huì)嚴(yán)格基于由提供程序所提供的數(shù)量。
Kubernetes API可以直接計(jì)算出資源消耗的時(shí)間段。這由資源(如內(nèi)存、CPU和GPU等)在Running狀態(tài)所消耗的時(shí)間決定。要讓數(shù)據(jù)對(duì)云chargeback來說足夠精確,我們建議團(tuán)隊(duì)將這些數(shù)據(jù)與云提供程序提供的特定云資源(如節(jié)點(diǎn))所花費(fèi)的時(shí)間進(jìn)行協(xié)調(diào),保持一致。在之后的部分我們將對(duì)此進(jìn)行更多介紹。
資源價(jià)格是通過觀察環(huán)境中每種特定資源的成本來確定的。例如,us-east-1 AWS區(qū)域中m5.xlarge spot實(shí)例的CPU小時(shí)價(jià)格與同一實(shí)例的按需價(jià)格不同。
使用這一框架可以在各個(gè)工作負(fù)載之間適當(dāng)分配成本,那么它們就可以通過任何Kubernetes概念(如命名空間、標(biāo)簽、注釋或controller)輕松聚合。
Kubernetes成本監(jiān)控
通過Kubernetes概念(如pod或controller)分配的成本,你可以開始準(zhǔn)確地將支出映射到任何內(nèi)部業(yè)務(wù)層級(jí),如團(tuán)隊(duì)、產(chǎn)品、部門或成本中心。企業(yè)通常的做法是通過Kubernetes命名空間來劃分團(tuán)隊(duì)工作負(fù)載,而其他的做法可能使用Kubernetes標(biāo)簽或注釋來識(shí)別工作負(fù)載屬于哪個(gè)團(tuán)隊(duì)。
在不同應(yīng)用、團(tuán)隊(duì)等之間進(jìn)行成本監(jiān)控的另一個(gè)關(guān)鍵因素是確定誰應(yīng)該為閑置的容量付費(fèi)。具體而言是指仍在向企業(yè)計(jì)費(fèi)但未使用的集群資源。通常情況下,這些費(fèi)用要么計(jì)入中央基礎(chǔ)設(shè)施成本中心,要么按比例分配給應(yīng)用團(tuán)隊(duì)。將這些成本分配給負(fù)責(zé)供應(yīng)決策的團(tuán)隊(duì),通過調(diào)整激勵(lì)措施來擁有一個(gè)高效規(guī)模的集群,從而產(chǎn)生積極的效果。
核對(duì)云賬單
Kubernetes提供了大量實(shí)時(shí)數(shù)據(jù)。這讓開發(fā)人員可以直接訪問成本指標(biāo)。盡管這些實(shí)時(shí)數(shù)據(jù)通常都是精確的,但它可能與云提供商的計(jì)費(fèi)數(shù)據(jù)不完全一致。例如,在確定AWS spot節(jié)點(diǎn)的小時(shí)費(fèi)率時(shí),用戶需要等待Spot數(shù)據(jù)源或成本和使用報(bào)告來確定準(zhǔn)確的費(fèi)率。出于計(jì)費(fèi)和收費(fèi)的目的,你應(yīng)該將數(shù)據(jù)與實(shí)際賬單進(jìn)行核對(duì)。

通過Kubecost獲得更好的可見性和治理
我們已經(jīng)了解了如何觀察數(shù)據(jù)以計(jì)算Kubernetes工作負(fù)載的成本。還有另一個(gè)方法是利用Kubecost,這是一個(gè)建立在開源基礎(chǔ)上的成本和容量管理解決方案,提供了對(duì)整個(gè)Kubernetes環(huán)境的可見性。Kubecost為Kubernetes工作負(fù)載以及它們所消耗的相關(guān)管理服務(wù)(如S3或RDS)提供成本可見性和洞察力。該產(chǎn)品收集Kubernetes的實(shí)時(shí)數(shù)據(jù),還能與你的云計(jì)費(fèi)數(shù)據(jù)進(jìn)行核對(duì),以反映你支付的實(shí)際價(jià)格。

Kubecost截圖,展示了各個(gè)命名空間的成本
有了像Kubecost這樣的解決方案,你可以授權(quán)應(yīng)用工程師做出明智的實(shí)時(shí)決策,并開始實(shí)施即時(shí)和長期的實(shí)踐,以優(yōu)化和治理云支出。這包括在不影響性能的情況下采用成本優(yōu)化的方案、實(shí)施Kubernetes預(yù)算和告警、showback/chargeback項(xiàng)目甚至基于成本的自動(dòng)化。
Kubecost社區(qū)版可以免費(fèi)使用,并且具有上述所有功能。你可以在Rancher應(yīng)用商店中找到Kubecost Helm chart,輕松完成部署。借助Rancher,你可以獲得Kubernetes集群可視化和絕佳控制力的體驗(yàn),與此同時(shí)Kubecost為你提供了對(duì)支出和如何優(yōu)化成本的直接觀察。它們共同為使用Kubernetes的團(tuán)隊(duì)提供了一個(gè)完成的成本管理解決方案。