Openstack+Kubernetes+Docker微服务实践之路--弹性扩容

服务上线就要顶的住压力、扛的住考验,不然挨说的还是我们这帮做事的兄弟,还记得上图这个场景吗
老办法是服务集群部署,但总归有个上限,之前跟阿里合作的时候他们有个弹性计算可以通过设置CPU的阀值来动态扩展和收缩计算能力,那时感觉很有逼格,至少在当时我们常规的做法很难做到,没想到时至今日有了Kubernetes我们能也扬眉吐气了,看我来给大家实实在在的秀一把。
Kubernetes的自动扩容针对的是ReplicationController的,它会监控所有Pods的CPU使用情况,如果超过比例就启动更多的Pods来提供服务,反之减少Pods,在一般的情况下我们不会设置Pods的CPU的上限,但要使用自动扩容就要设置它的阀值因此也要设置Pods的CPU使用上限,不然Kubernetes没办法计算它的占用比例,所以我们在创建RC的时候就要指定每个Pod CPU资源占用的上限
配置
apiVersion: v1
kind: ReplicationController
metadata:
name: thrift-c
namespace: thrift-demo
spec:
replicas:1
selector:
app: thrift-c
template:
metadata:
name: thrift-c
labels:
app: thrift-c
spec:
containers:
- name: thrift-c
resources:
requests:
cpu: 200m
image: registry2.io/thrift/thrift-c:0.0.2
imagePullPolicy: Always
ports:
- containerPort: 9091
imagePullSecrets:
- name: registry2key
注意resources的配置,指定CPU最高占用为200m,如果是修改的话必须要删除RC,重新创建,apply不行,另外注意我们这里的replicas是1。
在Dashboard中查看,是不是生效了,

压力测试
我们的配置确定生效之后就要看Kubernetes弹性扩容的效果了,第一步要先给我们的服务增加自动扩容的能力,有两种方法,一种是配置文件,另一种是通过Kubectl命令完成,看命令
kubectl autoscale rc thrift-c -nthrift-demo --max=10 --cpu-percent=10 --min=1
参数--max是弹性扩容最大Pods数量,--min自然是最小数量,--cpu-percent是阀值,是一个百分比这里配置的是相当于10%,这条命令运行之后就给我们指定的RC thrift-c增加了自动扩容的能力,查看一下

可以看到target和current以及数量等信息,目前我们没有访问量
第二步,加压,增加访问量和并发,给你一条简单的命令
while true; do wget -q -O- http://test.k8s.io/hi?name=3213; done
我分别在三台机器上执行了这条命令,压力直线上升,

当CPU超过10%的时候我们看下Pods的数量

