参考的文章

压测工具Jmeter-Suite详细操作步骤

写此文的目的

由于我是刚开始接触kubernetes和jmeter,所以在学习过程中遇到了很多很多问题,同时我很烦恼为什么网上没有文章是从真正零基础地记录部署的过程,比如安装brew和helm3之类的步骤都被省略了,像我这种菜菜就很抓瞎。所以在我终于摸到了kubernetes世界的大门、碰到了压测的边边后,我决定写一篇文章回馈菜菜们。

需要的背景知识

  • 阅读《kubernetes权威指南》第一章 (了解kubernetes的基本概念)
  • 阅读 JMeter介绍 (了解jmeter的作用)

我的系统

详细步骤

省略购买压测机器部分的内容,直接跳到压测工具安装部分开始 。

1 安装brew

brew是一个mac上面很好用的软件管理系统,可以简化mac上的安装过程。

我用了一个知乎专栏上的自动化脚本,链接是Homebrew国内如何自动安装(国内地址) ,真诚表白作者,原本下载速度很慢的,现在下载速度飞升 T^T

ps安装期间我遇到了各种问题,因为我原本的mac系统很低,安装了低版本的brew,不知道啥原因死活装不上新版本,我干脆重新装了个机,重新安装,就非常顺利

2 安装wget

Linux系统上一个下载文件的工具。

其实我感觉它的功能和brew挺像的,但由于我参考的文章里用了wget那我就用吧()

brew install wget命令,我在这一步很顺利,省略之 。

3 安装helm

Helm 是Deis 开发的一个用于Kubernetes 应用的包管理工具,主要用来管理Charts。

chart 是描述相关的一组Kubernetes资源的文件集合。单个chart可能用于部署简单的东西,比如memcached pod,或者一些复杂的东西,比如完整的具有HTTP 服务,数据库,缓存等的Web 应用程序堆栈。chart通过创建为特定目录树的文件,将它们打包到版本化的压缩包,然后进行部署。

按照文档上的操作,我在运行完

  1. wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
  2. tar -zxvf helm-v3.2.1-linux-amd64.tar.gz
  3. cp linux-amd64/helm /usr/local/bin/

后,出现了zsh: exec format error: helm 的报错 ,简单搜索了一下,似乎是无法解析文件?于是我又重新进行安装helm的操作,也就是运行brew install kubernetes-helm,又出现了错误。

  1. Error: The `brew link` step did not complete successfully
  2. The formula built, but is not symlinked into /usr/local
  3. Could not symlink bin/helm
  4. Target /usr/local/bin/helm
  5. already exists. You may want to remove it:
  6. rm '/usr/local/bin/helm'

原因似乎是之前已经装了一次helm,文件重复了

于是我按照提示,运行

  1. rm '/usr/local/bin/helm'
  2. brew link helm
  3. brew install kubernetes-helm

安装helm的过程到此结束。

4 安装kubectl

kubectl是Kubernetes 命令行工具,使得你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。

由于前面我们已经安装了brew,所以可以直接运行brew install kubectl

再运行kubectl version来确定是否安装成功,当出现类似于

  1. Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-14T05:14:17Z", GoVersion:"go1.15.6", Compiler:"gc", Platform:"darwin/amd64"}
  2. Server Version: version.Info{Major:"1", Minor:"18+", GitVersion:"v1.18.4-tke.3", GitCommit:"f8797eb035aca9c928af02ea9a74d232cfd41bc6", GitTreeState:"clean", BuildDate:"2020-10-12T03:32:01Z", GoVersion:"go1.14.8", Compiler:"gc", Platform:"linux/amd64"}

的代码时说明已经安装成功啦。

5 部署压测集群

接着按照文章的内容,运行

  1. git clone https://github.com/tkestack/charts.git
  2. cd charts/
  3. helm install your-name incubator/jmeter-suite (这里的your-name请更改为自己给服务取的名字)

然后出现报错

  1. Error: Kubernetes cluster unreachable:
  2. Get "http://localhost:8080/version?timeout=32s": dial tcp 127.0.0.1:8080: connect: connection refused

