Kubernetes 下 web 服务的性能测试三部曲之一:准备工作
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
大家好,从本章开始,我们用 Apache bench 和 JMeter 对 kubernetes 环境中的 web 服务做性能测试,经历过一系列实战后,对我们有以下帮助:
了解 apache bench 工具的使用;
了解 JMeter 工具的使用;
了解 kubernetes 的纵向扩容;
了解 kubernetes 的横向扩容;
章节介绍
《Kubernetes 下 web 服务的性能测试》由以下三篇组成:
即本章的工作:准备实战环境,包括 apache bench 和 JMeter 的安装配置,kubernetes 环境,部署 tomcat 服务;
实战纵向扩容,增强单个 Pod 的配置,用 apache bench 和 JMeter 验证扩容效果;
实战横向扩容,增加 Pod 数量,用 apache bench 和 JMeter 验证扩容效果;
实战步骤
本章我们要做以下事情:
规划环境;
准备 Tomcat 服务的镜像;
在 kubernetes 创建 Tomcat 服务的 deployment 和 service;
安装 Apache bench;
用 Apache bench 测试 Tomcat 服务的性能;
安装 JMeter;
用 JMeter 测试 Tomcat 服务的性能;
环境规划
整个实战需要四台机器,分别是 k8s master、k8s node、Apache bench 所在机器,JMeter 所在机器(win10),如下图:
整理信息列表如下:
准备 Tomcat 服务的镜像
用于测试的是个 springboot 的 web 服务,我们要将此 springboot 工程构建成 docker 镜像,这样 kubernetes 环境才能创建此服务的 Pod;
镜像名称:bolingcavalry/k8stomcatdemo:0.0.5,已经上传到 hub.docker.com,您可以直接使用这个镜像;
如果您想自己开发一个 web 镜像,请参考文章《kubernetes下的Nginx加Tomcat三部曲之二:细说开发》,参考源码在 GitHub 可以下载,如下表所示:
这个 git 项目中有多个目录,本次的 web 工程源码放在 k8stomcatdemo,如下图红框所示:
有个细节请注意:Apache bench 在测试的时候,如果 server 每次返回内容的长度都不一样,会被算作失败,因此最好将返回内容长度固定,如下代码,使用"%15s"将 IP 地址的字符串固定为 15 位,不足 15 位就用空格补全:
在 kubernetes 创建 Tomcat 服务的 deployment 和 service
接下来我们要在 kubernetes 创建 deployment 和 service 了,请登录可以执行 kubectl 命令的机器:
创建文件 tomcat.yaml,内容如下:
如上所示,web 服务的镜像是 bolingcavalry/k8stomcatdemo:0.0.5,Pod 数量为 1,使用了 0.1 的 CPU 和 256M 的内存;
在 tomcat.yaml 所在目录下创建文件 tomcat-svc.yaml,内容如下:
如上所示,使用了 NodePort,这样就能通过节点机器的 IP 地址和 30008 端口访问到此服务了;
在 tomcat.yaml 所在目录执行命令 kubectl create -f tomcat.yaml,tomcat-svc.yaml,即可创建 deployment 和 service:
在 dashboard 页面可以看到此 Pod 情况如下图,资源符合配置中的限制:
我的 kubernetes 节点 1 的 IP 地址是 192.168.119.153:,所以在浏览器访问:http://192.168.119.153:30008/getserverinfo ,可以在浏览器页面看到服务端的响应,如下图:
服务端已经 OK,接下来我们开始准备测试吧;
安装 Apache bench;
在 ubuntu16 的电脑上,执行以下命令即可安装 apache bench:
用 Apache bench 测试 Tomcat 服务的性能
执行以下命令可以立即开始 ab 测试:
上述命令的意思一百个并发用户进行共计两万次请求,请求地址是 http://192.168.119.153:30008/getserverinfo
等待执行完成结果如下:
以上是测试结果,有三个参数需要重点关注:
注意 JIT 的影响
有一点请特别注意:刚启动的 Tomcat 服务,Controller 的代码还没有触发 JIT,所以理论上性能是低于生产环境的,请先执行一次 AB 测试使其完成 JIT(JIT 导致的 CPU 飙高也会在此时发生,后面就不会了),这此的测试结果直接丢弃,然后再重新做一次 AB 测试,取这次的结果;
基本的 Apache bench 操做已经熟悉了,接下来我们开始安装和使用 JMeter 吧;
安装 JMeter
为了使用图形化界面,我的 Jemeter 是安装在 win10 电脑上的;
确保本地已装好 JDK,并且 JAVA_HOME 环境变量也已配好,JMeter4 需要 JDK8 或者 JDK9;
去官网下载安装包,地址:http://jmeter.apache.org/download_jmeter.cgi ,安装包如下图红框中所示:
将安装包解压后,鼠标双击 apache-jmeter-4.0\bin\jmeter.bat 文件,即可启动 JMeter,如下图:
把语言改成中文吧,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 配置就上面这些了,点击下图红框中的绿色三角形图标,开始测试:
点击左侧的"聚合报告",可以看到一个简易的图表,测试过程中是不断更新的,测试完成后停止更新,如下所示:
这里简单说一下几个数据指标的含义:
小结
至此,咱们第一阶段的目标已经完成了,小结如下:
压测所需的服务端环境准备完毕;
压测所需的 AB 和 JMeter 工具准备完毕;
针对单个 Tomcat 容器的场景,用 AB 和 JMeter 完成了压测,吞吐量为 30 左右,单个请求等待时间为 3 秒左右(AB 和 JMeter 数据是有差异的);
接下来的两篇文章,我们会在 kubernetes 环境做不同类型的扩容,再继续做压测,然后对比扩容效果;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/00c8c933b7c6ad3e7c86fc5e5】。文章转载请联系作者。
评论