集群成本調優關鍵在于以最經濟的方式有效利用集群資源,減少集群不必要的開支。為了實現集群成本調優,工作負載和集群的穩定性、可靠性以及集群運維成本三者之間的平衡,本文為您匯總了相關的最佳實踐,包括如何以較低成本配置集群、使用工作負載和節點的彈性能力、實時監控集群成本等。
本文使用指引
本文主要面向ACK集群的集群管理人員,提供降低集群成本的通用性建議。本文使用建議不區分前后順序,您可以自行選擇。為了保證更順暢的使用體驗,建議您在閱讀本文前了解Pod和容器資源、命名空間、自動伸縮(工作負載伸縮、節點伸縮)、調度等Kubernetes基礎概念。
為保證集群應用的穩定運行,建議您同時搭配集群高可用架構推薦配置、工作負載推薦配置中的推薦配置使用。
如果您的集群類型為ACK集群Pro版且規模較大(通常為超過500個節點或者10,000個Pod的集群),建議您同時遵循大規模ACK Pro集群使用建議中的使用建議。
期望您閱讀本文后,能在企業中構建起FinOps體系和團隊,并建立清晰的FinOps戰略目標。FinOps,即“Finance” + “DevOps”,是一種企業云財務管理文化和實踐的結合,以實現云資源使用的成本可預測性和透明度,從而確保企業在發展和創新的同時能夠控制和優化支出。更多信息,請參見人員、工具和機制是云上成本管理的關鍵要素、成本套件概述。
使用低成本的集群配置
在部署集群之前,您需要評估集群應用所需的資源需求,選擇合適的節點實例類型、集群付費模式等,從而以更低的成本構建集群。
選擇合適的ECS實例規格
選擇節點池的實例類型之前,您需要結合性能、價格、工作負載等因素,做出性價比與穩定性最優的決策。通常情況下,節點池選擇的ECS實例規格越高(CPU、內存配置越高)、專業程度越高(例如GPU實例、異構實例),節點成本也越高。
根據業務場景選擇實例規格
您可以根據業務場景選擇最具性價比的實例規格。例如,在分布式緩存場景下,應用對于內存容量要求較高。相較于其他資源配比的規格,使用內存型實例(處理器與內存配比為1:8)可以提升CPU資源利用率,從而降低成本。在深度學習訓練場景下,深度學習任務通常對GPU資源有較高依賴,但同時也需要足夠的CPU資源來支持數據預處理、I/O操作等任務,因此GPU與CPU的推薦配比為1:8到1:12之間。關于ECS選型的更多建議,請參見ECS選型最佳實踐。
企業生產環境中,不推薦您使用小規格(2核 4 GB及以下規格)節點,避免網絡資源受限、資源碎片化等問題。更多信息,請參見ECS選型推薦配置。
使用共享型實例
針對個人開發者或者中小型網站應用,推薦使用共享型實例。相比企業級實例,共享型實例使用資源時可能會經歷性能的波動,但成本相對來說也更低。共享型實例適用于中小型網站、Web應用程序、開發環境、輕量級數據庫、輕量級企業應用等場景。
如需了解詳細的共享型實例介紹和選型建議,請參見共享型。
選擇合適的ECS實例付費類型
不同業務類型對資源的使用周期要求不同,您可以按需為業務選擇合適的付費模式,達到成本最優的效果。
包年包月
包年包月是一種高效經濟的計費模式,讓您能夠以更劃算的價格享有持續穩定的資源使用體驗。如果您的業務需求具有如下特點,更推薦您使用包年包月:
可預測的資源使用周期
穩定的業務場景
長期的資源使用需求
例如,在持續運行的Web服務、數據庫服務等業務場景下,推薦您使用包年包月。
按量付費
按量付費是一種更為靈活的計費模式,允許您在使用資源后再進行付費,無需提前購買大量資源,相較于自建IDC機房節省更多的成本。如果您的業務有以下特點,更推薦您使用按量付費:
業務有周期性波動或突發流量,資源用量難以提前預測
資源需求隨時變動,需要即時開通和釋放
例如,在測試開發、電商促銷活動、業務需要臨時擴容等業務場景下,推薦您使用按量付費。
搶占式實例
搶占式實例是一種特殊的按需實例,價格隨庫存等因素實時變化,相對于按量付費實例最高能節省90%的成本。但搶占式實例類型的節點可能在不確定時刻到期被回收,所以僅適用于無狀態、容錯能力強、中斷容忍度高的業務場景,例如批處理和機器學習培訓工作負載、大數據ETL(例如Apache Spark)、隊列處理應用和無狀態API應用等。如果您的作業運行時間較長或應用對穩定性有較高要求,不推薦您使用搶占式實例。更多信息,請參見搶占式實例節點池最佳實踐。
使用節省計劃
如果您的業務需要長期使用ECS或ECI資源,您可以購買節省計劃來獲得大幅度的費用折扣。節省計劃通過承諾在一定期限內(1年、3年或5年)消費一定的金額,來換取較低的按量付費折扣。更多信息,請參見什么是節省計劃、購買和使用節省計劃。
購買ACK集群Pro版資源包
使用ACK集群Pro版所產生的費用包括集群管理費用和涉及的云產品資源費用。ACK集群Pro版的集群管理費用支持以資源包的方式抵扣,并提供一定的價格優惠。更多信息,請參見資源包計費說明。
ACK資源包提供小型包和大型包兩種規格。您可以訪問ACK資源包售賣頁,根據使用時長和具體定價進行選擇。
為集群選擇合適的地域
ECS實例資源在不同的地域可能定價不同。通常情況下,流量請求距離資源所在的地域較近時,將享受更低的網絡延遲和更快的訪問速度。但如果您的業務對網絡時延容忍度較高,您可以選擇在成本較低的地域部署集群。如需了解ECS資源在不同地域的具體價格,請參見價格計算器。
使用ACK托管集群
ACK托管集群的控制面由ACK創建并托管,您只需創建Worker節點,無需管理集群控制面(Master節點)資源,也無需承擔控制面的資源費用,相較于ACK專有集群更具有成本優勢。
如果您希望在集群中運行大規模業務,或業務對穩定性和安全性有較高要求,推薦您使用ACK集群Pro版。ACK集群Pro版支持賠付標準的SLA,進一步增強了集群的可靠性、安全性和調度性。更多信息,請參見ACK集群Pro版概述。
優化工作負載資源配置
您可以為工作負載配置合適的資源Request和Limit,確保應用Pod能夠被調度到合適節點上,同時減少集群資源的浪費。同時,基于命名空間的資源配額配置可以進一步限制命名空間可使用的CPU、內存、存儲資源、Pod數量等資源。
設置適當的資源請求和限制
您需要合理配置容器的資源Request和Limit,配置過高時容易造成資源浪費,配置不足時可能影響流量高峰期集群的穩定性。通常情況下,您會參考容器的歷史利用率情況、應用的壓測表現等來配置取值,同時權衡應用的穩定性和資源的利用率,還需要根據容器運行情況持續進行調整。
推薦您使用資源畫像功能生成資源配置的推薦值。資源畫像通過分析集群歷史資源的使用數據來推薦容器的資源規格,不僅能有效降低為容器配置Request和Limit的復雜度,還能實現容器粒度的資源規格推薦,提高集群資源的利用率。更多信息,請參見資源畫像。
管理命名空間與配額
在多租場景下,不同的業務或團隊通常會在不同的命名空間中部署應用。您可以通過命名空間進行資源的隔離,并為命名空間設置資源配額,限制業務或團隊消耗超出實際需求的資源。命名空間支持配置的配額包括CPU、內存、存儲資源、Pod數量等資源的上限。具體操作,請參見管理命名空間與配額。
選擇合適的彈性能力
如果您的集群業務流量波動較大,推薦您根據業務需求和策略配置自動伸縮策略,讓集群自動調整彈性計算資源。相較于傳統的手動調整Pod副本數量或手動增加節點的方式,自動伸縮能夠在實際需求來臨之前預測并啟動所需的工作負載和節點資源,在需求減少時快速縮容無需使用的資源。這讓您可以僅為實際需要和使用的資源支付費用,而無需基于最高需求來配置和支付資源,達到降低集群成本的目的。
工作負載伸縮(調度層彈性):主要負責修改工作負載的調度容量變化。例如,HPA是典型的調度層彈性組件,可以調整應用的副本數,調整的副本數會改變當前負載占用的調度容量,從而實現調度層的伸縮。
節點伸縮(資源層彈性):在集群的容量規劃不能滿足集群調度容量時,會擴容節點資源,進行調度容量的補充。
工作負載伸縮
方案 | 說明 |
基于CPU使用率、內存使用率或其他自定義指標實現Pod的自動擴縮,在業務負載上升時擴容Pod來緩解壓力,在業務負載下降時縮容以節省資源。HPA適用于服務波動較大、服務數量多且需要頻繁擴縮容的業務場景。 在為應用配置HPA時,為保證應用的穩定運行,建議您同時遵循以下做法:
| |
通過類似于Crontab的策略配置Pod的定時擴縮容,適用于業務流量有明顯高峰時段、應用程序需要在特定時間執行任務等場景。 在為應用配置CronHPA時,為保證應用的穩定運行,建議您同時遵循以下做法:
| |
根據Pod的歷史資源消耗推薦CPU和內存的配置,并在適當的情況下自動進行調整,適用于依賴穩定資源配置的有狀態工作負載。 在為應用配置VPA時,為保證應用的穩定運行,建議您同時遵循以下做法:
| |
通過對應用的歷史資源數據進行學習和分析,自動識別彈性周期并對容量進行預測,并動態調整Pod的數量,確保在業務高峰到來時提前完成資源擴容,以及在預測到業務低谷時適時縮容。 與HPA類似,在為應用配置AHPA時,為保證應用的穩定運行,建議您同時遵循以下做法:
| |
提供事件驅動的彈性能力,支持配置Kafka、MySQL、PostgreSQL、RabbitMQ、MongoDB等事件源,從事件源中進行數據的周期性消費,主要適用于音視頻離線轉碼、事件驅動作業、流式數據處理等場景。 在為應用配置KEDA時,為保證應用的穩定運行,建議您同時遵循以下做法:
|
節點伸縮
在使用工作負載伸縮的同時,為避免新擴容的Pod由于節點資源不足而調度失敗,建議您同時啟用節點伸縮。關于節點自動伸縮和節點即時彈性的方案選型,請參見彈性方案:節點自動伸縮與節點即時彈性。
方案 | 說明 |
當集群的容量規劃無法滿足應用Pod調度時,您可以使用節點自動伸縮方案實現節點的自動擴縮。節點自動伸縮適用于擴容規模較小(例如開啟彈性的節點池數量少于20,或對應節點池中的節點數量少于100),工作負載批次較為穩定,以單次伸縮為主等業務場景。 在配置節點自動伸縮時,為保證應用的穩定運行,建議您同時遵循以下做法:
| |
如果您的集群規模較大(例如彈性節點池中節點數大于100,或彈性節點池數大于20)、對資源交付速度有更高要求、期望靈活實現多實例規格和跨可用區自動伸縮,那么節點自動伸縮可能無法滿足您擴縮容的需求,推薦您使用節點即時彈性功能。節點即時彈性降低了開發者的使用門檻并提高了彈性效率,同時降低了運維人員維護成本。 但節點即時彈性存在一些使用限制,請參見節點即時彈性的使用限制。 | |
當您需要在短時間內快速創建大量Pod時,ECS節點擴容速度可能無法滿足要求,而預留額外的ECS節點又會產生資源浪費。借助ACK虛擬節點可以將Pod快速地調度到彈性容器實例ECI上運行,且無需購買和管理ECS節點。更多信息,請參見虛擬節點調度方案對比及介紹、通過虛擬節點將Pod調度到ECI上運行。 |
優化應用調度
您可以根據具體的業務場景參考以下建議提升集群資源的利用率:
如果集群中同時部署了Guaranteed和Burstable兩類Pod,可以通過動態資源超賣功能充分利用集群中已分配但未使用的資源。
如果期望讓多個容器運行在同一個GPU設備,降低GPU資源的使用成本,您可以使用GPU共享調度能力。
使用動態資源超賣
在ACK集群中,為了應對上下游鏈路波動,應用管理員提交了不同QoS等級的Pod(例如Guaranteed和Burstable)時一般需要為應用配置相當數量的資源Buffer,導致應用實際資源使用量遠低于資源申請量。為了充分利用集群中已分配但未使用的資源,您可以使用動態資源超賣功能,提升集群資源利用率。
動態資源超賣可以定義節點的安全冗余水位,將安全冗余水位外的資源作為可動態超賣的資源。節點可超賣的資源量基于實際資源用量動態更新,您可以調度低優先級的BestEffort任務到該節點上。更多信息,請參見動態資源超賣。
例如,在在離線混部場景下,您會在集群或節點上同時部署延遲敏感的在線類型和資源消耗高的離線類型的應用。此時,在滿足在線應用服務質量的同時,推薦您為離線應用提供超賣的資源,實現CPU、內存等維度的精細化管理,從而提升集群整體資源利用率。具體操作,請參見快速入門。
使用GPU共享調度
在GPU場景下,您可以通過GPU共享調度將多個容器運行在同一個GPU設備上,并提供GPU和算力的完整隔離,降低GPU資源的使用成本。
GPU的共享方式包括單卡共享和多卡共享,單卡共享指一個Pod只申請一張GPU卡,占用該GPU的部分資源,常用于模型推理場景;多卡共享指一個Pod申請多張GPU卡,每張GPU提供等量的部分資源,常用于支持分布式模型訓練代碼的開發。您還可以靈活配置GPU共享和隔離的策略,例如配置多個Pod優先集中使用同一GPU卡或盡量分散使用不同GPU卡。更多信息,請參見共享GPU調度概述。
建立資源和成本監控
通過成本洞察功能查看部門或應用成本
對于企業IT成本管理人員,一般需要從不同維度了解集群資源使用量及成本分布,獲取成本節約建議,從而提升集群資源利用率。您可以啟用ACK集群提供的成本洞察功能,查看指定財務治理周期內,指定集群、部門、應用的成本和資源使用情況。更多信息,請參見成本洞察。
在ACK集群中,Pod作為最小的可部署單元,是衡量集群成本的關鍵因素。但不同Pod可能有不同的資源配置、調度策略和生命周期,導致其成本估算較為復雜。成本洞察基于成本數據模型實現,能夠幫助您準確估算Pod的成本及占比,并將集群總費用分攤到不同業務單元。您也可以結合多維度的成本大盤,分析歷史資源趨勢和成本明細,定位業務成本異常根因。
定期掃描集群閑置資源
您可以定期掃描并釋放ACK集群中的閑置資源,例如CPU、內存、存儲、網絡資源等,減少不必要的開銷。
您可以啟用成本洞察功能查看Pod的閑置資源情況,從而分析資源浪費的原因,有針對性地設計資源優化策略。更多信息,請參見付費策略及Pod用量。
ACK集群還提供閑置資源優化功能,可以掃描出與集群相關但未被使用的資源(包括ECS、塊存儲、CLB、EIP等),供您判斷是否需要對這類閑置資源進行處理。更多信息,請參見閑置資源優化。