天天看點

K8s水準彈性伸縮演練

作者:雲原生拓荒者

HPA,是Horizontal Pod Autoscaler縮寫,是K8s實作Pod水準彈性伸縮的控制器。

伸縮規則有如下兩類

  1. 名額伸縮,設定Pod的cpu或記憶體使用率等監測名額,當達到門檻值後, 執行伸縮活動。
  2. 定時伸縮,設定定時任務執行伸縮。對于有顯著時間規律的業務場景,可以使用定時伸縮。

上述兩種伸縮類型隻是觸發規則不同,伸縮的實作方式相同。本文重點示範名額伸縮。

HPA工作原理

K8s水準彈性伸縮演練

HPA修改ReplicaSet工作原理

HPA控制器,通過控制Deployment修改ReplicaSet數量,來調整Pod副本的數量。

HPA控制器從metrics api擷取資源度量名額(如CPU使用率),得到名額值後會去計算目前使用的百分比,然後與設定的資源使用率門檻值對比,以決定是否伸縮Pod。

為deployment建立HPA規則

K8s叢集内,HPA是作為一個API資源對象存在,每一條HPA規則都需要綁定deployment。

kubectl get hpa可以檢視namespace下的hpa,如以下執行個體,目前“xujianhua-gz”這個ns下還沒有建立hpa。

$ kubectl get hpa -n xujianhua-gz
No resources found in xujianhua-gz namespace.           

ns下有wordpress的deployment。wordpress是一個部落格應用,本文選擇增加wordpress的并發,使得服務端CPU過載,來演練hpa的伸縮能力。

K8s水準彈性伸縮演練

檢視deployment

在wordpress deployment下建立一條hpa規則。

$ kubectl autoscale deployment wordpress -n xujianhua-gz --cpu-percent=50 --min=1 --max=10. # 注意要用-n指定namespace參數,否則建立不成功
horizontalpodautoscaler.autoscaling/wordpress autoscaled #代表建立hpa成功           

檢視hpa發現伸縮規則已建立成功,當cpu使用率達到50%便開始伸縮活動。

K8s水準彈性伸縮演練

hpa規則

Tagets代表pod監測名額的使用率和門檻值。MINPODS代表最小的Pod副本數,MAXPODS代表最大副本數。REPLICAS代表目前副本數。HPA的功能就是按照名額規則在MINPODS和MAXPODS間調整REPLICAS的數值。

增加wordpress應用的負載

首先需要安裝一個Web服務壓測工具-http_load

http_load可以模拟多程序并發通路web網頁,本示例用來模拟對wordpress的高并發通路場景。

安裝http_load

wget http://www.acme.com/software/http_load/http_load-09Mar2016.tar.gz
tar zxvf http_load-09Mar2016.tar.gz & cd http_load-09Mar2016
make & make install            

模拟并發通路wordpress

# 建立一個名為url.txt的檔案,把被壓測的網頁url寫進去。
touch url.txt
vim url.txt #脫敏的demo url :http://180.184.197.xx/
# http_load參數
#-p 并發通路程序數
#-f 總的通路次數
#-r 每秒的通路頻率
#-s 總的通路時間
http_load -p 100 -f 10000 url.txt           

terminal中可以看到工具正在高頻通路目标站點

K8s水準彈性伸縮演練

高并發現場

驗證HPA的伸縮效果

用kubectl的watch參數,監聽前文所建立的K8s hpa的活動記錄,會發現Replicas的數量從1迅速增長到10。

kubectl get hpa -n xujianhua-gz --watch           
K8s水準彈性伸縮演練

Pod副本數從1增加到10

從K8s 控制台,檢視Pod執行個體清單,壓測前和壓測後的對比如下所示。

K8s水準彈性伸縮演練

壓測前

K8s水準彈性伸縮演練

壓測後

總結

K8s原生支援的HPA功能,可以非常便捷地實作Pod的彈性伸縮,運維人員隻需要在K8s中為deployment開啟HPA,無需配置負載均衡,彈性伸縮等其他雲服務,運維成本大大降低。其次,Pod相比虛拟機,拉起時間更快,是以K8s架構下應用的彈性伸縮,比虛拟機環境伸縮速度更快,更能适應流量快速變化的業務需求。

繼續閱讀