jmeter-kubernetes配置与启动

1. Jmeter介绍

JMeter是开源软件Apache基金会下的一个性能测试工具,用来测试部署在服务器端的应用程序的性能。性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。

我们将会使用windows下的Jmeter和linux下jmeter-kubernetes来完成我们对于kubernetes集群的性能测试。

2. Windows下安装Jmeter

2.1 Jmeter的下载

去官方网站进行下载,地址链接为https://jmeter.apache.org/。我们在这里下载对应的zip文件,而Source是JMeter的源码文件,我们并不需要。

官网

2.2 环境变量的配置

进行环境变量的配置,包括Path以及JMETER_HOME,JMETER_HOME是我们下载后的解压路径。Path中添加解压路径下的bin文件夹路径。

对应的路径
自定义的路径

Windwos下打开jmeter.bat即可,出现如下图形化界面即可。

操作界面

若出现下图所示错误,则为缺少Java运行环境,则进行JDK安装即可,在此不做说明。

image.png

2.3 测试计划的创建

其中,默认创建了一个Test Plan的测试计划,Test Plan为计划名称,我们可以进行更改,也可以通过file新建一个空白的测试计划或者是打开一个已经创建好的计划。

image.png

创建测试计划

我们添加一个线程组用来进行用户测试,其中线程组包括了对线程数、虚拟用户增长时长、循环次数的设置。其中各参数的意义如下列所示:

1)线程数:这里就是指虚拟用户数,默认的输入是“1”,则表明模拟一个虚拟用户访问被测系统,如果想模拟100个用户,则此处输入100。

2)Ramp-Up Period (in seconds): 虚拟用户增长时长。不明白别着急,xmeter君给你举个栗子:比如你测试的是一个考勤系统,那么实际用户登录使用考勤系统的时候并不是大家喊1、2、3 - 走起,然后一起登录。实际使用场景可能是9点钟上班,那么从8:30开始,考勤系统会陆陆续续有人开始登录,直到9:10左右,那么如果完全按照用户的使用场景,设计该测试的时候此处应输入40(分钟)* 60(秒)= 2400。但是实际测试一般不会设置如此长的Ramp-Up时间,原因嘛,难道你做一次测试要先等上40分钟做登录操作?一般情况下,可以估计出登录频率最高的时间长度,比如此处可能从8:55到9:00登录的人最多,那这里设置成300秒,如果“线程数”输入为100,则意味着在5分钟内100用户登录完毕。

3)循环次数:该处设置一个虚拟用户做多少次的测试。默认为1,意味着一个虚拟用户做完一遍事情之后,该虚拟用户停止运行。如果选中“永远”,则意味着测试运行起来之后就根本停不下来了,除非你把它强制停止。

各种配置

接下来我们设置需要对应的网站的访问,使用http请求。选中线程组,右键add->Sampler->HTTP Request。

创建HTTP请求

接下来我们对我们的HTTP请求进行对应的设置。请求名可以进行更改用于区分不同网址的测试,参数一般用于需要登录的网站,协议可以不用更改,服务器地址很重要,需要写明我们对应的地址,端口号采用默认即可。除特殊网站外,我们仅仅使用GET请求即可。