这里要配置环境变量KUBECONFIG,需要运行export KUBECONFIG=集群配置文件的路径,但这个配置是一次性的,终端窗口一关闭或者新开一个终端窗口 就需要重新配置,如果需要更改全局的环境变量需要更改~/.bash_profile文件。

然后解决完上面这个报错后,再重新运行helm install your-name incubator/jmeter-suite ,随后又出现了报错

  1. Error: rendered manifests contain a resource that already exists.
  2. Unable to continue with install: ServiceAccount "jmeter-influxdb" in namespace "default" exists and cannot be imported into the current release: invalid ownership metadata;
  3. annotation validation error: missing key "meta.helm.sh/release-name": must be set to "test"; annotation validation error: missing key "meta.helm.sh/release-namespace": must be set to "default"

呃大概意思就是本地 已经有了一个namespace为default的jmeter了,解决这个错误挺简单

  • 1 运行helm list --all --all-namespaces,查看系统里所有的releases。
  • 2 运行 helm uninstall jmeter -n default,卸载这个namespace为default的jmeter。

随后便可以安装jmeter了,重新运行helm install your-name incubator/jmeter-suite ,这次成功了,随后出现

  1. NAME: test
  2. LAST DEPLOYED: Wed Jan 27 17:18:21 2021
  3. NAMESPACE: default
  4. STATUS: deployed
  5. REVISION: 1

6 编写脚本

打开jmeter工具

Jmeter官网下载好jmeter,我下载的是如图的黑色字体版本。

接着我双击/bin目录下的ApacheJMeter.jar文件,打不开。就算把电脑的那个安全性提醒关掉也打不开,好吧,运行下面的命令强制打开

java -jar /Users/chrystal/Documents/apache-jmeter-5.4.1\ 2/bin/ApacheJMeter.jar (请把后面的路径改为自己存放文件的路径)

此时命令行如下图



这说明!不能用这个窗口来跑测试脚本!所以我们要新开一个终端窗口进行后面的操作。新开的终端窗口记得配置kubernetes环境变量。

该jar包打开的界面如下

可以把原文章中提到的demo测试脚本用它打开,如图

接下来参考demo脚本写一个自己的脚本,具体的基础设置解释在原文章里有。那么测试一下博客园的接口吧。

设置脚本

在jmeter处新建个文件,添加线程组



下面红框处是我更改后的配置,重要的是我设置了5000个线程,循环2次。(*我后来改了,因为线程组太多了,测试停不下来,改成了50x200)



右键线程组,添加http请求,并设置IP地址。





到这里我们基本配置好了线程组的内容,也就是说我们在这次测试中会向博客园发送10000个http请求来测试它的承受能力,但是我们还需要对返回的结果进行分析,所以还要再添加一些监听器来处理结果。

  • 添加后端监听器



    对其进行简单设置

  • 添加察看结果树



    自己喜欢啥就添加啥吧,我感觉作用都差不多,在这里我添加了察看结果树汇总图

配置完所有东西后,我们运行一下脚本看看有无错误。

果然有错误啊,我的人生果然不会这么一帆风顺啊()运行一会儿很快就退出了,点击察看结果树出来的全是错误,



然后点击响应数据去查看返回了啥错误



这里说请求的host的格式错误。经过我的一番研究,原来我在上面的设置IP地址时直接复制了博客园的主页,包含了特殊符号。也就是说具体的路径不能写在服务器IP地址那里,正确写法应该是这样



改完以后再运行,就非常顺利,如图

脚本编写到此完成!

7 发起测试

运行kubectl get pods 确认一下有没有连接到kubernetes集群,出现了类似于

  1. NAME READY STATUS RESTARTS AGE
  2. jmeter-influxdb-0 1/1 Running 0 23h
  3. test-distributed-jmeter-master-77749c5845-89c6w 1/1 Running 0 23h
  4. test-distributed-jmeter-server-5556bbf5fc-2hxvg 1/1 Running 0 23h
  5. test-distributed-jmeter-server-5556bbf5fc-fztws 1/1 Running 0 23h
  6. test-distributed-jmeter-server-5556bbf5fc-lmsdw 1/1 Running 0 23h
  7. test-grafana-584875d9d4-zsfzz 1/1 Running 0 23h

