Horizontal Pod Autoscaler基於觀察到的CPU利用率(或藉助自定義指標 支持,基於其餘一些應用程序提供的指標)自動縮放複製控制器,部署或副本集中的Pod數量 。請注意,自動伸縮不適用於沒法縮放的對象,例如DaemonSets。php
Horizontal Pod Autoscaler被實現爲Kubernetes API資源和控制器。該資源肯定控制器的行爲。控制器會按期調整複製控制器或部署中副本的數量,以使觀察到的平均CPU利用率與用戶指定的目標相匹配。nginx
簡單的理解:自動水平伸縮,是指運行在k8s上的應用負載(POD),能夠根據資源使用率進行自動擴容、縮容;咱們知道應用的資源使用率一般都有高峯和低谷,因此k8s的HPA特性應運而生;它也是最能體現區別於傳統運維的優點之一,不只可以彈性伸縮,並且徹底自動化!git
下面咱們進行實驗:github
# 建立deploy和serviceapache
$ kubectl run php-apache --image=pilchard/hpa-example --requests=cpu=200m --expose --port=80
# 建立autoscaler
$ kubectl autoscale deploy php-apache --cpu-percent=50 --min=1 --max=10
# 等待3~5分鐘查看hpa狀態
$ kubectl get hpa php-apache
# 增長負載
$ kubectl run --rm -it load-generator --image=busybox /bin/sh $ while true; do wget -q -O- http://php-apache; done;
# 等待約5分鐘查看hpa顯示負載增長,且副本數目增長
# 注意k8s爲了不頻繁增刪pod,對副本的增長速度有限制 # 實驗過程能夠看到副本數目從1到4到8到10,大概都須要4~5分鐘的緩衝期
$ kubectl get hpa php-apache -w
# 清除負載,CTRL+C 結束上述循環程序,稍後副本數目變回1
經過註解annotations添加自動伸縮例子:api
Deployment / StatefulSet:bash
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: example labels: annotations: hpa.autoscaling.banzaicloud.io/minReplicas: "1" hpa.autoscaling.banzaicloud.io/maxReplicas: "3" cpu.hpa.autoscaling.banzaicloud.io/targetAverageUtilization: "70"
chart模板:https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/controller-hpa.yamlapp
參考:運維
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/spa
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/