您現在的位置是:首頁 > 音樂首頁音樂

Kubernetes優秀實踐:如何正確設定資源請求和限制?

由 51CTO 發表于 音樂2023-01-20
簡介它考慮到工作負載以往的記憶體和CPU使用情況,以及pod的當前資源使用情況,以便建議如何設定資源請求和限制

我一看見什麼就想起了什麼

Kubernetes是一個動態系統,可以自動適應使用者工作負載的資源利用率。

Kubernetes有兩個擴充套件級別。每個單獨的Kubernetes部署都可以使用Horizontal Pod Autoscaler(HPA)來自動擴充套件,而整個叢集使用Cluster Autoscaler來擴充套件。HPA監測部署中各個pod的目標指標(通常是CPU或記憶體使用情況),必要時新增或刪除pod,使該指標接近指定的目標。同時,Cluster Autoscaler處理叢集本身的擴充套件。它監視無法排程的pod,併為叢集新增節點或從叢集刪除節點,以容納這些pod。

Kubernetes優秀實踐:如何正確設定資源請求和限制?

Kubernetes支援這兩種擴充套件操作的一項關鍵特性是,能夠針對工作負載設定特定的資源請求和限制。透過為每個pod使用多少CPU和記憶體設定合理的限制和請求,您可以儘量提高基礎架構的利用率,同時確保應用程式效能很高。想最大限度地有效利用Kubernetes叢集,正確設定資源限制和請求很重要。對應用程式設定過低的限制會導致問題。比如說,如果記憶體限制太低,Kubernetes一定會因應用程式違反限制而終止它。與此同時,如果把限制設定得太高,就會因過度分配而浪費資源,這意味著最終支付更高的費用。

雖然Kubernetes優秀實踐要求您應該始終對工作負載設定資源限制和請求,但知道為每個應用程式使用什麼樣的值並非總是易事。因而,一些團隊從不設定請求或限制,而另一些團隊在初始測試過程中設定得過高,然後從不確保設定正確。確保擴充套件操作合理的關鍵是,對每個工作負載正確設定資源限制和請求,以便工作負載有效地執行。

設定資源限制和請求是在Kubernetes叢集上儘可能高效、可靠地執行應用程式的關鍵。

1、如何設定Kubernetes資源?

Fairwinds的開源專案Goldilocks幫助團隊將資源分配給他們的Kubernetes部署,並做好這些資源的調校。Goldilocks是一個Kubernetes控制器,收集執行中的pod方面的資料,並就如何設定資源請求和限制提供建議。它可以幫助組織瞭解資源使用情況、資源成本和確保效率的優秀實踐。Goldilocks使用Kubernetes Vertical Pod Autoscaler(VPA)。它考慮到工作負載以往的記憶體和CPU使用情況,以及pod的當前資源使用情況,以便建議如何設定資源請求和限制。(雖然VPA可以為您設定限制,但通常最好只使用VPA引擎來提供建議。)實際上,該工具為名稱空間中的每個部署建立一個VPA,然後查詢該VPA以獲取資訊。

要檢視這些建議,必須使用Kubectl來查詢每個VPA物件,這對於大中型部署來說很快會變得繁瑣。這時候儀表板就有了用武之地。一旦您的VPA部署到位,建議會出現在Goldilocks儀表板中。

儀表板根據您希望為部署獲得的服務質量(QoS)類別提供兩種型別的建議:

保證式,這意味著應用程式將被授予比其他工作負載更高的優先順序,以便保證可用資源。在這個類別中,您將資源請求和限制設定為完全相同的值,這將保證在排程時容器請求的資源對其可用。這個QoS類別通常適合最穩定的Kubernetes叢集。

突發式,這意味著應用程式將保證得到最低數量的資源,但如果資源可用,將獲得更多的資源。實際上,您的資源請求低於限制。排程程式將使用請求將pod放置到節點上,但隨後pod可以在被終止或遏制之前使用更多的資源,直至達到上限。在決定資源匱乏時刪除哪些工作負載時,該QoS類別被授予較低的優先順序。

儀表板為保證式和突發式QoS類別提供了建議。在保證式類別中,我們建議將請求和限制設定為VPA“目標”欄位。

注意,第三個QoS類別:盡力式(BestEffort)意味著不設定請求或限制,只有當所有其他請求都得到滿足時才為應用程式分配資源。不建議使用盡力式。

2、為叢集使用專門的例項組

如果您對微調例項(工作負載在其上面執行)感興趣,可以使用不同的例項組型別和節點標籤將工作負載引導到特定的例項型別。

不同的業務系統常常有不同大小的資源需求,以及專門的硬體需求(比如GPU)。Kubernetes中的節點標籤概念讓您可以將標籤放在所有不同的節點上。同時,pod經過配置後,可以使用特定的“nodeSelectors”以匹配特定的節點標籤,這些標籤決定了pod可以排程到哪些節點上。透過利用具有適當標記的不同例項型別的例項組,您可以將所選擇的雲提供商提供的底層硬體與Kubernetes中的工作負載混合搭配。

如果您有不同大小、不同需求的工作負載,將這些工作負載放在不同的例項型別上,並使用標籤將工作負載引導到這些不同的例項型別上從戰略上和成本上來說都是明智之舉。

競價例項(spot instance)與這一想法密切有關。大多陣列織熟悉按需購買例項或在固定期限內按保留條款購買例項的模式。但是如果工作負載可能被中斷,您可能需要考慮使用競價例項。這種例項讓您可以以相當大的折扣使用雲提供商的剩餘容量,面臨的風險是對常規按需例項的需求加大時,您的例項可能會被終止。

如果您的某些業務工作負載可以容忍例項隨機終止的風險,那麼可使用同樣的節點標籤概念,將這些工作負載專門排程到這些型別的例項組上,從而大幅節省成本。

3、如何使用Kubernetes資源方面的建議?

Goldilocks是Fairwinds Insights用於提供工作負載效率和效能最佳化的工具之一。有了Fairwinds Insights,Goldilocks可以跨多個叢集部署,這樣團隊可以透過單一管理平臺獲得資訊。Fairwinds Insights為Goldilocks添加了資料和建議,包括潛在的成本節約。出現的儀表板包括名稱空間和部署列表,附有平均總成本和成本方面的建議。

許多組織將CPU和記憶體請求及限制設定過高,所以當它們運用Fairwinds Insights的建議時,能夠將更多的pod放在更少的Kubernetes worker節點上。啟用Cluster Autoscaler後,任何多餘的節點都將在它們不使用時被刪除,這節省了時間和資金。

使用像Fairwinds Insights這樣的軟體或像Goldilocks這樣的開源工具,開發人員可以透過為自己自動建議來避免不靠譜的猜測。反過來,這讓您有機會提高叢集效率和減少雲開銷。