如何實(shí)現(xiàn)有效的Kubernetes成本優(yōu)化
譯文【51CTO.com快譯】調(diào)查表明,Kubernetes如今主導(dǎo)著容器市場。根據(jù)云原生計(jì)算基金會(huì)(CNCF)的一項(xiàng)調(diào)查,2020年Kubernetes在生產(chǎn)中的使用率為93%,遠(yuǎn)高于2019年的78%。此外,這項(xiàng)調(diào)查表明,2020年容器在生產(chǎn)中的使用率為92%,與云原生計(jì)算基金會(huì)(CNCF)在 2016年的第一次調(diào)查相比,這一數(shù)字增長了3倍。
由于越來越多的DevOps團(tuán)隊(duì)采用了Kubernetes,并且在開源社區(qū)的支持下,這一數(shù)字可能還會(huì)增加。如果還保持目前的價(jià)格,將會(huì)增加更多的市場份額。雖然Kubernetes使很多事項(xiàng)變得簡單,但總是面臨一些挑戰(zhàn)。其中包括在網(wǎng)絡(luò)、存儲(chǔ)、跟蹤、監(jiān)視、準(zhǔn)備不足,以及成本管理等方面出現(xiàn)的問題。
運(yùn)行Kubernetes的成本可能會(huì)非常昂貴,尤其是效率低下的話。當(dāng)用戶首次嘗試將Kubernetes納入其業(yè)務(wù)時(shí),通常會(huì)使用與最初的試點(diǎn)項(xiàng)目相同的架構(gòu)和設(shè)置。但是,這種設(shè)置通常沒有經(jīng)過成本優(yōu)化,因此用戶可能并沒有意識(shí)到費(fèi)用問題。而用戶從一開始就養(yǎng)成良好的成本優(yōu)化習(xí)慣,能夠節(jié)省大量的成本。
以下介紹幾種控制和降低Kubernetes成本的方法。此外,由于Amazon EKS是繼自我管理的Kubernetes之后最常見的容器管理方法,因此將針對AWS云平臺(tái)上的Kubernetes成本優(yōu)化提供更具可行性的建議。
1.Kubernetes成本監(jiān)控
這是開始更有效地管理Kubernetes成本的合乎邏輯的一個(gè)步驟。監(jiān)控將顯示用戶有關(guān)Kubernetes的支出方式。更重要的是,應(yīng)該確定節(jié)省成本的機(jī)會(huì)。
云計(jì)算供應(yīng)商通常會(huì)為用戶提供需要支付費(fèi)用的帳單摘要,但是,其概述通常比較簡單,這對于多租戶Kubernetes集群用處并不大,并在私有云中是不可訪問的。因此,使用外部軟件來監(jiān)控Kubernetes的使用情況很普遍。Prometheus、Kubecost、Microtica和Replex就是該領(lǐng)域中的一些有用工具。
用戶需要選擇適用的工具監(jiān)控Kubernetes成本。然后,開始為Kubernetes成本優(yōu)化采取更具體的行動(dòng)。
2.限制資源的使用
有效地限制資源的使用,可以確保Kubernetes系統(tǒng)的任何程序或操作不會(huì)使用過多的處理能力。因此,可以為用戶節(jié)省成本,例如避免出現(xiàn)意外的帳單。
容器使用的資源不能超過設(shè)置的資源限制。如果將某個(gè)特定容器的內(nèi)存上限設(shè)置為4GB,那么kubelet(與容器運(yùn)行時(shí))將不會(huì)超過這個(gè)內(nèi)存上限。容器在運(yùn)行時(shí)禁止超過配置的資源上限。當(dāng)容器中的進(jìn)程試圖使用超出允許的內(nèi)存量時(shí),系統(tǒng)內(nèi)核會(huì)以內(nèi)存不足的錯(cuò)誤中止這一進(jìn)程。
用戶可以通過兩種方式進(jìn)行限制。首先,當(dāng)Kubernetes系統(tǒng)檢測到違規(guī)行為時(shí)就會(huì)做出反應(yīng)。第二種方法是強(qiáng)制執(zhí)行,這意味著Kubernetes系統(tǒng)從來不會(huì)允許容器超過限制??梢葬槍Σ煌倪\(yùn)行時(shí)間以各種方式實(shí)現(xiàn)相同的限制。
限制資源至關(guān)重要,尤其是在許多用戶可以直接訪問Kubernetes的情況下。這種方法可以確保公平共享可用資源,從而減小了整個(gè)群集的規(guī)模。如果沒有限制,某一名用戶就可能消耗所有資源,這將會(huì)嚴(yán)重影響其他用戶的工作,從而導(dǎo)致需要更多的計(jì)算資源。
但是,需要注意的是不要過分地限制資源。如果資源數(shù)量限制得太低,軟件將無法正常運(yùn)行。而采用Prometheus和Kubecost一些Kubernetes成本優(yōu)化工具,可以幫助用戶保持資源的平衡。
3.自動(dòng)擴(kuò)展
自動(dòng)擴(kuò)展意味著用戶需要為其所需的東西支付更多費(fèi)用。因此,用戶必須根據(jù)自己的特定需求調(diào)整群集的規(guī)模。這個(gè)功能可以允許Kubernetes自動(dòng)擴(kuò)展以適應(yīng)快速變化。
水平動(dòng)擴(kuò)展和垂直自動(dòng)擴(kuò)展是兩種可用的自動(dòng)擴(kuò)展類型。簡而言之,水平自動(dòng)擴(kuò)展涉及根據(jù)負(fù)載是高于還是低于指定水平來插入和移除計(jì)算Pod。其Pod的比例與垂直自動(dòng)擴(kuò)展比例保持平衡。
這兩種自動(dòng)擴(kuò)展方法都可用于使可用的計(jì)算能力動(dòng)態(tài)地適應(yīng)用戶的實(shí)際需求。但是,這種方法并不理想,因?yàn)樗贿m用于所有用例。例如,當(dāng)某些事物采用更多的計(jì)算資源之后,Kubernetes系統(tǒng)不會(huì)自動(dòng)縮小規(guī)模。
4.選擇合適的AWS實(shí)例
AWS Kubernetes的成本受到開發(fā)人員用來管理Kubernetes集群的AWS實(shí)例的直接影響。其實(shí)例以多種不同形式出現(xiàn),具有不同的內(nèi)存和計(jì)算資源組合。Kubernetes Pod的使用方式相同,但資源分配不同??刂艫WS Kubernetes成本的關(guān)鍵是確保Pod在用戶的AWS實(shí)例上有效使用。而AWS實(shí)例應(yīng)該與用戶使用的Pod的大小匹配。
Pod的規(guī)模、數(shù)量和歷史資源利用趨勢都將決定使用哪個(gè)AWS實(shí)例。應(yīng)用程序可能具有不同的存儲(chǔ)或CPU要求,這會(huì)影響要使用的實(shí)例類型。
確保Kubernetes Pod的資源消耗與其所使用的AWS實(shí)例上的可用總體CPU和內(nèi)存相關(guān),這對于優(yōu)化資源使用和降低AWS成本至關(guān)重要。
5.使用競價(jià)型實(shí)例
對于AWS實(shí)例,可以在三種計(jì)費(fèi)配置文件中找到它們:按需實(shí)例、預(yù)留實(shí)例、競價(jià)型實(shí)例。按需實(shí)例的成本最高,但靈活性最高。競價(jià)型實(shí)例的成本最低。但是需要通過2分鐘的警告來終止它們。用戶還可以在一定時(shí)間內(nèi)獲取預(yù)留實(shí)例,以節(jié)省成本。因此,實(shí)例形式的選擇直接影響在AWS云平臺(tái)上運(yùn)行Kubernetes的成本。
用戶可以將競價(jià)型實(shí)例用于并不是一直需要資源的工作負(fù)載,并且可以處理很多中斷。AWS公司聲稱現(xiàn)競價(jià)型實(shí)例將幫助用戶節(jié)省多達(dá)90%的EC2按需實(shí)例成本。
由于競價(jià)型實(shí)例必須立即運(yùn)行,因此并不是用戶采用應(yīng)用程序的最佳選擇,那么如果在固定時(shí)間內(nèi)使用這些服務(wù),則可能會(huì)獲得一些折扣。如果用戶同意一年或三年的使用期限,則將獲得更多的折扣。AWS公司表示,其折扣可能達(dá)到40%到60%。
6.設(shè)定休眠時(shí)間表
無論用戶是在按需實(shí)例、預(yù)留實(shí)例還是競價(jià)型實(shí)例上運(yùn)行Kubernetes集群,確保終止未充分利用的集群對于成本管理都是至關(guān)重要的。用戶可以按配置它們的時(shí)間段計(jì)算AWS EC2的費(fèi)用。即使未充分利用的實(shí)例對資源的影響比必要時(shí)要大得多,它們?nèi)匀皇褂脩艋ㄙM(fèi)運(yùn)行實(shí)例的全部費(fèi)用。
簡而言之,如果用戶使用基于云計(jì)算的Kubernetes環(huán)境,并且只在工作時(shí)間內(nèi)使用,那么他們每周工作40個(gè)小時(shí),而Kubernetes環(huán)境在其余時(shí)間正常工作,那么沒有必要為每周其他的128個(gè)小時(shí)支付費(fèi)用。當(dāng)然,并不是每個(gè)用戶都是這樣,特別是他們工作時(shí)間更加靈活的的話,但是在沒有工作的情況下關(guān)閉環(huán)境可以顯著地優(yōu)化Kubernetes的成本。
用戶可以通過自動(dòng)安排休眠時(shí)間表并在需要時(shí)喚醒環(huán)境來設(shè)置這些功能。設(shè)置這計(jì)劃意味著Kubernetes系統(tǒng)將自動(dòng)縮減未使用的資源。這保證其環(huán)境得到了保存。此外,當(dāng)用戶再次需要啟用時(shí),其環(huán)境將會(huì)自動(dòng)地被“喚醒”,這意味著工作流中不會(huì)中斷。
7.定期進(jìn)行Kubernetes清理
如果讓用戶完全可以根據(jù)需要構(gòu)建名稱空間或使用基于持續(xù)集成(CI)/持續(xù)交付(CD)的Kubernetes,那么最終可能會(huì)出現(xiàn)大量未使用的對象或集群,這些對象或集群仍然會(huì)使用戶的成本升高。如果休眠模式減少了計(jì)算資源,那么它只用于暫時(shí)不活動(dòng)的資源,仍然保留存儲(chǔ)和配置。因此,當(dāng)用戶發(fā)現(xiàn)某些資源長時(shí)間處于非活動(dòng)狀態(tài)時(shí),刪除它們將是一件明智的事情。
8.正確設(shè)置Kubernetes集群的大小
在各種情況下,管理Kubernetes集群是不同的。有多種方法可以正確調(diào)整群集的大小,并且開發(fā)應(yīng)用程序以確保一致性和持久性很重要。用戶在構(gòu)建集群之前,經(jīng)常需要考慮將在集群上運(yùn)行的應(yīng)用程序的規(guī)范。
在設(shè)計(jì)可擴(kuò)展應(yīng)用程序時(shí),正確調(diào)整節(jié)點(diǎn)大小非常重要。大量的小節(jié)點(diǎn)和少量的大節(jié)點(diǎn)是兩個(gè)截然不同的事物。這就是在這兩個(gè)目標(biāo)之間找到適當(dāng)?shù)钠胶馐亲詈玫姆椒ǖ脑颉?/p>
但是,用戶對于應(yīng)用程序的不同要求需要不同數(shù)量和不同大小的節(jié)點(diǎn),因此需要了解各種應(yīng)用案例所需的大小和數(shù)量。
9.標(biāo)記資源
在任何環(huán)境中,無論是云平臺(tái)、內(nèi)部部署設(shè)施還是容器,標(biāo)記資源都是一個(gè)明智的想法。在具有眾多測試、暫存和開發(fā)環(huán)境的Kubernetes環(huán)境中,一些服務(wù)必然會(huì)被忽略。即使不使用這些服務(wù),它們也一直成為用戶的長期負(fù)擔(dān)。應(yīng)使用標(biāo)記來確保所有服務(wù)均受到控制。
AWS公司為此提供了一種強(qiáng)大的標(biāo)記方案,可用于標(biāo)記屬于Kubernetes的服務(wù)。其用戶可以使用這些標(biāo)記來停留在資源、資源持有者和資源使用率之上。有效的標(biāo)記使用戶可以輕松地分類和消除未使用的服務(wù)。一旦AWS計(jì)費(fèi)儀表板中啟用了這些標(biāo)記,用戶將能夠分配成本,并查看各種服務(wù)的費(fèi)用明細(xì)。
結(jié)論
Kubernetes成本優(yōu)化的第一步是開始進(jìn)行監(jiān)視。然后,為避免使用不必要的計(jì)算資源,用戶可以設(shè)置資源限制,這將使成本更易于管理。
確定資源的最佳規(guī)模對于降低成本至關(guān)重要,自動(dòng)擴(kuò)展也將有助于實(shí)現(xiàn)。如果使用AWS公司的服務(wù),用戶可以采用成本更低的選項(xiàng),例如競價(jià)型實(shí)例。刪除空閑資源的其他步驟包括自動(dòng)休眠計(jì)劃和清理未使用的Kubernetes資源。最后,用戶可以調(diào)整Pod大小,實(shí)現(xiàn)資源標(biāo)記,以更好地優(yōu)化Kubernetes成本。
將這些技巧整合到用戶的流程中將會(huì)構(gòu)建成本優(yōu)化的Kubernetes系統(tǒng)。這將為用戶更關(guān)鍵的業(yè)務(wù)運(yùn)營和產(chǎn)品改進(jìn)節(jié)省更多的成本。
原文標(biāo)題:How to Achieve Effective Kubernetes Cost Optimization,作者:Sara Miteva
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】