的内容就是连接成功了。

然后运行sh start_test.sh 你的文件目录,就可以在集群上进行测试了。

8 查看结果

运行完成以后终端窗口会出现

  1. Creating summariser <summary>
  2. Created the tree successfully using /jmeter/test2.jmx
  3. Configuring remote engine: 192.168.0.131
  4. Configuring remote engine: 192.168.0.189
  5. Configuring remote engine: 192.168.0.134
  6. Starting distributed test with remote engines: [192.168.0.189, 192.168.0.134, 192.168.0.131] @ Thu Jan 28 09:16:07 UTC 2021 (1611825367766)
  7. Remote engines have been started:[192.168.0.189, 192.168.0.134, 192.168.0.131]
  8. Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
  9. summary + 3104 in 00:00:22 = 143.4/s Avg: 598 Min: 40 Max: 16565 Err: 6 (0.19%) Active: 150 Started: 150 Finished: 0
  10. summary + 4400 in 00:00:30 = 146.3/s Avg: 772 Min: 41 Max: 32547 Err: 4 (0.09%) Active: 150 Started: 150 Finished: 0
  11. summary = 7504 in 00:00:52 = 145.1/s Avg: 700 Min: 40 Max: 32547 Err: 10 (0.13%)
  12. summary + 4600 in 00:00:31 = 150.6/s Avg: 854 Min: 40 Max: 64926 Err: 7 (0.15%) Active: 149 Started: 150 Finished: 1
  13. summary = 12104 in 00:01:22 = 147.1/s Avg: 759 Min: 40 Max: 64926 Err: 17 (0.14%)
  14. summary + 4400 in 00:00:30 = 149.0/s Avg: 742 Min: 42 Max: 68044 Err: 2 (0.05%) Active: 132 Started: 150 Finished: 18
  15. summary = 16504 in 00:01:52 = 147.6/s Avg: 754 Min: 40 Max: 68044 Err: 19 (0.12%)
  16. summary + 4500 in 00:00:30 = 150.5/s Avg: 1100 Min: 42 Max: 131100 Err: 13 (0.29%) Active: 98 Started: 150 Finished: 52
  17. summary = 21004 in 00:02:22 = 148.2/s Avg: 828 Min: 40 Max: 131100 Err: 32 (0.15%)
  18. summary + 4600 in 00:00:30 = 153.0/s Avg: 801 Min: 41 Max: 130543 Err: 11 (0.24%) Active: 51 Started: 150 Finished: 99
  19. summary = 25604 in 00:02:52 = 149.1/s Avg: 823 Min: 40 Max: 131100 Err: 43 (0.17%)
  20. summary + 4396 in 00:01:12 = 61.0/s Avg: 438 Min: 40 Max: 131063 Err: 7 (0.16%) Active: 0 Started: 150 Finished: 150
  21. summary = 30000 in 00:04:04 = 123.0/s Avg: 767 Min: 40 Max: 131100 Err: 50 (0.17%)
  22. Tidying up remote @ Thu Jan 28 09:20:12 UTC 2021 (1611825612504)
  23. ... end of run

然后原文章很详细地写了如何查看结果,这里省略。

