基于Prometheus,Alermanager实现Kubernetes自动伸缩
到目前为止Kubernetes对基于cpu使用率的水平pod自动伸缩支持比较良好,但 根据自定义metrics的HPA支持并不完善,并且使用起来也不方便。
下面介绍一个基于Prometheus和Alertmanager实现Kubernetes Pod 自动伸缩的方案,该方案支持任意自定义metrics。思路比较简单:由Prometheus负责收集需要的性能指标(如:当前链接的并发数,当前cpu的使用率等),根据定义好的告警规则生成告警事件,然后将告警事件传递给Alertmanager,由alertmanager触发webhook来实现最终的pod伸缩功能,如下图所示:
Prometheus中Alert rules的配置示例:
ALERT HpaTrigger IF app_active_task_count > 30 FOR 30m LABELS {serverity = "page",trigger="hpa",action = "scale-out",value = "{{$value}}", deployment="test", namespace = "{{$labels.namespace}}"} ANNOTATIONS { summary = "Instance {{$labels.namespace}}: scale-out", description = "{{$labels.namespace}} auto scale-out" }
上述规则表示应用的活动任务数持续30分钟都大于30的话,就需要创建新的pod以应对过多的任务数。但此处并不会直接触发水平Pod自动伸缩功能,prometheus根据告警规则只会生成一个告警事件,并将该事件传递给alertmanager,由alertmanager决定如何处理该告警。
Alertmanager配置示例:
global: route: receiver: 'email' #全局配置,默认将收到的告警事件路由给email接收器 group_wait: 30s group_interval: 5m repeat_interval: 4h routes: - receiver: 'auto-hpa' #将trigger=hpa的告警路由给auto-hpa match: trigger: hpa receivers: - name: 'email' email_configs: - to: ops@test.com from: monitor@test.com smarthost: smtpserver:port auth_username: "username" auth_identity: "username" auth_password: "password" require_tls: true - name: "auto-hpa" webhook_configs: - url: 'http://YOUR_WEBHOOK_IP:PORT/hpa' #自定义webhook url地址。 send_resolved: true
Alertmanager接受到相应的告警之后,会将获取到的具体metics值(此处metric name为app_active_task_count
)和在告警规则中定义的LABELS
信息合并为一个json数据,以POST方式发送给我我们定义好的webhook url。
webhook Python脚本示例:
from flask import Flask,request import json app = Flask(__name__) @app.route("/hpa",methods=["POST"]) def hpa(): content = request.get_json() #分析content字段,提取相关数据,调用k8s api实现水平pod自动伸缩的功能 #....... #....... print content if __name__ == "__main__": app.run("0.0.0.0")
这里我省略了具体调用k8s api实现pod伸缩的逻辑。Alertmanager将所有的信息以json格式post给我们自定义的脚本了,具体怎么处理,就看业务需求了。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Kubernetes 容器编排
对于Docker编制框架来说,Kubernetes 是最强的竞争者之一,这在版本1.2之后 更是如此。如果你正在寻找一种部署 Docker 容器到你的任一环境中的方法,Kubernetes给你至少7个选择它的理由。 Deployments 在K8S1.1中默认设置中,Deployments是alpha版。在1.2中,当你开启一个新的集群的时候,Deployments功能开启beta版,被认为是稳定的,并且可以运行。 为什么在K8S1.1中部署程序显得有些乏味 (点击这里阅读更多信息: 点击 ),在这里我就不赘述具体细节了,这里的要点是: 你得自己计算每个部署的唯一值,然后把它放到Replication-Controller定义文件。 首次创建以及更新已经存在的一个Replication-Controller,你得有不同的进程。 在你能够通过滚动更新配置一个新的版本后,你得在系统里找一个存在的Replication-Controller。 Deployments开始逐渐取代Replication-Controller/ Rolling-Update程序。Deployments是声明性的,...
- 下一篇
不可不知云服务成功的关键技术——容器和微服务
在移动互联网的世界里,“云”的概念已经行之有年,大家的生活都受到巨大的改变,从没有它不能活的 IM 即时通讯软件和社交平台、信息流、各种丰富生活的游戏和音乐软件,到像“滴滴打车”这样增进生活便利的工具应用,组成了现代人生活的样貌。一般大众大概不知道这样的生活进步背后是由不断演进的云技术所成就的,然而身为开发者,想要在这样令人如痴如醉却又极度竞争的环境下立足、成功,不能不了解其中的功夫。 所谓的“云”简单来说就是有一台不停机的电脑,在进行我们所需要做的事情,我们又称它为服 务器(Server)。由于Server并不需要漂亮的介面,而Windows和Mac这样的Operating System对Server来说太过肥大,因此有很多针对Server所设计的OS,最后由Linux胜出,Linux也被称为 Server 的核心。从Server的角度来看,每个在上面跑的服务称为Process,当电脑硬体性能越来越强大,能同时 进行的Process越来越多,此时若任何一个Process当掉,都很有可能会影响其他服务,因此Process独立性开始成为许多人关注研究的技术。 最近处理Process独立性...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启