如何優(yōu)化Kubernetes的成本?
這篇文章展示了優(yōu)化Kubernetes成本的挑戰(zhàn)和一些最佳實(shí)踐。
例如:1. 為Pod設(shè)置服務(wù)質(zhì)量(QoS),2. LimitRanges,3. ResoureQuotas。云容器具有靈活性,可以將應(yīng)用程序無縫遷移到任何環(huán)境,包括云環(huán)境、虛擬環(huán)境或裸機(jī)環(huán)境,而無需擔(dān)心虛擬操作系統(tǒng)、虛擬化軟件等。簡(jiǎn)化的管理、快速的交付和敏捷性使云開發(fā)人員傾向于采用容器化。Kubernetes(也稱為k8s,如果你想知道k8是什么意思,它只是替代了“Kubernetes”這八個(gè)字母)是一種廣泛采用的流行開源容器化平臺(tái),被云開發(fā)人員廣泛采納。根據(jù)CNCF最近的報(bào)告,全球范圍內(nèi)Kubernetes開發(fā)人員增加了67%,這表明其受歡迎程度。
不幸的消息是,Kubernetes的采用和使用激增導(dǎo)致公司IT基礎(chǔ)設(shè)施預(yù)算上的妥協(xié)。企業(yè)可能會(huì)將近80%的Kubernetes開銷浪費(fèi)在無意識(shí)的資源上,這些資源并沒有幫助組織按計(jì)劃實(shí)現(xiàn)目標(biāo)。讓我們?cè)谶@篇博客中看看有哪些挑戰(zhàn)和優(yōu)化方式。
Kubernetes成本優(yōu)化的挑戰(zhàn)整體計(jì)費(fèi)一個(gè)集群包含多個(gè)節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)又包含不同數(shù)量的容器。并不是每個(gè)存在于一個(gè)集群中的節(jié)點(diǎn)都屬于同一個(gè)應(yīng)用程序。每個(gè)節(jié)點(diǎn)可能由不同的團(tuán)隊(duì)處理,用于不同的應(yīng)用程序。但是云服務(wù)提供商按照整個(gè)集群或多個(gè)集群進(jìn)行計(jì)費(fèi)。當(dāng)容器部署到節(jié)點(diǎn)上時(shí),計(jì)費(fèi)就開始了。額外的費(fèi)用每天為Kubernetes集群維護(hù)、軟件許可、災(zāi)難恢復(fù)等方面收取2.4美元。
Showback和Chargeback幾乎是不可能的這兩個(gè)過程對(duì)企業(yè)來說至關(guān)重要,可以實(shí)現(xiàn)財(cái)務(wù)上的責(zé)任。Showback是一種過程,為特定時(shí)間段內(nèi)的云資源使用給出業(yè)務(wù)單元的支出可見性,但不收費(fèi)。而Chargeback則是在根據(jù)使用情況通知業(yè)務(wù)單元并按照其使用情況收費(fèi)的過程。在Kubernetes集群中,不可能使用有助于工程師跟蹤成本的標(biāo)簽。
當(dāng)我們投資每一分錢時(shí),只有當(dāng)它符合我們計(jì)劃的功能/產(chǎn)出清單時(shí)才是有價(jià)值的。當(dāng)它們僅停留在支出方面,與生產(chǎn)無關(guān)時(shí),就應(yīng)該找出造成這種異常的根源。但對(duì)于Kubernetes集群來說,事情并不像聽起來那么簡(jiǎn)單。因?yàn)槊總€(gè)容器可能由企業(yè)中不同團(tuán)隊(duì)使用,而這些團(tuán)隊(duì)可能在開展不同的工作。同時(shí),每個(gè)團(tuán)隊(duì)的基礎(chǔ)設(shè)施預(yù)算和資源成本分配也有所不同。
多云采用根據(jù)Gartner最近的一項(xiàng)調(diào)查,81%的受訪者表示他們使用2個(gè)或更多的云服務(wù)提供商以獲取各種好處,如克服供應(yīng)商鎖定、資源折扣、災(zāi)難恢復(fù)等。Kubernetes集群將包含來自不同云服務(wù)提供商(如AWS、Azure、GCP等)的工作負(fù)載,進(jìn)一步增加了成本異常檢測(cè)和Kubernetes成本優(yōu)化過程的復(fù)雜性。
動(dòng)態(tài)自動(dòng)伸縮云工程師選擇Kubernetes集群的一個(gè)關(guān)鍵原因是其自動(dòng)伸縮功能。根據(jù)使用需求,Kubernetes會(huì)進(jìn)行伸縮,使資源在高峰和低谷期間滿足計(jì)算需求。在水平自動(dòng)伸縮中,容器數(shù)量可能在一天內(nèi)從2個(gè)增加到20個(gè)。由于這種不可預(yù)測(cè)的自動(dòng)伸縮,Kubernetes成本優(yōu)化變得復(fù)雜。
Kubernetes成本優(yōu)化的最佳實(shí)踐讓我們來看看如何最優(yōu)化地削減意外開銷。
Pods的服務(wù)質(zhì)量(QoS)Kubernetes集群為云從業(yè)者提供了靈活性,可以為Pod設(shè)置不同的QoS類別?;诖?,對(duì)Pod的調(diào)度和移除對(duì)于云從業(yè)者來說更加容易。它有三種類型 - Guaranteed(保證)、Burstable(可擴(kuò)展)和Best-Effort(盡力而為)。
Guaranteed(保證):當(dāng)云工程師需要一個(gè)能夠處理高度關(guān)鍵應(yīng)用程序的Pod時(shí),可以將其配置為保證型QoS類別。因此,CPU和內(nèi)存的限制和需求是相同且設(shè)置好的。正如名稱所示,它保證提供最小資源(需求是最小資源數(shù)量,限制是其可以使用的最大資源數(shù)量)。
Burstable(可擴(kuò)展):當(dāng)vCPU或內(nèi)存限制超過需求或不完全相同時(shí),將為Pod分配可擴(kuò)展的QoS類別。因此,當(dāng)需要增加計(jì)算需求時(shí),可以利用這些資源。
Best-Effort(盡力而為):當(dāng)限制和需求都沒有設(shè)置時(shí),它被歸類為最適合型QoS類別。云工程師可以將其用于非關(guān)鍵應(yīng)用程序。
正如我們可以清楚地看到的那樣,首選刪除Best-Effort pods,其次是Burstable pods,然后是Guaranteed pods。
ResourceQuotas和LimitRange正如我們之前所看到的,Kubernetes集群由各個(gè)團(tuán)隊(duì)共享。一個(gè)團(tuán)隊(duì)可能使用大部分Pods,導(dǎo)致其他團(tuán)隊(duì)資源緊張。命名空間級(jí)別的Pod限制可以緩解此問題(命名空間是一個(gè)虛擬集群)。資源配額是我們可以在命名空間內(nèi)限制Pod使用的方法。
Kubernetes管理員為每個(gè)命名空間創(chuàng)建一個(gè)資源配額。每當(dāng)用戶在命名空間內(nèi)創(chuàng)建或更新Pod時(shí),資源配額系統(tǒng)會(huì)檢查是否超過了限制。如果超過了限制,它將返回一個(gè)"403 FORBIDDEN"錯(cuò)誤,拒絕該操作。
LimitRange是另一種可以幫助實(shí)現(xiàn)資源限制的策略。顧名思義,它限制了命名空間內(nèi)"limits & requests"的范圍。