基於Heapster的HPA

lightwing發表於2021-09-09

概述

Horizontal Pod Autoscaling,簡稱HPA,是Kubernetes中實現POD水平自動伸縮的功能。自動擴充套件主要分為兩種:

  • 水平擴充套件(scale out),針對於例項數目的增減

  • 垂直擴充套件(scal up),即單個例項可以使用的資源的增減, 比如增加cpu和增大記憶體

HPA屬於前者。它可以根據CPU使用率或應用自定義metrics自動擴充套件Pod數量(支援 replication controller、deployment 和 replica set)

節點擴縮容層面,k8s叢集的Cluster Autoscaler持續監控Pods,一旦發現Pods無法被schedule,則基於PodConditoin進行擴充套件,即node節點的自動擴縮容,具體內容在後續文章中介紹。

監控資料獲取

  • Heapster: heapster收集Node節點上的cAdvisor資料,並按照kubernetes的資源型別來集合資源。但是在v1.11中已經被廢棄(heapster監控資料可用,但HPA不再從heapster拿資料)

  • metric-server: 在v1.8版本中引入,官方將其作為heapster的替代者。metric-server依賴於kube-aggregator,因此需要在apiserver中開啟相關引數。v1.11中HPA從metric-server獲取監控資料

工作流程

  • 1.建立HPA資源,設定目標CPU使用率限額,以及最大、最小例項數, 一定要設定Pod的資源限制引數: request, 否則HPA不會工作。

  • 2.控制管理器每隔30s(可以透過–horizontal-pod-autoscaler-sync-period修改)查詢metrics的資源使用情況

  • 3.然後與建立時設定的值和指標做對比(平均值之和/限額),求出目標調整的例項個數

  • 4.目標調整的例項數不能超過1中設定的最大、最小例項數,如果沒有超過,則擴容;超過,則擴容至最大的例項個數

如何部署:

  • 1.6-1.8版本預設使用heapster

  • 1.11版本及以上預設使用metric-server(需單獨安裝,並開啟引數)

1.部署和執行php-apache並將其暴露成為服務

圖片描述

image

2.建立HPA


圖片描述

image

如果為1.8及以下的k8s叢集,指標正常,如果為1.11叢集,需要執行如下操作。


圖片描述

image

4.向php-apache服務增加負載,驗證自動擴縮容

啟動一個容器,並透過一個迴圈向php-apache伺服器傳送無限的查詢請求(請在另一個終端中執行以下命令)


圖片描述

image

5.觀察HPA是否生效


圖片描述

image

用yaml建立HPA的方式為:

圖片描述

image

實現細節

圖片描述

image

HPA由一個控制迴圈實現,迴圈週期由--horizontal-pod-autoscaler-sync-period 標誌指定,預設是30秒,每個週期內,controller-manager會查詢HPA中定義的metric的資源利用率。

如上例子,pod的request定義為200M,而HPA定義的target為50%,即HPA將透過增加或者減少Pod副本的數量(透過Deployment)以保持所有Pod的平均CPU利用率在50%以內(即200*0.5=100M以內),迴圈週期到達時,獲取pod的1分鐘內的平均cpu利用率(從heaspter),發現超過了100M,為332M,於是透過下面的公式,決定最終的pod數量

TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)

即 332/50 =6.xxx ceil為向上取整,得到7。如果得到的結果大於10,則為10

因為每次HPA生效都會建立或者刪除pod,而這些操作其實會影響到metric監控值,如建立pod會暫時性的升高cpu,因此每次擴容都要間隔3分鐘,縮容需要間隔5分鐘。且需要滿足:avg(CurrentPodsConsumption)/ Target下降9%,進行縮容,增加至10%才進行擴容

這樣做好處是:
1、判斷的精度高,不會頻繁的擴縮pod,造成叢集壓力大。
2、避免頻繁的擴縮pod,防止應用訪問不穩定

實現hpa的條件:
1、hpa不能autoscale daemonset型別control
2、要實現autoscale,pod必須設定request



作者:二二向箔
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3407/viewspace-2820709/,如需轉載,請註明出處,否則將追究法律責任。

相關文章