我们在服务里面创建如下的应用(以下是创建完复制过来的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)的更多相关文章

  1. 三十三、HPA实现自动扩缩容

    通过HPA实现业务应用的动态扩缩容 HPA控制器介绍 当系统资源过高的时候,我们可以使用如下命令来实现 Pod 的扩缩容功能 $ kubectl -n luffy scale deployment m ...

  2. Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler

    Knative Serving 默认情况下,提供了开箱即用的快速.基于请求的自动扩缩容功能 - Knative Pod Autoscaler(KPA).下面带你体验如何在 Knative 中玩转 Au ...

  3. 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容

    上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...

  4. minikube metrics-server HPA 自动扩缩容错误

    minikube metrics-server pod 错误 启动 minikube addons enable metrics-server 之后查看 metrics-server pod 会有如下 ...

  5. 13.深入k8s:Pod 水平自动扩缩HPA及其源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 Pod 水平自动扩缩 Pod 水平自动扩缩工作原理 Pod 水平自动 ...

  6. 【六】K8s-Pod 水平自动扩缩实践(简称HPA)

    一.概述 Pod 水平自动扩缩(Horizontal Pod Autoscaler)简称 HPA,HPA 可以根据 CPU 利用率进行自动伸缩 Pod 副本数量,除了 CPU 利用率,也可以基于其他应 ...

  7. Airbnb的动态kubernetes集群扩缩容

    Airbnb的动态kubernetes集群扩缩容 本文介绍了Airbnb的集群扩缩容的演化历史,以及当前是如何通过Cluster Autoscaler 实现自定义扩展器的.最重要的经验就是Airbnb ...

  8. Kubernetes 监控:Prometheus Adpater =》自定义指标扩缩容

    使用 Kubernetes 进行容器编排的主要优点之一是,它可以非常轻松地对我们的应用程序进行水平扩展.Pod 水平自动缩放(HPA)可以根据 CPU 和内存使用量来扩展应用,前面讲解的 HPA 章节 ...

  9. 如何根据不同业务场景调节 HPA 扩缩容灵敏度

    背景 在 K8s 1.18 之前,HPA 扩容是无法调整灵敏度的: 对于缩容,由 kube-controller-manager 的 --horizontal-pod-autoscaler-downs ...

随机推荐

  1. 查看Oracle数据库SQL执行历史

    -- 找出哪个数据库用户用什么程序在最近三天执行过delete或truncate table的操作 SELECT c.username, a.program, b.sql_text, b.comman ...

  2. Cordova 微信分享插件,安卓亲测可用

    Cordova 微信分享插件,安卓亲测可用,收藏 https://github.com/vilic/cordova-plugin-wechat

  3. Spring学习笔记--Spring IOC

    沿着我们上一篇的学习笔记,我们继续通过代码学习IOC这一设计思想. 6.Hello类 第一步:首先创建一个类Hello package cn.sxt.bean; public class Hello ...

  4. ELK之elasticsearch集群搭建

    安装配置elasticsearch不详述 环境:主elasticsearch IP 172.16.90.11 备elasticsearch IP  172.16.90.12 修改配置文件 /etc/e ...

  5. AIX装机问题123

    好久没有实施,好记性不如好笔记,那就记录下吧 1文件系统创建挂载 通过smit工具很容易简单举例创建一个jfs2类型文件系统并挂载 创建lv smit mklv 创建jfs2类型文件系统 指定lv s ...

  6. easyui datagrid 取消删除的方法

    下面为取消方法 ... { field: 'Guid', title: '操作', width: 80, align: 'center', formatter: function (value, ro ...

  7. 洛谷P1086 花生采摘【模拟】

    题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都很开心,因为花生正是他 ...

  8. ubuntu汉化

    寻找 Simplified Chinese,点击下面的apply 回到这里在最下面找到刚刚安装的语言,是灰色的,左键点击,将它拖到最上面,点击应用到整个系统,配置完成.重启系统就变成中文了. 晚上不要 ...

  9. LeetCode 11 - 盛最多水的容器 - [双指针暴力]

    题目链接:https://leetcode-cn.com/problems/container-with-most-water/description/ 给定 n 个非负整数 $a_1,a_2,\cd ...

  10. 手把手教你用Spring Cloud和Docker构建微服务

    什么是Spring Cloud? Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接 ...