Marathon自动扩缩容(marathon-lb-autoscale)
我们在服务里面创建如下的应用(以下是创建完复制过来的json):
{
"id": "/nginxtest",
"cmd": null,
"cpus": 0.1,
"mem": 65,
"disk": 0,
"instances": 1,
"acceptedResourceRoles": [
"*"
],
"container": {
"type": "DOCKER",
"docker": {
"forcePullImage": true,
"image": "10.20.31.223:5000/nginx",
"parameters": [],
"privileged": false
},
"volumes": [],
"portMappings": [
{
"containerPort": 80,
"hostPort": 0,
"labels": {},
"protocol": "tcp",
"servicePort": 10026
}
]
},
"healthChecks": [
{
"gracePeriodSeconds": 10,
"ignoreHttp1xx": false,
"intervalSeconds": 2,
"maxConsecutiveFailures": 10,
"path": "/",
"portIndex": 0,
"protocol": "HTTP",
"ipProtocol": "IPv4",
"timeoutSeconds": 10,
"delaySeconds": 15
}
],
"labels": {
"HAPROXY_GROUP": "sdgx"
},
"networks": [
{
"mode": "container/bridge"
}
],
"portDefinitions": []
}
在这个应用里面,servicePort为10026则说明我们注册到Marathon-lb上的外部端口为10026,labels里面写的是sdgx,也即注册到外部的负载均衡器上。
这个时候,我们访问public slave上的10026端口,就能看到启动的Nginx的页面http://10.20.31.101:10026/。
如果我们访问public slave上的haproxy的配置页面http://10.20.31.101:9090/haproxy?stats,可以看到如下的映射关系。

接下来我们部署marathon-lb-autoscale,它监控HAProxy,发现RPS(request per seconds)超过一定的数目,就对应用进行弹性扩展。
{
"id": "/autoscaling/sdgx-marathon-lb-autoscale",
"cmd": null,
"cpus": 0.1,
"mem": 65,
"disk": 0,
"instances": 1,
"acceptedResourceRoles": [
"*"
],
"container": {
"type": "DOCKER",
"docker": {
"forcePullImage": true,
"image": "10.20.31.223:5000/marathon-lb-autoscale",
"parameters": [],
"privileged": false
},
"volumes": []
},
"portDefinitions": [
{
"port": 10028,
"protocol": "tcp"
}
],
"args": [
"--marathon",
"http://10.20.31.210:8080",
"--haproxy",
"http://10.20.31.101:9090",
"--target-rps",
"100",
"--apps",
"nginxtest_10026"
]
}
接下来,我们部署应用/autoscaling/siege向nginxtest发送请求
{
"id": "/autoscaling/siege",
"cmd": null,
"cpus": 0.5,
"mem": 65,
"disk": 0,
"instances": 0,
"acceptedResourceRoles": [
"*"
],
"container": {
"type": "DOCKER",
"docker": {
"forcePullImage": true,
"image": "10.20.31.223:5000/yokogawa/siege:latest",
"parameters": [],
"privileged": false
},
"volumes": []
},
"portDefinitions": [
{
"port": 10029,
"name": "default",
"protocol": "tcp"
}
],
"args": [
"-d1",
"-r1000",
"-c100",
"http://10.20.31.101:10026/"
]
}
如果我们看HAProxy的stats页面,发现已经有请求发过来了。这个时候我们增加/autoscaling/siege到10,给nginxtest服务加压。

过一段时间就会发现sdgx-marathon-lb-autoscale.autoscaling已经有动作了(sdgx-marathon-lb-autoscale.autoscaling服务的日志)。
[2018-07-23T08:38:56] Starting autoscale controller
[2018-07-23T08:38:56] Options: #<OpenStruct marathon=#<URI::HTTP http://10.20.31.210:8080>, haproxy=[#<URI::HTTP http://10.20.31.101:9090>], interval=60, samples=10, cooldown=5, target_rps=100, apps=#<Set: {"nginxtest_10026"}>, threshold_percent=0.5, threshold_instances=3, intervals_past_threshold=3>
[2018-07-23T08:50:56] Scaling nginxtest from 1 to 10 instances
[2018-07-23T08:50:56] app_id=nginxtest rate_avg=908.2 target_rps=100 current_rps=908.2
[2018-07-23T08:50:56] 1 apps require scaling
将一个nginxtest实例变成10个nginxtest实例。

