暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes-HPA初体验

金陵砍柴人 2021-03-04
505

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多行)

  1. ## Configuration for prometheusAdpater

  2. prometheusAdpater:

  3. affinity:

  4. # the switch for prometheusAdpater

  5. enabled: true

2)创建HPA控制器:

  1. kubectl autoscale deployment workbei-mindmap-beta --cpu-percent=2 --min=1 --max=5 --namesapce=dingtalk-auth-beta

查看是否创建成功:

  1. kubectl get hpa --namespace=dingtalk-auth-beta

成功截图:

 REFERENCE可想而知:代表的是关联的deploy,尤其注意这个TARGETS指标!分号左侧代表的是当前的指标值,右侧代表的伸缩阈值。

3)测试是否能够伸缩:

我开启了3个窗口,分别输入如下命令来不停的访问pod中的探针接口来渴望增加CPU利用率

  1. while true;do curl https://***.***.***/probe;done

期间可以通过如下命令观察pod的CPU利用率情况

  1. kubectl top pods --namespace=dingtalk-auth-beta

同时输入如下命令观察HPA指标情况

  1. kubect get hps --namespace=dingtalk-auth-beta -w

结果截图:  查看当前pod副本数量:  那么,让我们来停止访问,测试是否能够自动缩容?

停止访问的窗口,喝杯茶歇一会儿 

稳健


文章转载自金陵砍柴人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论