基于Prometheus,Alermanager实现Kubernetes自动伸缩
2017-09-18 14:16
525 查看
到目前为止Kubernetes对基于cpu使用率的水平pod自动伸缩支持比较良好,但根据自定义metrics的HPA支持并不完善,并且使用起来也不方便。
下面介绍一个基于Prometheus和Alertmanager实现Kubernetes Pod 自动伸缩的方案,该方案支持任意自定义metrics。思路比较简单:由Prometheus负责收集需要的性能指标(如:当前链接的并发数,当前cpu的使用率等),根据定义好的告警规则生成告警事件,然后将告警事件传递给Alertmanager,由alertmanager触发webhook来实现最终的pod伸缩功能,如下图所示:
Prometheus中Alert rules的配置示例:
上述规则表示应用的活动任务数持续30分钟都大于30的话,就需要创建新的pod以应对过多的任务数。但此处并不会直接触发水平Pod自动伸缩功能,prometheus根据告警规则只会生成一个告警事件,并将该事件传递给alertmanager,由alertmanager决定如何处理该告警。
Alertmanager配置示例:
Alertmanager接受到相应的告警之后,会将获取到的具体metics值(此处metric name为
webhook Python脚本示例:
这里我省略了具体调用k8s api实现pod伸缩的逻辑。Alertmanager将所有的信息以json格式post给我们自定义的脚本了,具体怎么处理,就看业务需求了。
下面介绍一个基于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给我们自定义的脚本了,具体怎么处理,就看业务需求了。
相关文章推荐
- 基于Prometheus,Alermanager实现Kubernetes自动伸缩
- kubernetes要实现的目标——随机关掉一台机器,看你的服务能否正常;减少的应用实例能否自动迁移并恢复到其他节点;服务能否随着流量进行自动伸缩
- 基于CAS的SSO单点登录-实现ajax跨域访问的自动登录(也相当于超时重连)(部分转载)
- 基于svn ls 实现的SVN目录自动补全
- 基于C#实现的开源自动更新程序
- 基于读取车载RFID标签自动开关车库门c#算法实现
- Android基于高德地图实现搜索框的自动输入提示功能
- 基于百度API的开源自动翻译.srt文件软件的实现的几个技术细节总结附源代码
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(三) 流水线结构线程池设计
- php基于str_pad实现卡号不足位数自动补0的方法
- 模拟登录神器之PHP基于cURL实现自动模拟登录类
- 基于Kubernetes和Docke实现留言簿案例
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(一) 综述
- 【VS开发】【图像处理】基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
- 基于容器微服务的PaaS云平台设计(二)通过kubernetes实现微服务容器管理
- 基于jQuery的图片大小自动适应实现代码
- [原]基于体裁的中文网页自动分类的研究与实现
- kubernetes学习记录(2)——基于Centos7.2的kubernetes集群自动安装与配置
- 基于python3+selenium实现自动枪火车票
- SharePoint基于windows验证的如何通过组策略实现IE自动以当前域账号登录SP站点