Pods从一个迅速给扩容到4个,如果服务能力没到达到要求还会增加Pods数量,当我把压力测试命令终止后CPU降下来时Kubernetes大概过了几分钟把Pods减少到最初的一个,我反复测试了多次,这个功能非常好用也很稳定,它能够及时的根据服务的压力做出响应,在收缩的时候有延迟可能是防止短时间内再次发生,CPU稳定一段时间后Pods被减少到我们配置的--min个。
有了这个功能我们再也不怕突发其来的压力和服务器宕机,瓶颈就丢给网络和磁盘IO以及数据库了,服务器方面如果有宕机Kubernetes会把它上面的Pods全部移到其它结点上启动起来,保证你的Pods始终是运行的,但有一点Kubernetes的Master是单点运行的,在后面如果有空研究一下Master的高可用,其实已经有很多网友研究过并给出解决办法,如果有兴趣可以先了解一下。
Openstack+Kubernetes+Docker微服务实践之路--弹性扩容的更多相关文章
- Openstack+Kubernetes+Docker微服务实践之路--基础设施
近两年微服务在网上聊的如此的如火如荼,备受关注,我在去年下半年的一个项目中也用到了阿里云的EDAS.HSF,深有体会,最近时间空闲出于好奇,决定一探究竟打算自建微服务平台,基本实现EDAS.HSF的功 ...
- Openstack+Kubernetes+Docker微服务实践之路--RPC
重点来了,本文全面阐述一下我们的RPC是怎么实现并如何使用的,跟Kubernetes和Openstack怎么结合. 在选型一文中说到我们选定的RPC框架是Apache Thrift,它的用法是在Ma ...
- Openstack+Kubernetes+Docker微服务实践之路--服务发布
结合上文,我们的服务已经可以正常运行了,但它的访问方式只能通过服务器IP加上端口来访问,如何通过域名的方式来访问到我们服务,本来想使用Kubernetes的Ingress来做,折腾一天感觉比较麻烦,I ...
- Openstack+Kubernetes+Docker微服务实践之路--选型
上一篇博文中我们选定Openstack做为我们的基础设施IAAS平台,本文将明确我们用什么技术做为微服务平台的技术选型. 经过对微服务的特性总结和添加一些个性需求后对微服务平台的基本要求 PRC远程调 ...
- Openstack+Kubernetes+Docker微服务实践之路--Kubernetes
经过几番折腾终于搞定Kubernetes了,我们要在Openstack上部署Kubernetes集群,使用最新工具Kubeadm来安装,由于不能直接访问Kubernetes的源,我们需要一台可以穿墙的 ...
- Openstack+Kubernetes+Docker微服务实践之路--Docker和Registry2
渐入佳境,我们开始比较具体的工作,由于Docker是一个基础组件,所以本文的主题是Docker和Registry2. 底层系统基于Centos7,先在一台云主机上安装Docker,Docker的安装非 ...
- Openstack+Kubernetes+Docker微服务实践
Openstack+Kubernetes+Docker微服务实践 ..... Openstack+Kubernetes+Docker微服务实践之路--选型 posted @ 2016-11-15 ...
- Openstack+Kubernetes+Docker微服务
Openstack+Kubernetes+Docker微服务 渐入佳境,我们开始比较具体的工作,由于Docker是一个基础组件,所以本文的主题是Docker和Registry2. 底层系统基于Cent ...
- QCon技术干货:个推基于Docker和Kubernetes的微服务实践
2016年伊始,Docker无比兴盛,如今Kubernetes万人瞩目.在这个无比需要创新与速度的时代,由容器.微服务.DevOps构成的云原生席卷整个IT界.在近期举办的QCon全球软件开发大会上, ...
随机推荐
- nodejs 的ajax获取数据express
var request = require('request'); request('https://api.weixin.qq.com/cgi-bin/ticket/getticket?access ...
- 开始学习c语言
学习c语言的第一篇博客,心里的感觉说不出来,不知道能不能坚持下去,我是一名工作了差不多2年的phper,其实我本来是想学习数据结构和算法的,但是尼玛这年头那些书的例子都不是php,动不动就是c,jav ...
- PCB的封装尺寸
PCB封装主要分为贴片式与插件式 1)贴片元件封装说明发光二极管:颜色有红.黄.绿.蓝之分,亮度分普亮.高亮.超亮三个等级,常用的封装形式有三类:0805.1206.121 (常用封装为RB.1/. ...
- sprint 3 总结
1.要求: 演示可参考毕业设计答辩,包含两部分内容: 项目陈述,可综述项目.团队.开发过程等. 运行演示,实现的功能.业务.用户反馈等. 希望各组认真准备,拿出最好的阵容最好的状态,展示一学期的学习与 ...
- c语言的学习秘籍之链表
刚翻出来的作品,有点低级,但希望能起到作用: #include<stdio.h>#include<stdlib.h>#include<time.h>#include ...
- LinQ 组合查询与分页
1.以开头查 public List<Car> Select1(string a){ return con.Car.Where(r => r.Name.StartsWith(a)). ...
- hdu5219 Repeating
后缀数组+莫比乌斯函数 #include <stdio.h> #include <string.h> #include<algorithm> using names ...
- c#:如何处理对对象进行深度拷贝
/// <summary> /// 对对象进行深度拷贝 /// </summary> /// <param name="obj"></pa ...
- 【Lua学习笔记之:Lua环境搭建 Windows 不用 visual studio】
Lua 环境搭建 Windows 不用 visual studio 系统环境:Win7 64bit 联系方式:yexiaopeng1992@126.com 前言: 最近需要学习Unity3d游戏中的热 ...
- 笔记本中的archlinux调节亮度
参考了archlinux的wiki:https://wiki.archlinux.org/index.php/Backlight 说一下情况:/sys/class/backlight/acpi_vid ...