Kubernetes下web服务的性能测试三部曲之一:准备工作
2018-02-15 01:30
597 查看
大家好,从本章开始,我们用Apache bench和JMeter对kubernetes环境中的web服务做性能测试,经历过一系列实战后,对我们有以下帮助:
1. 了解apache bench工具的使用;
2. 了解JMeter工具的使用;
3. 了解kubernetes的纵向扩容;
4. 了解kubernetes的横向扩容;
原文地址:http://blog.csdn.net/boling_cavalry/article/details/79321518
1. 即本章的工作:准备实战环境,包括apache bench和JMeter的安装配置,kubernetes环境,部署tomcat服务;
2. 实战纵向扩容,增强单个Pod的配置,用apache bench和JMeter验证扩容效果;
3. 实战横向扩容,增加Pod数量,用apache bench和JMeter验证扩容效果;
1. 《rancher下的kubernetes之一:构建标准化vmware镜像》;
2. 《rancher下的kubernetes之二:安装rancher和kubernetes》;
3. 《rancher下的kubernetes之三:在linux上安装kubectl工具》;
1. 规划环境;
2. 准备Tomcat服务的镜像;
3. 在kubernetes创建Tomcat服务的deployment和service;
4. 安装Apache bench;
5. 用Apache bench测试Tomcat服务的性能;
6. 安装JMeter;
7. 用JMeter测试Tomcat服务的性能;
整理信息列表如下:
镜像名称:bolingcavalry/k8stomcatdemo:0.0.5,已经上传到hub.docker.com,您可以直接使用这个镜像;
如果您想自己开发一个web镜像,请参考文章《kubernetes下的Nginx加Tomcat三部曲之二:细说开发》,参考源码在GitHub可以下载,如下表所示:
这个git项目中有多个目录,本次的web工程源码放在k8stomcatdemo,如下图红框所示:
有个细节请注意:Apache bench在测试的时候,如果server每次返回内容的长度都不一样,会被算作失败,因此最好将返回内容长度固定,如下代码,使用”%15s”将IP地址的字符串固定为15位,不足15位就用空格补全:
1. 创建文件tomcat.yaml,内容如下:
如上所示,web服务的镜像是bolingcavalry/k8stomcatdemo:0.0.5,Pod数量为1,使用了0.1的CPU和256M的内存;
2. 在tomcat.yaml所在目录下创建文件tomcat-svc.yaml,内容如下:
如上所示,使用了NodePort,这样就能通过节点机器的IP地址和30008端口访问到此服务了;
3. 在tomcat.yaml所在目录执行命令kubectl create -f tomcat.yaml,tomcat-svc.yaml,即可创建deployment和service:
4. 在dashboard页面可以看到此Pod情况如下图,资源符合配置中的限制:
5. 我的kubernetes节点1的IP地址是192.168.119.153:,所以在浏览器访问:http://192.168.119.153:30008/getserverinfo,可以在浏览器页面看到服务端的响应,如下图:
服务端已经OK,接下来我们开始准备测试吧;
基本的Apache bench操做已经熟悉了,接下来我们开始安装和使用JMeter吧;
1. 确保本地已装好JDK,并且JAVA_HOME环境变量也已配好,JMeter4需要JDK8或者JDK9;
2. 去官网下载安装包,地址:http://jmeter.apache.org/download_jmeter.cgi,安装包如下图红框中所示:
3. 将安装包解压后,鼠标双击apache-jmeter-4.0\bin\jmeter.bat文件,即可启动JMeter,如下图:
4. 把语言改成中文吧,Options -> Choose Language -> Chinese (Simplified),如下图:
JMeter安装成功了,接下来我们发起一次性能测试吧;
在右侧窗口配置新创建的“线程组”的参数,如下图:
将上图四个红框中的参数分别介绍如下:
红框1中的名称随便填写;
红框2中的”线程数”表示并发数,这里填写100,和前面的AB测试保持一致;
红框3中的”Ram-Up Period(in seconds)”表示经过多少秒并发数才达到100;
红框4中的“循环次数”表示每个线程执行多少次请求,填写200,这样总数就有20000,和AB测试一致了;
在”k8s_tomcat_性能测试”上右键点击,选择”添加” -> “Sampler” -> “Http请求”,如下图:
在Http请求的参数配置页面上填写配置信息,如下图所示
将上图六个红框中的参数分别介绍如下:
红框1中的”协议”填写”http”;
红框2中的”服务器名称或IP”填写”192.168.119.153”,就是kubernetes节点IP;
红框3中的”端口号”填写”30008”;
红框4中的”方法”选择”GET”;
红框5中的”路径”填写”/getserverinfo”,注意要带上斜杠;
填写完毕后,记得点击红框6中的”保存”按钮;
配置测试结果输出信息,在”HTTP请求”上点击右键,选择”添加” -> “监听器” -> “聚合报告”,如下图:
这里没有需要配置的,直接点击上面的保存按钮即可;
JMeter配置就上面这些了,点击下图红框中的绿色三角形图标,开始测试:
点击左侧的”聚合报告”,可以看到一个简易的图表,测试过程中是不断更新的,测试完成后停止更新,如下所示:
这里简单说一下几个数据指标的含义:
1. 压测所需的服务端环境准备完毕;
2. 压测所需的AB和JMeter工具准备完毕;
3. 针对单个Tomcat容器的场景,用AB和JMeter完成了压测,吞吐量为30左右,单个请求等待时间为3秒左右(AB和JMeter数据是有差异的);
接下来的两篇文章,我们会在kubernetes环境做不同类型的扩容,再继续做压测,然后对比扩容效果;
1. 了解apache bench工具的使用;
2. 了解JMeter工具的使用;
3. 了解kubernetes的纵向扩容;
4. 了解kubernetes的横向扩容;
原文地址:http://blog.csdn.net/boling_cavalry/article/details/79321518
章节介绍
《Kubernetes下web服务的性能测试》由以下三篇组成:1. 即本章的工作:准备实战环境,包括apache bench和JMeter的安装配置,kubernetes环境,部署tomcat服务;
2. 实战纵向扩容,增强单个Pod的配置,用apache bench和JMeter验证扩容效果;
3. 实战横向扩容,增加Pod数量,用apache bench和JMeter验证扩容效果;
参考文章
关于kubernetes环境的搭建和kubectl工具的安装,您可以参照以下三篇文章:1. 《rancher下的kubernetes之一:构建标准化vmware镜像》;
2. 《rancher下的kubernetes之二:安装rancher和kubernetes》;
3. 《rancher下的kubernetes之三:在linux上安装kubectl工具》;
实战步骤
本章我们要做以下事情:1. 规划环境;
2. 准备Tomcat服务的镜像;
3. 在kubernetes创建Tomcat服务的deployment和service;
4. 安装Apache bench;
5. 用Apache bench测试Tomcat服务的性能;
6. 安装JMeter;
7. 用JMeter测试Tomcat服务的性能;
环境规划
整个实战需要四台机器,分别是k8s master、k8s node、Apache bench所在机器,JMeter所在机器(win10),如下图:整理信息列表如下:
IP地址 | 身份 | 操作系统 | 备注 |
---|---|---|---|
192.168.119.148 | kubernetes的master | ubuntu16 | 内存不小于2G |
192.168.119.153 | kubernetes的节点1 | ubuntu16 | 内存8G |
192.168.119.1 | 安装了Jemter的机器 | win10 | |
192.168.119.153 | 安装了Apache bench的机器 | ubuntu16 |
准备Tomcat服务的镜像
用于测试的是个springboot的web服务,我们要将此springboot工程构建成docker镜像,这样kubernetes环境才能创建此服务的Pod;镜像名称:bolingcavalry/k8stomcatdemo:0.0.5,已经上传到hub.docker.com,您可以直接使用这个镜像;
如果您想自己开发一个web镜像,请参考文章《kubernetes下的Nginx加Tomcat三部曲之二:细说开发》,参考源码在GitHub可以下载,如下表所示:
名称 | 链接 | 备注 |
---|---|---|
项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |
git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |
git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |
有个细节请注意:Apache bench在测试的时候,如果server每次返回内容的长度都不一样,会被算作失败,因此最好将返回内容长度固定,如下代码,使用”%15s”将IP地址的字符串固定为15位,不足15位就用空格补全:
@RequestMapping(value = "/getserverinfo", method = RequestMethod.GET) public String getUserInfoWithRequestParam(){ return String.format("server : %15s, time : %s", getIPAddr(), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); }
在kubernetes创建Tomcat服务的deployment和service
接下来我们要在kubernetes创建deployment和service了,请登录可以执行kubectl命令的机器:1. 创建文件tomcat.yaml,内容如下:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcathost spec: replicas: 1 template: metadata: labels: name: tomcathost spec: containers: - name: tomcathost image: bolingcavalry/k8stomcatdemo:0.0.5 tty: true ports: - containerPort: 8080 resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "256Mi" cpu: "100m"
如上所示,web服务的镜像是bolingcavalry/k8stomcatdemo:0.0.5,Pod数量为1,使用了0.1的CPU和256M的内存;
2. 在tomcat.yaml所在目录下创建文件tomcat-svc.yaml,内容如下:
apiVersion: v1 kind: Service metadata: name: tomcathost spec: type: NodePort ports: - port: 8080 nodePort: 30008 selector: name: tomcathost
如上所示,使用了NodePort,这样就能通过节点机器的IP地址和30008端口访问到此服务了;
3. 在tomcat.yaml所在目录执行命令kubectl create -f tomcat.yaml,tomcat-svc.yaml,即可创建deployment和service:
root@maven:/usr/local/work/ab# kubectl create -f tomcat.yaml,tomcat-svc.yaml deployment "tomcathost" created service "tomcathost" created root@maven:/usr/local/work/ab# kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 64d tomcathost NodePort 10.43.131.61 <none> 8080:30008/TCP 5m
4. 在dashboard页面可以看到此Pod情况如下图,资源符合配置中的限制:
5. 我的kubernetes节点1的IP地址是192.168.119.153:,所以在浏览器访问:http://192.168.119.153:30008/getserverinfo,可以在浏览器页面看到服务端的响应,如下图:
服务端已经OK,接下来我们开始准备测试吧;
安装Apache bench;
在ubuntu16的电脑上,执行以下命令即可安装apache bench:apt-get install -y apache2-utils
用Apache bench测试Tomcat服务的性能
执行以下命令可以立即开始ab测试:ab -n 20000 -c 100 http://192.168.119.153:30008/getserverinfo[/code]
上述命令的意思一百个并发用户进行共计两万次请求,请求地址是http://192.168.119.153:30008/getserverinfo
等待执行完成结果如下:root@maven:/usr/local/work/ab# ab -n 20000 -c 100 http://192.168.119.153:30008/getserverinfo This is ApacheBench, Version 2.3 <$Revision: 1706008 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.119.153 (be patient) Completed 2000 requests Completed 4000 requests Completed 6000 requests Completed 8000 requests Completed 10000 requests Completed 12000 requests Completed 14000 requests Completed 16000 requests Completed 18000 requests Completed 20000 requests Finished 20000 requests Server Software: Server Hostname: 192.168.119.153 Server Port: 30008 Document Path: /getserverinfo Document Length: 52 bytes Concurrency Level: 100 Time taken for tests: 573.587 seconds Complete requests: 20000 Failed requests: 0 Total transferred: 3700000 bytes HTML transferred: 1040000 bytes Requests per second: 34.87 [#/sec] (mean) Time per request: 2867.934 [ms] (mean) Time per request: 28.679 [ms] (mean, across all concurrent requests) Transfer rate: 6.30 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 1.1 1 43 Processing: 3 2860 2641.7 2369 29799 Waiting: 3 2725 2553.1 2256 29799 Total: 3 2861 2641.6 2370 29800 Percentage of the requests served within a certain time (ms) 50% 2370 66% 2999 75% 3416 80% 3802 90% 5072 95% 6410 98% 8801 99% 16683 100% 29800 (longest request)
以上是测试结果,有三个参数需要重点关注:
名称 | 数值 | 含义 |
---|---|---|
Requests per second | 34.87 | 每秒吞吐率,单位时间内能处理的最大请求数 |
Time per request | 2867.934 | 用户平均请求等待时间 |
Time per request (mean, across all concurrent requests) | 28.679 | 服务器平均请求等待时间; 它是吞吐率的倒数; 它也等于”用户平均请求等待时间”除以”并发用户数” |
注意JIT的影响
有一点请特别注意:刚启动的Tomcat服务,Controller的代码还没有触发JIT,所以理论上性能是低于生产环境的,请先执行一次AB测试使其完成JIT(JIT导致的CPU飙高也会在此时发生,后面就不会了),这此的测试结果直接丢弃,然后再重新做一次AB测试,取这次的结果;基本的Apache bench操做已经熟悉了,接下来我们开始安装和使用JMeter吧;
安装JMeter
为了使用图形化界面,我的Jemeter是安装在win10电脑上的;1. 确保本地已装好JDK,并且JAVA_HOME环境变量也已配好,JMeter4需要JDK8或者JDK9;
2. 去官网下载安装包,地址:http://jmeter.apache.org/download_jmeter.cgi,安装包如下图红框中所示:
3. 将安装包解压后,鼠标双击apache-jmeter-4.0\bin\jmeter.bat文件,即可启动JMeter,如下图:
4. 把语言改成中文吧,Options -> Choose Language -> Chinese (Simplified),如下图:
JMeter安装成功了,接下来我们发起一次性能测试吧;
用JMeter测试Tomcat服务的性能
在”测试计划”上点击右键,选择”添加” -> “Threads(Users)” -> “线程组”,如下所示:在右侧窗口配置新创建的“线程组”的参数,如下图:
将上图四个红框中的参数分别介绍如下:
红框1中的名称随便填写;
红框2中的”线程数”表示并发数,这里填写100,和前面的AB测试保持一致;
红框3中的”Ram-Up Period(in seconds)”表示经过多少秒并发数才达到100;
红框4中的“循环次数”表示每个线程执行多少次请求,填写200,这样总数就有20000,和AB测试一致了;
在”k8s_tomcat_性能测试”上右键点击,选择”添加” -> “Sampler” -> “Http请求”,如下图:
在Http请求的参数配置页面上填写配置信息,如下图所示
将上图六个红框中的参数分别介绍如下:
红框1中的”协议”填写”http”;
红框2中的”服务器名称或IP”填写”192.168.119.153”,就是kubernetes节点IP;
红框3中的”端口号”填写”30008”;
红框4中的”方法”选择”GET”;
红框5中的”路径”填写”/getserverinfo”,注意要带上斜杠;
填写完毕后,记得点击红框6中的”保存”按钮;
配置测试结果输出信息,在”HTTP请求”上点击右键,选择”添加” -> “监听器” -> “聚合报告”,如下图:
这里没有需要配置的,直接点击上面的保存按钮即可;
JMeter配置就上面这些了,点击下图红框中的绿色三角形图标,开始测试:
点击左侧的”聚合报告”,可以看到一个简易的图表,测试过程中是不断更新的,测试完成后停止更新,如下所示:
Samples | Average | Median | 90% Line | 95% Line | 99% Line | Min | Max | Error % | Throughput | Received KB/sec | Sent KB/sec |
---|---|---|---|---|---|---|---|---|---|---|---|
20000 | 3318 | 2399 | 6197 | 8300 | 34500 | 1 | 52694 | 0.00% | 27.4/sec | 4.44 | 3.69 |
名称 | 含义 |
---|---|
Samples | 请求总数 |
Average | 单个请求平均响应时间 |
Median | 50%用户的响应时间 |
90% Line | 90%用户的响应时间 |
95% Line | 95%用户的响应时间 |
99% Line | 99%用户的响应时间 |
Min | 最短响应时间 |
Max | 最长响应时间 |
Error % | 错误率 |
Throughput | 吞吐量 |
Received KB/sec | 每秒收到字节数 |
Sent KB/sec | 每秒发出字节数 |
小结
至此,咱们第一阶段的目标已经完成了,小结如下:1. 压测所需的服务端环境准备完毕;
2. 压测所需的AB和JMeter工具准备完毕;
3. 针对单个Tomcat容器的场景,用AB和JMeter完成了压测,吞吐量为30左右,单个请求等待时间为3秒左右(AB和JMeter数据是有差异的);
接下来的两篇文章,我们会在kubernetes环境做不同类型的扩容,再继续做压测,然后对比扩容效果;
相关文章推荐
- Kubernetes下web服务的性能测试三部曲之三:横向扩容
- Kubernetes下web服务的性能测试三部曲之二:纵向扩容
- web服务性能测试工具http_load(Linux平台)
- 性能测试准备工作中的注意事项
- 如何进行Web服务的性能测试?
- 【MSDN】ASP.NET Web 服务、企业服务和 .NET Remoting 的性能比较测试与建议
- 如何进行Web服务的性能测试
- 邮件服务系统专题20:邮件系统测试的准备工作
- 聊聊性能测试开始前的准备工作
- 如何进行Web服务的性能测试?
- linux系统web服务性能测试最重要的两个参数
- web服务性能测试工具http_load(Linux平台)
- Linux平台Web服务性能测试工具http_load
- Linux-Web应用服务性能测试初探
- 利用Web Application Stress Tool(WAS)做性能测试(2)
- Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程
- Yslow---一款很实用的web性能测试插件
- 准备周末在珠海开展一次性能测试沙龙活动
- WEB性能测试工具推荐
- Web 应用性能和压力测试工具 Gor