在Mac上利用压测工具Jmeter-Suite进行一次压测实践的保姆级详细步骤(参考腾讯云文章)的更多相关文章

  1. Mac上利用Aria2加速百度网盘下载

    百度网盘下载东西的速度那叫一个慢,特别是大文件,看着所需时间几个小时以上,让人很不舒服,本文记录自己在mac上利用工具Aria2加速的教程,windows下思路也是一样! 科普(可以不看) 这里顺带科 ...

  2. Mac上利用VScode配置c/c++开发环境

    Mac上利用VScode配置c/c++开发环境 哭辽,Typora里面最好不要插入表情,不然保存会闪退 首先你要有一个vscode 在扩展里面下载c/c++ 第一步 ⬆+com+p 打开命令模式:选择 ...

  3. mac上SVN的图形工具 SmartSVN注册

    mac上SVN的图形工具 SmartSVN注册 打开smartsvn,选中license注册 选中文件smartsvn.license,下一步下一步就ok了 smartsvn.license Name ...

  4. HTTP 2.0 之压测工具 Jmeter

    年后,德国总部工业平台要做中国本地化,德国的同事过来给我们展示日志的时候,无意间看到了他们应用日志里的 HTTP/2,下意识到,原来他们都已经提供Http 2.0的服务了. 那么问题来了,除了h2lo ...

  5. mac上Android反编译工具apktool、dex2jar入门

    MAC上Apktool的安装 官网链接   image.png 使用步骤如图1-6 第一:下载一个shell脚本,保存的名字就是”apktool”,不要带.sh后缀.可以复制到sublimetext, ...

  6. Mac上的抓包工具Charles

    http://blog.csdn.net/jiangwei0910410003/article/details/41620363 $********************************** ...

  7. [MACOS] Mac上的抓包工具Charles

    转载自: http://blog.csdn.net/jiangwei0910410003/article/details/41620363 今天就来看一下Mac上如何进行抓包,之前有一篇文章介绍了使用 ...

  8. [转]Mac上的抓包工具Charles

    $*********************************************************************************************$ 博主推荐 ...

  9. Mac上的抓包工具Charles[转载]

    今天就来看一下Mac上如何进行抓包,之前有一篇文章介绍了使用Fidder进行抓包 http://blog.csdn.net/jiangwei0910410003/article/details/198 ...

随机推荐

  1. IIS7 网站发布常见报错问题解决方案汇总

    本文实例为大家分享了IIS7 网站发布常见问题,以及五种问题的解决方法,供大家参考,具体内容如下: 1.不是有效的Win32位应用程序 : 解决方案: 1).进入应用程序池=>选中网站=> ...

  2. [USACO16JAN]Angry Cows G 解题报告

    一图流 参考代码: #include<bits/stdc++.h> #define ll long long #define db double #define filein(a) fre ...

  3. asp.net core系列 77 webapi响应压缩

    一.介绍 背景:目前在开发一个爬虫框架,使用了.net core webapi接口作为爬虫调用入口,在调用 webapi时发现爬虫耗时很短(1秒左右),但客户端获取响应时间却在3~4秒.对于这个问题考 ...

  4. CPPRESTSDK 编译

    首先要 git clone这个库git clone git://github.com/Microsoft/cpprestsdk.git然后git 一下 Vcpkg.\vcpkg\bootstrap-v ...

  5. ASP已老,尚能饭否?

    我对ASP的感情,跟大海一样深.我用它实现了第一个动态网页,也用它做了毕业设计,毕业设计的名字是<毕业设计管理系统>(是不是有点绕).在 PHP 和 ASP.NET.Java 高歌猛进的今 ...

  6. LVGL库入门教程03-布局方式

    LVGL布局方式 LVGL的布局 上一节介绍了如何在 LVGL 中创建控件.如果在创建控件时不给控件安排布局,那么控件默认会被放在父容器的左上角. 可以使用 lv_obj_set_pos(obj, x ...

  7. CYaRon!语

    P3695 CYaRon!语 开始之前 上次水了些小模拟之后感觉不能再颓废了,于是就来大模拟. 然后这个题花了我一个多星期 还是最差解 不过,为了纪念我的第 20 道紫题,纪念我这一周的努力,我还是想 ...

  8. 12.web基础与HTTP协议

    web基础与HTTP协议 目录 web基础与HTTP协议 web基础 域名概述 HTML概述 HTML基本标签 HTML语法规则 HTML文件结构 头标签中常用标签 内容标签中常用标签 静态网页与动态 ...

  9. 关于 GIN 的路由树

    GIN 是一个 golang 常用的 Web 框架,它对 API 比较友好,源码注释也很明确明确,使用起来快速灵活,还有极高的容错率.标题中的路由我们可以简单理解为在浏览器中输入的页面地址,而&quo ...

  10. 封装环形加载进度条(Vue插件版和原生js版)

    1.效果预览 2.用到的知识 主要利用SVG的stroke-dasharray和stroke-dashoffset这两个属性. 在看下面文章之前,你需要了解 <!DOCTYPE html> ...