從技術上講,容器化應用能該幫助組織更具有成本的優勢,但Kubernetes到處布滿了成本陷阱,可能會使你超出預算。幸運的是,有一些策略可以控制云成本,自動伸縮就是其中之一。Kubernetes帶有三個內置的自動伸縮機制來幫助你做到這一點。它們配合得越好,運行應用程序的成本就越低。
1.Pod水平自動擴縮(HPA)
Pod 水平自動擴縮(HorizontalpodAutoscaler) 可以基于CPU利用率自動擴縮 ReplicationController、Deployment、ReplicaSet 和 StatefulSet 中的pod數量。除了CPU利用率,也可以基于其他應程序提供的 自定義度量指標 來執行自動擴縮。
生產環境中,許多應用程序的使用情況會出現波動,這意味著實時添加或刪除pod副本會帶來更好的成本收益。這就是 HorizontalpodAutoscaler (HPA) 通過自動執行此操作來提供幫助的地方。
何時使用 HPA?
它非常適合擴展無狀態應用程序,當然也可以用于有狀態應用。如果將 HPA 與Cluster Autoscaler(CA)結合使用,能夠為經常變化的工作負載獲得最大的成本節約。當pod數量減少時,這將減少活動節點的數量。
HPA 是如何工作的?
HPA 監控pod以了解pod副本的數量是否需要更改。為了確定這一點,它采用每個pod指標值的平均值,并檢查刪除或添加副本,是否會使該值更接近目標。
例如,如果你部署的目標CPU利用率為50%,而現在你有五個pod在那里運行,則平均CPU利用率為 75%。為了使pod平均值更接近你的目標,HPA 控制器將增加三個副本。
HPA 最佳實踐
為 HPA 提供每個pod資源指標:需要在Kubernetes集群中安裝 metrics-server。
為每個容器配置值:HPA 根據觀察到的pod的CPU利用率值(來自單個pod的資源請求的百分比)做出擴展決策。如果你沒有包含某些容器的值,則計算將不準確并可能導致出現糟糕的擴展決策。
使用自定義指標:HPA 擴展決策的另一個來源是自定義指標。HPA 支持兩種類型的自定義指標:pod 指標和對象指標。確保使用正確的目標類型。你還可以使用來自第三方監控系統的外部指標。
2. Pod垂直自動擴縮 (VPA)
Vertical Pod Autoscaler(VPA),即垂直 Pod 自動擴縮容,它根據容器資源使用率自動設置 CPU 和 內存 的requests,從而允許在節點上進行適當的調度,以便為每個 Pod 提供適當的資源。它既可以縮小過度請求資源的容器,也可以根據其使用情況隨時提升資源不足的容量。
這種自動縮放機制增加和減少了pod容器的CPU和內存資源請求,以使分配的集群資源與實際使用情況保持一致。VPA 還需要訪問Kubernetes指標服務器,因為它僅替換由副本控制器管理(Replication Controller)的pod。
提示:
“如果你的 HPA 配置沒有使用CPU或內存來設置其擴展目標,請同時使用 VPA 和 HPA。
何時使用 VPA?
工作負載可能會在某個時候遇到高利用率,但不斷增加其請求限制,不是一個好辦法。你可能會浪費CPU或內存資源并限制運行它們的節點。將工作負載分布到多個應用程序實例有時候也是很棘手的,這就是 Vertical Pod Autoscaler 的幫助所在。
VPA 是如何工作的?
VPA 部署由三個組件組成:
Recommender : 監控資源利用率并計算目標值,也就是檢查歷史資源利用率和當前使用的模式,并推薦一個理想的資源請求值
Updater : 檢查pods 資源限制是否需要更新
Admission Controller:在創建pod時覆蓋其資源請求
由于Kubernetes不允許更改正在運行的pod的資源限制,因此 VPA 首先終止舊的pod,然后將更新的值注入新的pod規范。
VPA 最佳實踐
避免在Kubernetes的1.11版本之前使用。
使用updateMode:Off運行 VPA,以了解你要自動縮放的pod的資源使用情況。這將為你提供推薦的CPU和內存請求,也是以后調整的重要基礎。
如果工作負載經常出現高使用率和低使用率的峰值,則 VPA 可能會過于激進,因為它可能會不斷地一遍又一遍地替換pod。在這種情況下,使用HPA 效果更好。
3. Cluster Autoscaler(CA)
Cluster Autoscaler 在K8S集群中,通過增加/刪除其中的Node,達到集群擴縮容的目的。由于 Cluster Autoscaler 控制器工作在基礎設施級別,因此它需要具備添加和刪除基礎設施的權限,你應該安全地管理這些授權信息(例如,遵循最小權限原則)。
何時使用集群自動擴縮器?
如果你希望通過動態擴展節點數量,以最大化當前集群利用率來優化成本,則此自動擴展機制非常有效。對于旨在擴展和滿足動態需求的工作負載而言,它是一款出色的工具。
Cluster Autoscaler 如何工作?
它會檢查不可調度的pod,然后計算是否可以整合當前部署的所有pod,以在較少數量的節點上運行它們。如果 Cluster Autoscaler 識別出具有可以重新調度到集群中其他節點的pod的節點,它會驅逐它們并刪除備用節點。
集群自動擴縮器最佳實踐
部署 Cluster Autoscaler 時,要與之相匹配的Kubernetes版本一起使用。(兼容性列表)。
檢查集群節點是否具有相同的CPU和內存容量:否則集群自動縮放器將無法工作,因為它假設集群中的每個節點都具有相同的容量。
確保自動縮放的pod都具有指定的資源請求。
總結
自動縮放機制對于控制云成本非常有價值,但它們需要大量的手動配置:
防止 HPA 和 VPA 沖突:你需要檢查你的 HPA 和 VPA 策略是否最終發生沖突。密切關注成本,以防止它們失控。
平衡三種機制:你需要平衡三種機制的組合,以確保工作負載支持峰值負載,并在負載較低時將成本保持在最低水平。
參考:https://www.kubernetes.org.cn/9443.html
編輯;jq
-
kubernetes
+關注
關注
0文章
225瀏覽量
8725
原文標題:Kubernetes自動伸縮機制,為你降本增效
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論