• 如何实现Docker应用的自定义弹性伸缩


    简介

    现在有很多客户很关心应用的自动弹性伸缩,有些客户也有自己的监控框架,并希望能跟阿里云容器服务进行集成。阿里云容器服务提供了服务弹性伸缩触发器,并能够跟监控框架集成来实现自定义的服务自动弹性伸缩。
    阿里云容器服务会自动采集容器的监控数据,并可以通过集成将监控数据发送到三方的监控框架中。有了监控数据,我们可以在监控框架中定义自己的报警规则,当指标发生报警的时候调用阿里云容器服务提供的触发器来进行容器的扩容或者缩容。 下面用Influxdb,Kapacitor来介绍怎样通过触发器跟监控框架集成实现自定义弹性伸缩。

    生成服务的Scaling触发器

    • 在阿里云容器服务的应用列表中,点击要进行自动扩容控制的应用,进入后点击“创建触发器”
      screenshot

    • 然后选择“资源伸缩”,并选择要伸缩的服务名
      screenshot

    • 生成的触发器如下:
      screenshot

    调用sale out的时候需要添加参数&type=scale_out&step=2.

    部署Influxdb及监控

    包括监控时序数据库Influxdb, 监控报警框架Kapacitor,及界面展现Grafana. 我们可以用一个模板来部署:

    version: '2'
    
    services:
      influxdb:
        image: influxdb:0.13
        ports:
         - "8083:8083"
         - "8086:8086"
        container_name: "influxdb"
        labels:
            aliyun.monitoring.addon.influxdb: "http://influxdb:8086"
    
      grafana:
        image: grafana/grafana:3.0.3-1463994644
        ports:
          - "3000:3000"
        links:
          - influxdb
    
      kapacitor:
        image: kapacitor:0.13
        ports:
          - "9092:9092"
        volumes:
                - /etc/acs/:/etc/acs/
        environment:
          - KAPACITOR_INFLUXDB_0_URLS_0=http://influxdb:8086
        command: kapacitord -config /etc/kapacitor/kapacitor.conf
    

    模板中通过标签“ aliyun.monitoring.addon.influxdb”来指定将阿里云容器服务中的监控数据发送到Influxdb.

    在阿里云容器服务中增加一个模板,并通过模板创建应用:

    screenshot

    部署好的应用:

    screenshot

    配置Kapacitor报警规则

    • 创建报警规则文件。在 Kapacitor中配置报警规则,并当报警是调用扩容触发器URL.

    通过Web远程终端或者Docker Exec进入Kapacitor容器, 增加报警规则,比如我们对CPU指标设置报警规则,创建/etc/acs/cpu.tick文件,内容如下:

    
    stream                                                                                                                                                                                         
        // Select just the cpu measurement from our example database.                                                                                                                              
        |from()                                                                                                                                                                                    
            .measurement('docker_container_cpu')                                                                                                                                                   
        |groupBy('aliyun.cluster', 'aliyun.service.id')                                                                                                                                            
        |alert()                                                                                                                                                                                                                                                                                                                               
            .crit(lambda:  "aliyun.cluster"=='xxxxx' AND "aliyun.service.id"=='xxxxx' AND usage_percent" > 70)                                                                                                                                                                                                                                                                                                                                                                                                
            .post('https://cs.console.aliyun.com/hook/trigger?triggerUrl=YzM5NmRiNDg                                                                                                               
    yYWRhODQwMDJhNjRmNWVhZjcxZjU1ZTllfG5naW54LWRlZmF1bHR8cmVkZXBsb3l8MThtZHFxbXJkNXJ                                                                                                               
    kaHw=&secret=xxx&&type=scale_out&step=1')                                                                                                                
            .log('/tmp/alerts.log')                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
    
    

    这里对监控的CPU指标"docker_container_cpu"按集群及服务进行聚合然后判断当usage_percent>70的时候进行服务扩容。
    类似,我们也可以增加一个缩容的报警规则。

    • 定义报警规则并启用 在Kapacitor容器中执行如下命令定义并启用报警规则。
    kapacitor define cpu_alert -type stream  -tick cpu_alert.tick -dbrp telegraf.default;
    kapacitor enable cpu_alert
    

    这样当CPU的使用率超过70%的时候,会自动调用扩容触发器进行容器的扩容。

  • 相关阅读:
    win7 配置DNS
    链表效率
    链表用途&&数组效率&&链表效率&&链表优缺点
    java 生成随机数字
    汉诺塔
    利用HTML5开发Android(1)---Android设备多分辨率的问题
    Android读取assets目录下的资源
    Ubuntu 搭建PHP开发环境
    关于heritrix安装配置时出现”必须限制口令文件读取访问权限”的解决方法
    JQuery 的bind和unbind函数
  • 原文地址:https://www.cnblogs.com/aliyunblogs/p/5662460.html
Copyright © 2020-2023  润新知