当我们将/autoscaling/siege从10个变回0个的时候,nginxtest实例从10个变成1个。
[2018-07-23T08:38:56] Starting autoscale controller
[2018-07-23T08:38:56] Options: #<OpenStruct marathon=#<URI::HTTP http://10.20.31.210:8080>, haproxy=[#<URI::HTTP http://10.20.31.101:9090>], interval=60, samples=10, cooldown=5, target_rps=100, apps=#<Set: {"nginxtest_10026"}>, threshold_percent=0.5, threshold_instances=3, intervals_past_threshold=3>
[2018-07-23T08:50:56] Scaling nginxtest from 1 to 10 instances
[2018-07-23T08:50:56] app_id=nginxtest rate_avg=908.2 target_rps=100 current_rps=908.2
[2018-07-23T08:50:56] 1 apps require scaling
[2018-07-23T08:55:56] Not scaling nginxtest yet because it needs to cool down (scaled 300.0s ago)
[2018-07-23T08:55:56] app_id=nginxtest rate_avg=553.0/10 target_rps=100 current_rps=55.3
[2018-07-23T08:56:56] Not scaling nginxtest yet because it needs to cool down (scaled 360.0s ago)
[2018-07-23T08:56:56] app_id=nginxtest rate_avg=561.4/10 target_rps=100 current_rps=56.14
[2018-07-23T08:57:56] Not scaling nginxtest yet because it needs to cool down (scaled 420.0s ago)
[2018-07-23T08:57:56] app_id=nginxtest rate_avg=570.7/10 target_rps=100 current_rps=57.07000000000001
[2018-07-23T08:58:56] Not scaling nginxtest yet because it needs to cool down (scaled 480.0s ago)
[2018-07-23T08:58:56] app_id=nginxtest rate_avg=570.7/10 target_rps=100 current_rps=57.07000000000001
[2018-07-23T08:59:56] Not scaling nginxtest yet because it needs to cool down (scaled 540.0s ago)
[2018-07-23T08:59:56] app_id=nginxtest rate_avg=487.1/10 target_rps=100 current_rps=48.71
[2018-07-23T09:00:56] Not scaling nginxtest yet because it needs to cool down (scaled 600.0s ago)
[2018-07-23T09:00:56] app_id=nginxtest rate_avg=397.7/10 target_rps=100 current_rps=39.769999999999996
[2018-07-23T09:01:56] Not scaling nginxtest yet because it needs to cool down (scaled 660.0s ago)
[2018-07-23T09:01:56] app_id=nginxtest rate_avg=277.9/10 target_rps=100 current_rps=27.79
[2018-07-23T09:02:56] Not scaling nginxtest yet because it needs to cool down (scaled 720.0s ago)
[2018-07-23T09:02:56] app_id=nginxtest rate_avg=227.5/10 target_rps=100 current_rps=22.75
[2018-07-23T09:03:56] Not scaling nginxtest yet because it needs to cool down (scaled 780.0s ago)
[2018-07-23T09:03:56] app_id=nginxtest rate_avg=176.5/10 target_rps=100 current_rps=17.65
[2018-07-23T09:04:56] Not scaling nginxtest yet because it needs to cool down (scaled 840.0s ago)
[2018-07-23T09:04:56] app_id=nginxtest rate_avg=128.5/10 target_rps=100 current_rps=12.85
[2018-07-23T09:05:56] Scaling nginxtest from 10 to 1 instances
[2018-07-23T09:05:56] app_id=nginxtest rate_avg=82.0 target_rps=100 current_rps=8.2
[2018-07-23T09:05:56] 1 apps require scaling
Marathon自动扩缩容(marathon-lb-autoscale)的更多相关文章
- 三十三、HPA实现自动扩缩容
通过HPA实现业务应用的动态扩缩容 HPA控制器介绍 当系统资源过高的时候,我们可以使用如下命令来实现 Pod 的扩缩容功能 $ kubectl -n luffy scale deployment m ...
- Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
Knative Serving 默认情况下,提供了开箱即用的快速.基于请求的自动扩缩容功能 - Knative Pod Autoscaler(KPA).下面带你体验如何在 Knative 中玩转 Au ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容
上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...
- minikube metrics-server HPA 自动扩缩容错误
minikube metrics-server pod 错误 启动 minikube addons enable metrics-server 之后查看 metrics-server pod 会有如下 ...
- 13.深入k8s:Pod 水平自动扩缩HPA及其源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 Pod 水平自动扩缩 Pod 水平自动扩缩工作原理 Pod 水平自动 ...
- 【六】K8s-Pod 水平自动扩缩实践(简称HPA)
一.概述 Pod 水平自动扩缩(Horizontal Pod Autoscaler)简称 HPA,HPA 可以根据 CPU 利用率进行自动伸缩 Pod 副本数量,除了 CPU 利用率,也可以基于其他应 ...
- Airbnb的动态kubernetes集群扩缩容
Airbnb的动态kubernetes集群扩缩容 本文介绍了Airbnb的集群扩缩容的演化历史,以及当前是如何通过Cluster Autoscaler 实现自定义扩展器的.最重要的经验就是Airbnb ...
- Kubernetes 监控:Prometheus Adpater =》自定义指标扩缩容
使用 Kubernetes 进行容器编排的主要优点之一是,它可以非常轻松地对我们的应用程序进行水平扩展.Pod 水平自动缩放(HPA)可以根据 CPU 和内存使用量来扩展应用,前面讲解的 HPA 章节 ...
- 如何根据不同业务场景调节 HPA 扩缩容灵敏度
背景 在 K8s 1.18 之前,HPA 扩容是无法调整灵敏度的: 对于缩容,由 kube-controller-manager 的 --horizontal-pod-autoscaler-downs ...
随机推荐
- linux环境变量配置,转载地址:http://blog.sina.com.cn/rss/1650981242.xml
学习总结 1.Linux的变量种类按变量的生存周期来划分,Linux变量可分为两类:1. 永久的:需要修改配置文件,变量永久生效.2. 临时的:使用export命令行声明即可,变量在关 ...
- 10.8Xadmin url注册
2018-10-8 16:45:31 这两天在弄我的服务器,就是是看各种教程 死活部署不好我的Django项目 博客网站 过几天再弄! 越努力,越幸运!永远不要高估自己! 通过两个方法,通过类变量找到 ...
- 7.11js常用对象
<!DOCTYPE html> <html> <head> <title>js常用对象</title> <script type=&q ...
- Selenium模拟浏览器抓取淘宝美食信息
前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...
- NYOJ16|嵌套矩形|DP|DAG模型|记忆化搜索
矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a& ...
- gulp安装及使用流程
1. 安装nodejs 去 https://nodejs.org/en/下载安装文件安装即可. 安装完成后,在终端输入node -v回车打印出nodejs的版本号,说明nodejs安装成功. 在终端输 ...
- 关于Java程序流程控制的整理(未完善)
- angular 上传图像的使用总结
AngularJS 的文件上传控件有两个:(1) angular-file-upload:https://github.com/nervgh/angular-file-upload(2) ng-fil ...
- GlusterFS分布式存储系统中更换故障Brick的操作记录1
前面已经介绍了GlusterFS分布式存储集群环境部署记录,现在模拟下更换故障Brick的操作: 1)GlusterFS集群系统一共有4个节点,集群信息如下: 分别在各个节点上配置hosts.同步好系 ...
- C语言保证,0永远不是有效的数据地址,因此,返回址0可用来表示发生的异常事件
C语言保证,0永远不是有效的数据地址,因此,返回址0可用来表示发生的异常事件