参考的文章

压测工具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通过创建为特定目录树的文件,将它们打包到版本化的压缩包,然后进行部署。

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

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

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

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

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

于是我按照提示,运行

rm '/usr/local/bin/helm'
brew link helm
brew install kubernetes-helm

安装helm的过程到此结束。

4 安装kubectl

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

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

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

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"}
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 部署压测集群

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

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

然后出现报错

Error: Kubernetes cluster unreachable:
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 ,随后又出现了报错

Error: rendered manifests contain a resource that already exists.
Unable to continue with install: ServiceAccount "jmeter-influxdb" in namespace "default" exists and cannot be imported into the current release: invalid ownership metadata;
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 ,这次成功了,随后出现

NAME: test
LAST DEPLOYED: Wed Jan 27 17:18:21 2021
NAMESPACE: default
STATUS: deployed
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集群,出现了类似于

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

的内容就是连接成功了。

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

8 查看结果

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

Creating summariser <summary>
Created the tree successfully using /jmeter/test2.jmx
Configuring remote engine: 192.168.0.131
Configuring remote engine: 192.168.0.189
Configuring remote engine: 192.168.0.134
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)
Remote engines have been started:[192.168.0.189, 192.168.0.134, 192.168.0.131]
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
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
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
summary = 7504 in 00:00:52 = 145.1/s Avg: 700 Min: 40 Max: 32547 Err: 10 (0.13%)
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
summary = 12104 in 00:01:22 = 147.1/s Avg: 759 Min: 40 Max: 64926 Err: 17 (0.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
summary = 16504 in 00:01:52 = 147.6/s Avg: 754 Min: 40 Max: 68044 Err: 19 (0.12%)
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
summary = 21004 in 00:02:22 = 148.2/s Avg: 828 Min: 40 Max: 131100 Err: 32 (0.15%)
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
summary = 25604 in 00:02:52 = 149.1/s Avg: 823 Min: 40 Max: 131100 Err: 43 (0.17%)
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
summary = 30000 in 00:04:04 = 123.0/s Avg: 767 Min: 40 Max: 131100 Err: 50 (0.17%)
Tidying up remote @ Thu Jan 28 09:20:12 UTC 2021 (1611825612504)
... 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. 详解TCP四次挥手(断开TCP连接过程)

    在讲述TCP四次挥手,即断开TCP连接的过程之前,需要先介绍一下TCP协议的包结构. TCP协议包结构: 这里只对涉及到四次挥手过程的字段做解释 (1) 序号(Sequence number) 我们通 ...

  2. jeecgboot-vue3笔记(九)——treeSelect树形选择组件的使用(异步加载)

    使用效果 初始化加载顶层节点,点击各层的>加载该节点的子节点,加载后>标识去除不再重复加载. 前端代码 vue ant-design组件 tree-data,树节点,children方式或 ...

  3. 如何用HMS Core位置和地图服务实现附近地点路径规划功能

    日常出行中,路径规划是很重要的部分.用户想要去往某个地点,获取到该地点的所有路径,再根据预估出行时间自行选择合适的路线,极大方便出行.平时生活中也存在大量使用场景,在出行类App中,根据乘客的目的地可 ...

  4. HashMap 中的 hash 函数

    1. 什么是 hash 函数 hash 函数,即散列函数,或叫哈希函数.它可以将不定长的输入,通过散列算法转换成一个定长的输出,这个输出就是散列值.需要注意的是,不同的输入通过散列函数,也可能会得到同 ...

  5. CentOS切换用户命令su or su+username

    1.打开终端,提示符为"$",表明该用户为普通用户,此时,直接输su,回车,输入root密码,回车,就可以切换到root用户下,此时的提示符变为"#". 注意, ...

  6. 深度学习与CV教程(13) | 目标检测 (SSD,YOLO系列)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  7. ElasticSearch7.3学习(三十一)----Logstash基础学习

    一.Logstash基本介绍 Logstash 是一个功能强大的工具,可与各种部署集成. 它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据(文件.数据库......).logstas ...

  8. 程序分析与优化 - 7 静态单赋值(SSA)

    本章是系列文章的第七章,终于来到了鼎鼎大名的SSA,SSA是编译器领域最伟大的发明之一,也是影响最广的发明. 本文中的所有内容来自学习DCC888的学习笔记或者自己理解的整理,如需转载请注明出处.周荣 ...

  9. 【react】什么是fiber?fiber解决了什么问题?从源码角度深入了解fiber运行机制与diff执行

    壹 ❀ 引 我在[react] 什么是虚拟dom?虚拟dom比操作原生dom要快吗?虚拟dom是如何转变成真实dom并渲染到页面的?一文中,介绍了虚拟dom的概念,以及react中虚拟dom的使用场景 ...

  10. go-zero微服务实战系列(九、极致优化秒杀性能)

    上一篇文章中引入了消息队列对秒杀流量做削峰的处理,我们使用的是Kafka,看起来似乎工作的不错,但其实还是有很多隐患存在,如果这些隐患不优化处理掉,那么秒杀抢购活动开始后可能会出现消息堆积.消费延迟. ...