利用k8s實現HPA


如何利用kubernetes實現應用的水平擴展(HPA)

雲計算具有水平彈性的特性,這個是雲計算區別於傳統IT技術架構的主要特性。對於Kubernetes中的POD集群來說,HPA就是實現這種水平伸縮的控制器, 它能在當POD中業務負載上升的時候,創建新的POD來保證業務系統穩定運行,當POD中業務負載下降的時候,可以銷毀POD來提高資源利用率。
 
HPA介紹
Horizontal Pod Autoscaling,簡稱HPA,是Kubernetes中實現POD水平自動伸縮的功能。為什么要水平而不叫垂直, 那是因為自動擴展主要分為兩種:
 
水平擴展(scale out),針對於實例數目的增減
垂直擴展(scal up),即單個實例可以使用的資源的增減, 比如增加cpu和增大內存
而HPA屬於前者。它可以根據CPU使用率或應用自定義metrics自動擴展Pod數量(支持 replication controller、deployment 和 replica set)
架構介紹
 
獲取metrics的兩種方式:
Heapster: heapster提供metrics服務, 但是在v1(autoscaling/v1)版本中僅支持以CPU作為擴展度量指標, 而其他比如:內存, 網絡流量, qps等目前處於beta階段(autoscaling/v2beta1)
Cousom: 同樣處於beta階段(autoscaling/v2beta1), 但是涉及到自定義的REST API的開發, 復雜度會大一些, 並且當需要從自定義的監控中獲取數據時,只能設置絕對值,無法設置使用率
工作流程:
 
1.創建HPA資源,設定目標CPU使用率限額,以及最大、最小實例數, 一定要設置Pod的資源限制參數: request, 負責HPA不會工作。
2.控制管理器每隔30s(可以通過–horizontal-pod-autoscaler-sync-period修改)查詢metrics的資源使用情況
3.然后與創建時設定的值和指標做對比(平均值之和/限額),求出目標調整的實例個數
4.目標調整的實例數不能超過1中設定的最大、最小實例數,如果沒有超過,則擴容;超過,則擴容至最大的實例個數
重復2-4步
 
自動伸縮算法:
HPA Controller會通過調整副本數量使得CPU使用率盡量向期望值靠近,而且不是完全相等.另外,官方考慮到自動擴展的決策可能需要一段時間才會生效:例如當pod所需要的CPU負荷過大,從而在創建一個新pod的過程中,系統的CPU使用量可能會同樣在有一個攀升的過程。所以,在每一次作出決策后的一段時間內,將不再進行擴展決策。對於擴容而言,這個時間段為3分鍾,縮容為5分鍾(可以通過--horizontal-pod-autoscaler-downscale-delay, --horizontal-pod-autoscaler-upscale-delay進行調整)。
 
HPA Controller中有一個tolerance(容忍力)的概念,它允許一定范圍內的使用量的不穩定,現在默認為0.1,這也是出於維護系統穩定性的考慮。例如,設定HPA調度策略為cpu使用率高於50%觸發擴容,那么只有當使用率大於55%或者小於45%才會觸發伸縮活動,HPA會盡力把Pod的使用率控制在這個范圍之間。
具體的每次擴容或者縮容的多少Pod的算法為: Ceil(前采集到的使用率 / 用戶自定義的使用率) * Pod數量)
每次最大擴容pod數量不會超過當前副本數量的2倍

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM