what:什么是HPA?
缩写:HPA
全称:Horizontal Pod Autoscaling
中文:POD水平自动伸缩
WHY:为什么需要HPA?
在实际生产中,随着业务量的上升,POD的负载也随之上升,我们的老办法是手动伸缩POD:
将名为foo中的pod副本数设置为3 kubectl scale --replicas=3 rs/foo 但是不乏有这样的场景:某一家商铺临时举行了一次秒杀活动,作为攻城狮的我们并未提前做准备,面对大量流量的访问,之前的POD数量无法支撑这次秒杀所带来的大量且临时的QPS,服务器歇火了...这当然不是我们想看到的。
于是,一个发自灵魂深处的拷问便诞生了:
有没有这样一个玩意儿?它能够随时监控着deploy,根据deploy的某项指标,比如当deploy控制的pod的QPS>30时,就自动给他扩容,当QPS<=30的时候,就自动给他缩容,能够享受自动扩容带来的优势同时也不会浪费集群的资源。
不由感叹,多么美好的一幅画面啊!四海升平,集群上下其乐融融!
HOW:如何实现HPA?
在此,我实现了一个demo,具体功能如下:
当POD的CPU利用率>2%时,给deploy扩容,POD的CPU利用率<=2%时,自动缩容
实现此功能的必要条件:
1.阿里云K8S集群
2.利用helm安装prometheus-operator
实现步骤 1)首先,更新helm发布的prometheus-operator,开启PrometheusAdapter(约1400多行)
## Configuration for prometheusAdpater
prometheusAdpater:
affinity:
# the switch for prometheusAdpater
enabled: true
2)创建HPA控制器:
kubectl autoscale deployment workbei-mindmap-beta --cpu-percent=2 --min=1 --max=5 --namesapce=dingtalk-auth-beta
查看是否创建成功:
kubectl get hpa --namespace=dingtalk-auth-beta
成功截图:
REFERENCE可想而知:代表的是关联的deploy,尤其注意这个TARGETS指标!分号左侧代表的是当前的指标值,右侧代表的伸缩阈值。
3)测试是否能够伸缩:
我开启了3个窗口,分别输入如下命令来不停的访问pod中的探针接口来渴望增加CPU利用率
while true;do curl https://***.***.***/probe;done
期间可以通过如下命令观察pod的CPU利用率情况
kubectl top pods --namespace=dingtalk-auth-beta
同时输入如下命令观察HPA指标情况
kubect get hps --namespace=dingtalk-auth-beta -w
结果截图:
查看当前pod副本数量:
那么,让我们来停止访问,测试是否能够自动缩容?
停止访问的窗口,喝杯茶歇一会儿 




