基于Prometheus,Alermanager实现Kubernetes自动伸缩

栏目: 服务器 · 发布时间: 6年前

内容简介:基于Prometheus,Alermanager实现Kubernetes自动伸缩

到目前为止Kubernetes对基于cpu使用率的水平pod自动伸缩支持比较良好,但根据自定义metrics的HPA支持并不完善,并且使用起来也不方便。

下面介绍一个基于Prometheus和Alertmanager实现Kubernetes Pod 自动伸缩的方案,该方案支持任意自定义metrics。思路比较简单:由Prometheus负责收集需要的性能指标(如:当前链接的并发数,当前cpu的使用率等),根据定义好的告警规则生成告警事件,然后将告警事件传递给Alertmanager,由alertmanager触发webhook来实现最终的pod伸缩功能。

如下图所示:

基于Prometheus,Alermanager实现Kubernetes自动伸缩

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给我们自定义的脚本了,具体怎么处理,就看业务需求了。如果有IAAS层的api接口,则可以在脚本中可以根据业务量自动创建或者销毁instance,实现真正的资源伸缩功能。


以上所述就是小编给大家介绍的《基于Prometheus,Alermanager实现Kubernetes自动伸缩》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

可视化未来

可视化未来

[美] 埃雷兹·艾登、[法] 让-巴蒂斯特·米歇尔 / 王彤彤、沈华伟、程学旗 / 浙江人民出版社 / 2015-9 / 54.90元

科学的传播速度有多快?今时今日我们很少谈论上帝了吗?人们什么时候开始用“having sex” 而不用“making love”? 史上的人是在哪岁成名的?语法的变化速度到底有多快?哪些作家被纳粹审查得最彻底? “donut” 什么时候开始取代“doughnut”? 我 们能否预测人类未来?比尔·克林顿和花椰菜哪个更出名? 《可视化未来》一书的两位作者通过与“谷歌图书”的合作,得以有机会研究......一起来看看 《可视化未来》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具