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