優(yōu)化Kubernetes成本的9個辦法
Kubernetes統(tǒng)治著容器市場。根據(jù)CNCF的一項調(diào)查,到2020年,Kubernetes在生產(chǎn)環(huán)境中的使用率為93%,高于2019年的78%。
由于DevOps團隊采用了Kubernetes,并且在開源社區(qū)的鼓勵下,這一數(shù)字可能還會增長,如果還是以目前的花費來維持,將會有加大網(wǎng)絡(luò),存儲,監(jiān)控等成本的開銷。
運行Kubernetes可能會非常昂貴,尤其當(dāng)組織首次使用Kubernetes時,他們通常會使用沒有經(jīng)過優(yōu)化的架構(gòu)和設(shè)置,這將會慢慢加大組織的網(wǎng)絡(luò),存儲,監(jiān)控等成本的開銷。為了節(jié)省很多不必要的成本,我們需要從一開始就養(yǎng)成良好的習(xí)慣。
在本文中,我們將介紹9種控制和降低Kubernetes成本的方法。
1. Kubernetes成本監(jiān)控
成本監(jiān)控:應(yīng)該向你展示有關(guān)Kubernetes的支出。這是有效地管理Kubernetes成本的最合乎邏輯的步驟。
云供應(yīng)商提供帳單信息,但是,它們通常僅是一個簡單的概述,這雖然對多租戶的Kubernetes集群有用,但是在私有云中不可訪問。因此,我們需要使用外部軟件來監(jiān)控Kubernetes的使用。Prometheus,Kubecost,Microtica和Replex是該領(lǐng)域中的一些有用工具。
選擇你將要使用的工具以及如何監(jiān)控Kubernetes成本。然后,為Kubernetes成本優(yōu)化實施更具體的措施。
2.限制資源
有效的資源約束,能夠確保Kubernetes系統(tǒng)的資源使用不會超出成本預(yù)算。
容器使用的資源不能超過你設(shè)置的資源限制。當(dāng)容器中的進程嘗試使用超出允許范圍的內(nèi)存時,系統(tǒng)內(nèi)核會因內(nèi)存不足(OOM)錯誤而中止該進程。
限制資源至關(guān)重要,尤其是在許多開發(fā)人員可以直接訪問Kubernetes的情況下。它們確保公平共享可用資源,從而減小整個集群的大小。如果沒有限制,一個人可能會消耗所有資源,這將影響其他人的正常工作,從而導(dǎo)致總體上需要更多的計算資源。
但是,請注意不要無限制地限制你的資源。如果資源限制太低,工程師和軟件將無法正常運行。一些Kubernetes成本優(yōu)化工具,例如Prometheus和Kubecost,可以幫助你實現(xiàn)資源的平衡。
要了解限制容器資源的更多信息,請查看Kubernetes文檔。
3.自動擴縮
自動擴展意味著為你所需的東西付費。你可以允許Kubernetes自動擴縮以適應(yīng)快速變化。
水平和垂直自動擴縮是可用的兩種自動擴縮類型。簡而言之,水平自動擴縮涉及根據(jù)負載是高于還是低于指定水平來新增和移除Pod。各個Pod的比例與垂直自動擴縮比例保持平衡。
兩種自動擴縮方法都可使用計算能力動態(tài)地適應(yīng)你的實際需求。但是,此方法不一定理想,因為它不適用于所有用例。
4.選擇合適的實例
舉例:AWS Kubernetes的成本,受到管理AWS實例的直接影響。實例以多種不同形式出現(xiàn),具有不同的內(nèi)存和計算資源組合。雖然Kubernetes Pod的使用方式相同,但資源分配不同。控制AWS Kubernetes成本的關(guān)鍵是確保Pod在你的AWS實例上有效增減。AWS實例應(yīng)與你的pod的大小匹配。
Pod的規(guī)模,數(shù)量和歷史資源利用率趨勢在決定使用哪個AWS實例時都發(fā)揮著作用。應(yīng)用程序可能具有不同的存儲或CPU要求,這會影響要使用的實例的類型。
確保Kubernetes Pod的資源消耗與其所使用的AWS實例上的CPU和內(nèi)存消耗相關(guān)聯(lián),這對于優(yōu)化資源使用和降低AWS成本至關(guān)重要。
可以在此處檢查Amazon EC2實例類型,然后選擇最適合你需求的一種。
5.AWS中使用Spot 實例
目前,AWS實例有3種形式:按需實例,預(yù)留實例和Spot 實例。按需實例成本最高,但靈活性最高。與按需實例的價格相比,使用 Spot 實例最高可以享受 90% 的折扣。你還可以在一定時間內(nèi)獲取預(yù)留實例,以節(jié)省成本。因此,實例形式的選擇直接影響在AWS上運行Kubernetes的成本。
你可以將 Spot 實例用于各種無狀態(tài)、容錯或者靈活的應(yīng)用程序,例如大數(shù)據(jù)、容器化工作負載、CI/CD、Web 服務(wù)器、高性能計算 (HPC) 以及測試和開發(fā)工作負載。
6.設(shè)定睡眠時間表
無論你是在按需實例,保留實例還是Spot 實例上運行Kubernetes集群,確保集群的充分利用對于成本管理都是至關(guān)重要的。你可以按配置它們的時間段計算AWS EC2的費用。
簡而言之,如果開發(fā)團隊使用基于云的Kubernetes環(huán)境,則他們僅在工作時間內(nèi)使用它。如果他們每周工作40個小時,而在其余時間中環(huán)境仍然正常工作,那么在不用時無需為剩余的128個小時付費。當(dāng)然,并不是每個團隊都這樣,特別是如果他們的工作時間靈活,但是在沒有人工作的情況下關(guān)閉環(huán)境可以極大地提高Kubernetes的成本優(yōu)化。
開發(fā)人員可以通過自動設(shè)置睡眠計劃并僅在需要時喚醒環(huán)境來。設(shè)置此計劃意味著系統(tǒng)將自動縮減未使用的資源。這樣可以確保環(huán)境條件得以保存。此外,當(dāng)工程師再次需要時,環(huán)境將輕松,自動地“喚醒”,這意味著工作流不會中斷。
7.定期進行Kubernetes清理
如果讓工程師有權(quán)按需構(gòu)建命名空間,或者有權(quán)構(gòu)建CI/CD流水線,則最終可能會產(chǎn)生許多未使用的對象或集群,但這些仍然在花費金錢。即使你的睡眠模式能夠減少計算資源的消耗,那么它僅適用于暫時不活動的資源。
因此,當(dāng)你發(fā)現(xiàn)某些資源長時間處于非活動狀態(tài)時,刪除它們將是一件很明智的事情。
8.確定你的Kubernetes集群的大小
在不同情況下,管理Kubernetes集群的方法也是不同的。作為程序員,在構(gòu)建集群之前,你需要經(jīng)常考慮將在集群上運行的應(yīng)用程序的規(guī)范。
在設(shè)計可擴展應(yīng)用程序時,正確調(diào)整節(jié)點大小非常重要。大量的小節(jié)點和少量的大節(jié)點是兩個截然不同的事物。最好的方法是在這兩個之間找到適當(dāng)?shù)钠胶狻?/p>
但是,你的應(yīng)用程序的不同要求需要不同數(shù)量和大小的節(jié)點。具體可以參考《調(diào)整Kubernetes集群大小的技巧》,以了解各種應(yīng)用所需的大小和數(shù)量。
9.標記資源
在任何環(huán)境中,無論是云,還是本地器,標記資源都是一個明智的主意。組織在有多個測試,開發(fā)和生產(chǎn)環(huán)境中,更應(yīng)使用標記來確保所有服務(wù)均受到控制。
AWS提供了一種強大的標記方案,可用于標記屬于Kubernetes的服務(wù)。有效的標記使你可以輕松地分類管理哪些是未使用的服務(wù)。在AWS Billing儀表板中啟用這些標簽后,你將能夠分配成本并查看各種服務(wù)的費用明細。
結(jié)論
Kubernetes成本優(yōu)化的第一步是監(jiān)控它們。然后,為避免計算資源的過度使用,你可以設(shè)置限制,這將使成本更易于管理。
確定最佳資源的大小以及自動擴展功能,也對降低成本有所幫助。如果使用AWS,則可以檢查其價格較低的選項,例如Spot 實例。刪除空閑資源的方法,包括自動休眠計劃和清理未使用的Kubernetes資源。最后,調(diào)整容器大小并實施資源標記,以實現(xiàn)更好的Kubernetes成本優(yōu)化。