我们在这里对百度(http://www.baidu.com)进行测试,设置后的界面如下。

参数详解
image.png

现在的测试脚本已经可以运行了,先点击下面如图所示的第一步:点击保存脚本按钮;然后点击如图所示的第二步:点击运行测试按钮。

image.png

为什么我的测试跑完了没啥反应?嗯,其实测试已经跑完了,你可以去“选项(Options)” > “Log Viewer”看看运行的日志。如果你还是看不到日志,你可以点击下面所示的三角箭头展开或者收起日志视图。日志视图中可以看到“线程组 1-1”的启动和结束时间,表明测试已经跑完。

image.png

这JMeter运行看着也太不直观了吧?那如果我的测试有问题了,怎么发现啊?别着急,JMeter提供了“监听器”让用户来观察测试结果。

添加结果监听器

如下图所示,右击“线程组(Thread Group)” > “监听器(Listener)” > “察看结果树(View Results Tree)”来查看性能测试过程中请求和响应信息。添加完毕后,保存测试脚本,再次运行。

image.png

运行测试完毕之后,点击“察看结果树” > “百度”,点击下图中3所示位置,你可以看到一些测试期间一些有用的信息,比如发送的请求的信息和响应数据等。接下来可以试着改一下“线程组”里的“线程数”为10,就是模拟10个用户访问。别改太大哦,否则小心度娘把你的IP地址给封了。

image.png

好啦,至此为止,你已经学会了写一个最简单的JMeter的性能测试用例。

2.4 创建kubernetes测试

对基本测试进行更改,使其对应我们的kubernetes测试。其中基本网页的更改只需要对测试网站的网址进行更改即可。最重要的是对于结果的输出,我们不能使用察看结果树来进行查看。因为Jmeter需要部署到kubernetes上,其需要创建对应的数据库,因此我们需要将我们的输出结果导入到数据库中。

我们创建对应的监听器,然后对里面最重要的数据库连接进行设置,即influxdbUrl。我们需要将这个写成我们的数据库连接地址,该链接由kubernetes部署jmeter决定。

创建对应的监听器
image.png

3. Kubernetes部署Jmeter

3.1 克隆jmeter-kubernetes库

本地克隆jmeter-kubernetes库来进行安装。

git clone https://github.com/kubernauts/jmeter-kubernetes

结果:

Cloning into 'jmeter-kubernetes'...
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 18 (delta 0), reused 18 (delta 0), pack-reused 0
Unpacking objects: 100% (18/18), done.
Checking connectivity... done.

接下来的操作需要在这个文件夹中进行,因此先跳转到该文件夹中。

cd jmeter-kubernetes/

3.2 保证脚本可执行,同时开始kubernetes上的部署。

chmod +x jmeter_cluster_create.sh dashboard.sh start_test.sh
./jmeter_cluster_create.sh

结果:

checking if kubectl is present
Client Version: v1.9.0+coreos.0
Server Version: v1.9.0+coreos.0
Current list of namespaces on the kubernetes cluster:

default
don
kube-public
kube-system
test

Enter the name of the new tenant unique name, this will be used to create the namespace
kubernauts

Creating Namespace: kubernauts
namespace "kubernauts" created
Namspace kubernauts has been created

Creating Jmeter slave nodes

Number of worker nodes on this cluster is 2

deployment "jmeter-slaves" created
service "jmeter-slaves-svc" created
Creating Jmeter Master
configmap "jmeter-load-test" created
deployment "jmeter-master" created
Creating Influxdb and the service
configmap "influxdb-config" created
deployment "influxdb-jmeter" created
service "jmeter-influxdb" created
Creating Grafana Deployment
deployment "jmeter-grafana" created
service "jmeter-grafana" created
Printout Of the kubernauts Objects

NAME  DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/influxdb-jmeter 1 1 1 0 2s
deploy/jmeter-grafana 1 1 1 0 1s
deploy/jmeter-master 1 1 1  0 3s
deploy/jmeter-slaves 2 2 2 1 4s

NAME DESIRED CURRENT READY AGE
rs/influxdb-jmeter-5cbd7b8469 1 1 0 2s
rs/jmeter-grafana-65dd5f6b79 1 1 0 1s
rs/jmeter-master-75f66dbb5f 1 1 0 3s
rs/jmeter-slaves-57cc6b9cfc 2 2 1 4s

NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/influxdb-jmeter 1 1 1 0 2s
deploy/jmeter-grafana 1 1 1 0 1s
deploy/jmeter-master 1 1 1 0 3s
deploy/jmeter-slaves 2 2  2 1 4s

NAME DESIRED CURRENT READY AGE
rs/influxdb-jmeter-5cbd7b8469 1 1 0 2s
rs/jmeter-grafana-65dd5f6b79 1 1 0 1s
rs/jmeter-master-75f66dbb5f  1 1 0 3s
rs/jmeter-slaves-57cc6b9cfc 2 2 1 4s

NAME READY STATUS RESTARTS AGE
po/influxdb-jmeter-5cbd7b8469-mbvtg 0/1 ContainerCreating 0  2s
po/jmeter-grafana-65dd5f6b79-lzjqm 0/1 ContainerCreating 0 1s
po/jmeter-master-75f66dbb5f-264bs 0/1 ContainerCreating 0 3s
po/jmeter-slaves-57cc6b9cfc-b877l 0/1 ContainerCreating 0 4s
po/jmeter-slaves-57cc6b9cfc-plssn 1/1 Running 0 4s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/jmeter-grafana NodePort 10.233.27.49  3000:32766/TCP 0s
svc/jmeter-influxdb ClusterIP 10.233.17.59  8083/TCP,8086/TCP,2003/TCP 1s
svc/jmeter-slaves-svc ClusterIP None  1099/TCP,50000/TCP 3s

等待所有pods完成,均变为Running状态。

kubectl get -n kubernauts po

结果:

NAME READY STATUS RESTARTS AGE
influxdb-jmeter-5cbd7b8469-mbvtg 1/1 Running 0 4m
jmeter-grafana-65dd5f6b79-lzjqm 1/1 Running 0 4m
jmeter-master-75f66dbb5f-264bs 1/1 Running 0 4m
jmeter-slaves-57cc6b9cfc-b877l 1/1 Running 0 4m
jmeter-slaves-57cc6b9cfc-plssn 1/1 Running 0 4m

3.3 配置dashboard脚本

./dashboard.sh

结果:

Creating Influxdb jmeter Database
Creating the Influxdb data source
{"datasource":{"id":1,"orgId":1,"name":"jmeterdb","type":"influxdb","typeLogoUrl":"","access":"proxy","url":"http://jmeter-influxdb:8086","password":"admin","user":"admin","database":"jmeter","basicAuth":false,"basicAuthUser":"","basicAuthPassword":"","withCredentials":false,"isDefault":true,"secureJsonFields":{},"version":1,"readOnly":false},"id":1,"message":"Datasource added","name":"jmeterdb"}

3.4 通过执行test脚本开始测试

./start_test.sh

接下来会有一个等待输入的jmx脚本,我们将我们在windows中写好的脚本导入到这台虚拟机,然后输入该jmx文件即可。

Enter path to the jmx file cloudssky.jmx(这里更改为我们自己的文件)

结果:

Creating summariser 
Created the tree successfully using cloudssky.jmx
Configuring remote engine: 10.233.66.65
Configuring remote engine: 10.233.87.12
Starting remote engines
Starting the test @ Mon Feb 12 10:00:14 UTC 2018 (1518429614812)
Remote engines have been started
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary + 15 in 00:02:13 = 0.1/s Avg: 2760 Min: 1315 Max: 6677 Err: 0 (0.00%) Active: 4 Started: 4 Finished: 0
summary + 16 in 00:01:03 = 0.3/s Avg: 1506 Min: 1283 Max: 2232 Err: 0 (0.00%) Active: 4 Started: 4 Finished: 0

3.5 在kuboard可视化网页中进行操作

打开对应的工作结点的可视化,端口为32567。然后,我们选中对应的jmeter的pod,然后在进入对应的空间。

image.png

打开对应的grafana窗口

image.png

使用浏览器进行代理。

image.png

在浏览器窗口打开。

image.png

开始导入数据,该数据与我们在2.4中创建的测试一致。

image.png
image.png

该JSON文件用于进行下面数据展示的样式,通常不需要更改,即我们只需要直接上传文件夹下的JSON文件即可。

image.png

在执行这一步骤之前,我们必须要有对应的数据库,即必须完成dashboard的创建。

image.png

最后,我们可以看到我们数据就在网页中进行展示了。

image.png

参考链接:
https://blog.csdn.net/zl1zl2zl3/article/details/78194194
https://blog.kubernauts.io/load

你可能感兴趣的:(jmeter-kubernetes配置与启动)