如何实现Docker应用的自定义弹性伸缩
简介
现在有很多客户很关心应用的自动弹性伸缩,有些客户也有自己的监控框架,并希望能跟阿里云容器服务进行集成。阿里云容器服务提供了服务弹性伸缩触发器,并能够跟监控框架集成来实现自定义的服务自动弹性伸缩。
阿里云容器服务会自动采集容器的监控数据,并可以通过集成将监控数据发送到三方的监控框架中。有了监控数据,我们可以在监控框架中定义自己的报警规则,当指标发生报警的时候调用阿里云容器服务提供的触发器来进行容器的扩容或者缩容。 下面用Influxdb,Kapacitor来介绍怎样通过触发器跟监控框架集成实现自定义弹性伸缩。
生成服务的Scaling触发器
在阿里云容器服务的应用列表中,点击要进行自动扩容控制的应用,进入后点击“创建触发器”
然后选择“资源伸缩”,并选择要伸缩的服务名
生成的触发器如下:
调用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.
在阿里云容器服务中增加一个模板,并通过模板创建应用:
部署好的应用:
配置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%的时候,会自动调用扩容触发器进行容器的扩容。
如何实现Docker应用的自定义弹性伸缩的更多相关文章
- 京东618:Docker扛大旗,弹性伸缩成重点 (2015-06-23)
不知不觉中,年中的618和年终的11.11已经成为中国电商的两大促销日,当然,这两天也是一年中系统访问压力最大的两天.对于京东而言,618更是这一年中最大的一次考试,考点是系统的扩展性.稳定性.容灾能 ...
- 在阿里云上进行Docker集群的自动弹性伸缩
摘要: 在刚刚结束的云栖大会上,阿里云容器服务演示了容器的自动弹性伸缩,能够从容应对互联网应用的峰值流量.阿里云容器服务不仅支持容器级别的自动弹性伸缩,也支持集群节点级别的自动弹性伸缩.从而真正做到从 ...
- Docker(三):利用Kubernetes实现容器的弹性伸缩
一.前言 前两章有的介绍docker与Kubernetes.docker是项目运行的容器,Kubernetes则是随着微服务架构的演变docker容器增多而进行其编排的重要工具.Kubernetes不 ...
- DCOS中监控和弹性伸缩方案经验
监控的选型 我们的DCOS 主要是面向2种业务形态:互联网应用,NFV组件和相关的数据库.2种不同的业务虽然说都是跑在容器内部,但是其实需要监控的信息和指标都是各不相同.因此在选择监控方案的时候我们更 ...
- 【阿里云产品公测】弹性伸缩服务ESS之试用初体验
弹性伸缩服务ESS之试用初体验 作者:云郎 2014/10/15 阿里云弹性伸缩服务(Elastic Scaling Service)是根据用户的业务需求和策略,自动调整其弹性计算服务器(ECS)的管 ...
- Kubernetes 弹性伸缩全场景解读(五) - 定时伸缩组件发布与开源
作者| 阿里云容器技术专家刘中巍(莫源) 导读:Kubernetes弹性伸缩系列文章为读者一一解析了各个弹性伸缩组件的相关原理和用法.本篇文章中,阿里云容器技术专家莫源将为你带来定时伸缩组件 kub ...
- Kubernetes 弹性伸缩全场景解析(三) - HPA 实践手册
在上一篇文章中,给大家介绍和剖析了 HPA 的实现原理以及演进的思路与历程.本文我们将会为大家讲解如何使用 HPA 以及一些需要注意的细节. autoscaling/v1 实践 v1 的模板可能是大家 ...
- Kubernetes 弹性伸缩全场景解读(二)- HPA 的原理与演进
前言 在上一篇文章 Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局中,我们介绍了在 Kubernetes 在处理弹性伸缩时的设计理念以及相关组件的布局,在今天这篇文章中,会为大家 ...
- k8s弹性伸缩概念以及测试用例
k8s弹性伸缩概念以及测试用例 本文原文出处:https://juejin.im/post/5c82367ff265da2d85330d4f 弹性伸缩式k8s中的一大亮点功能,当负载大的时候,你可以对 ...
随机推荐
- rest-framework框架组件
序列化组件 创建一个序列化类, 视图四种方式 以下代码都需要创建一个serializers.py文件 from rest_framework import serializers from CBV_a ...
- mongodb常用语法
// Employee表 { "_id" : "9e794fb9-12dc-457c-8c5a-69fe45c57685", "No" : ...
- DP Intro - poj 1947 Rebuilding Roads(树形DP)
版权声明:本文为博主原创文章,未经博主允许不得转载. Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- Oracle 中运用rollup和cube实现汇总运算
前言.看了很多的随笔博文内容都是关于rollup和cube的用法,发现一个问题,很多都是一样或者转载的,但这都不是重点,重点是,他们写的都太专业化了,直接给一个结论,并没有给出整个推理出这个结论的过程 ...
- selenium+junit4实现参数化自动化测试
业务场景:在www.1905.com电影网中实现两个用户的登陆操作. 代码如下: package com.m1905.junit; import java.util.Arrays; import ja ...
- Junit参数化
数据驱动测试:测试代码要与测试数据分离 哎~~学习时发现一个问题,写完了测试文件,右击文件时没有run as ->junit test的选项,找了好半天,终于知道了原因,是方法前没有加stati ...
- ambari-server启动出现ERROR main] DBAccessorImpl:106 - Error while creating database accessor java.lang.ClassNotFoundException:com.mysql.jdbc.Driver问题解决办法(图文详解)
不多说,直接上干货! 问题详情 ambari-server启动时,报如下的错误 问题分析 注:启动ambari访问前,请确保mysql驱动已经放置在/usr/share/Java内且名字是mysql- ...
- 【CSS】 元素块与文字的各种居中解决方案
元素块的居中 首先有这样一个200*200px的元素块在界面内. 元素块的水平居中: 如果想要让其水平居中,则有三种方法: 第一种是知道屏幕的长宽,则根据计算,(屏幕宽X-元素块宽Y)/ 2的结果是元 ...
- python中lambda,map,reduce,filter,zip函数
函数式编程 函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象.简单来讲,函 ...
- 冀永楠:OCR的应用锦集及背后技术
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云加社区技术沙龙 发表于云+社区专栏 演讲嘉宾:冀永楠,现为腾讯云大数据AI产品中心高级研究员.负责了腾讯云与华星光电等多个图像AI项 ...