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