K8S集群进行分布式负载测试

使用K8S集群执行分布式负载测试

本教程介绍如何使用Kubernetes部署分布式负载测试框架,该框架使用分布式部署的locust 产生压测流量,对一个部署到 K8S集群的 Web 应用执行负载测试,该 Web 应用公开了 REST 格式的端点,以响应传入的 HTTP POST 请求。

关于分布式负载测试的更多资料请查看:

  1. Distributed Load Testing Using Kubernetes

  2. GoogleCloudPlatform/distributed-load-testing-using-kubernetes: Distributed load testing using Kubernetes on Google Container Engine (github.com)

本文借鉴了官方的框架,在官方基础上做了简化修改,支持在本地搭建的K8S集群上进行分布式负载测试。

1. 测试使用的工作负载实例

下图展示了将客户端请求传送到应用的示例工作负载。

在这里插入图片描述

为对该交互进行建模,您可以使用 Locust 这一基于 Python、可跨多个目标路径分发请求的分布式负载测试工具。例如,Locust 可以将请求分发到 /login/metrics 目标路径。工作负载在 Locust 中建模为一组任务。

2. locust分布式负载测试架构

该架构涉及到两个主要组件:

  • Locust 容器映像。
  • 容器编排和管理机制。

Locust 容器映像包含 Locust 软件,包含用于启动 Locust 服务和执行任务的脚本。为尽可能贴近真实客户端的情况,每个 Locust 任务都进行了加权。例如,每一千个客户端总请求发生一次注册。

Kubernetes提供容器编排和管理功能。使用 Kubernetes,您可以指定为负载测试框架奠定基础的容器节点的数量。此外,您还可以将负载测试工作器组织到 pod 中,并指定希望Kubernetes 持续运行的 pod 数量。

为了部署负载测试任务,请执行以下操作:

  1. 部署负载测试主节点。
  2. 部署一组负载测试工作器。您要使用这些负载测试工作器创建大量的流量,以便执行测试。

下图展示了使用示例应用进行负载测试的架构。主 Pod 提供用于操作和监控负载测试的网页界面。工作器 Pod 为接受测试的应用生成 REST 请求流量,并将指标发送到主 Pod。

在这里插入图片描述

2.1 关于负载测试主节点

Locust 主节点是执行负载测试任务的入口点。Locust 主节点配置指定了数个元素,包括容器使用的默认端口:

  • 8089 用于网页界面
  • 55575558 用于与工作器通信

2.2 关于负载测试工作器

Locust 工作器执行负载测试任务,可以使用单个 Deployment 来创建多个 pod。这些 pod 分布在 Kubernetes 集群中。

下图显示了 Locust 主节点与 Locust 工作器之间的关系。

在这里插入图片描述

3. 部署用于测试 Web 应用

sample-webapp 目录下包含一个简单的 web 测试应用,先构建为 docker 镜像。

$ git clone https://gitee.com/lldhsds/distributed-load-testing-using-k8s.git
$ cd distributed-load-testing-using-k8s/sample-webapp/# 构建镜像
$ docker build -t lldhsds/sample-webapp:20240625 .
# 查看构建的容器镜像
$ docker images | grep sample-webapp
lldhsds/sample-webapp     20240625       c4e7e59ac329   About a minute ago   928MB
# 打包镜像,将镜像导入到其他节点。也可以推送到镜像仓库。
$ docker save -o sample-webapp.tar lldhsds/sample-webapp:20240625

在 kubernetes 上部署 web应用,名字保持默认,sample-webapp

[root@k8s-master manifest-k8s]# pwd
/root/distributed-load-testing-using-k8s/manifest-k8s
# 镜像指向上面构建的镜像,其他信息如副本数根据自己的测试环境调整或者后续修改
[root@k8s-master manifest-k8s]# cat sample-webapp.yaml
kind: Deployment
apiVersion: apps/v1
metadata:name: sample-webapp
spec:selector:matchLabels:name: sample-webappreplicas: 2template:metadata:labels:name: sample-webappspec:containers:- name: sample-webappimage: lldhsds/sample-webapp:20240625ports:- name: webcontainerPort: 8000
---
kind: Service
apiVersion: v1
metadata:name: sample-webapplabels:name: sample-webapp
spec:ports:- port: 8000selector:name: sample-webapp[root@k8s-master manifest-k8s]# kubectl create -f sample-webapp.yaml[root@k8s-master manifest-k8s]# kubectl get pod
NAME                             READY   STATUS    RESTARTS   AGE
sample-webapp-65cdc749f7-hd8df   1/1     Running   0          61s
sample-webapp-65cdc749f7-j65sr   1/1     Running   0          61s
[root@k8s-master manifest-k8s]# kubectl get svc
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP        14d
sample-webapp   ClusterIP   10.99.23.223     <none>        8000/TCP       9m52s
# 测试应用正常响应
[root@k8s-master manifest-k8s]# curl http://10.99.23.223:8000
Welcome to the "Distributed Load Testing Using Kubernetes" sample web app

4. 部署 Locust 分布式压测组件

locust-masterlocust-worker 使用同样的容器镜像。

4.1 构建 locust tasks 镜像

locust-masterlocust-worker 使用的都是 locust-tasks 镜像,自定义locust测试脚本,构建为容器镜像:

[root@k8s-master locust]# pwd
/root/distributed-load-testing-using-k8s/locust
[root@k8s-master locust]# cd ..
[root@k8s-master distributed-load-testing-using-k8s]# cd locust/
[root@k8s-master locust]# ls
Dockerfile  locust-tasks
[root@k8s-master locust]# docker build -t lldhsds/locust-tasks:20240625 .
# 查看构建的镜像
[root@k8s-master locust]# docker images | grep locust-tasks
lldhsds/locust-tasks  20240625          0b08d2e86b76   About a minute ago   983MB
# 打包镜像导入到其他节点中
[root@k8s-master locust]# docker save -o locust-tasks.tar lldhsds/locust-tasks:20240625

4.2 部署 locust分布式测试环境

修改master cotnroller 和worker cotnroller 中 spec.template.spec.containers.image 字段,指向自己构建的镜像:

[root@k8s-master manifest-k8s]# pwd
/root/distributed-load-testing-using-k8s/manifest-k8s
[root@k8s-master manifest-k8s]# ls
locust-tasks.yaml  sample-webapp.yaml
[root@k8s-master manifest-k8s]# vim locust-tasks.yaml
...
image:  lldhsds/locust-tasks:20240625
...

部署locust-masterlocust worker,根据需要修改worker节点的副本数:

[root@k8s-master manifest-k8s]# ls
locust-tasks.yaml  sample-webapp.yaml
[root@k8s-master manifest-k8s]# kubectl create -f locust-tasks.yaml
deployment.apps/locust-master created
service/locust-master created
deployment.apps/locust-worker created# 查看部署的容器
[root@k8s-master manifest-k8s]# kubectl get pod
NAME                             READY   STATUS    RESTARTS   AGE
locust-master-8b64d8b4c-fmjsz    1/1     Running   0          9m52s
locust-worker-84fc79566c-2gjqr   1/1     Running   0          9m51s
locust-worker-84fc79566c-6v8cz   1/1     Running   0          9m51s
sample-webapp-65cdc749f7-hd8df   1/1     Running   0          18m
sample-webapp-65cdc749f7-j65sr   1/1     Running   0          18m
[root@k8s-master manifest-k8s]# kubectl get svc
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                        AGE
kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP                                        14d
locust-master   NodePort    10.109.114.2     <none>        8089:30502/TCP,5557:31739/TCP,5558:32268/TCP   9m55s
sample-webapp   ClusterIP   10.99.23.223     <none>        8000/TCP                                       27m

4.3 指向locust性能测试

使用http://ip:30502即可访问locust web界面,可以看到已经有两个workder节点连接到master。

在这里插入图片描述

配置参数进行测试:

在这里插入图片描述

5. 总结

  1. 基于该架构可以实现K8S环境下应用的分布式压测,借助与K8S易于扩展的能力,可以很容易的调整压测端、应用端的副本数,实现扩缩容;
  2. 本文使用一套K8S集群承载locust分布式测试组件和业务应用,最佳实践情况下,可以将locust部署到单独的K8S集群中,对业务侧K8S进行压测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【吴恩达深度学习笔记系列】Logistic Regression 【理论】

Binary Classification: Logistic Regression: y ^ σ ( w T x b ) \hat{y}\sigma{(w^T xb)} y^​σ(wTxb) using sigmoid function σ 1 1 e − z \sigma \frac{1}{1e^{-z}} σ1e−z1​. 【torch.sigmoid(x)】 Sigmoid ( x ) 1 1 e − x \text{Sigmoid}(x)\frac{1}{…

综合评价 | 基于组合博弈赋权的物流系统综合评价(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于组合博弈赋权的物流系统综合评价&#xff08;Matlab&#xff09; 组合博弈赋权&#xff08;Weighted Sum&#xff09;是一种常见的多目标决策方法&#xff0c;用于将多个目标指标进行综合评估和权衡…

运维锅总详解HAProxy

本文尝试从HAProxy简介、HAProxy工作流程及其与Nginx的对比对其进行详细分析&#xff1b;在本文最后&#xff0c;给出了为什么Nginx比HAProxy更受欢迎的原因。希望对您有所帮助&#xff01; HAProxy简介 HAProxy&#xff08;High Availability Proxy&#xff09;是一款广泛使…

springboot在线考试 LW +PPT+源码+讲解

第三章 系统分析 3.1 可行性分析 一个完整的系统&#xff0c;可行性分析是必须要有的&#xff0c;因为他关系到系统生存问题&#xff0c;对开发的意义进行分析&#xff0c;能否通过本系统来补充线下在线考试管理模式中的缺限&#xff0c;去解决其中的不足等&#xff0c;通过对…

阿里云开启ssl证书过程记录 NGINX

&#x1f91e;作者简介&#xff1a;大家好&#xff0c;我是思无邪&#xff0c;2024 毕业生&#xff0c;某厂 Go 开发工程师.。 &#x1f402;我的网站&#xff1a;https://www.yishanicode.top/ &#xff0c;持续更新&#xff0c;希望对你有帮助。 &#x1f41e;如果文章或网站…

【面试系列】数据科学家 高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

实验 1 图像基本操作

1. 实验目的 ①熟悉 Photoshop 基本操作&#xff1b; ②掌握 Matlab 、PythonOpenCV 中处理图像的基本方法&#xff1b; ③掌握图像的半调转换和抖动转换。 2. 实验内容 ①Photoshop 基本操作&#xff1a;打开图像文件&#xff0c;选择区域&#xff0c;旋转、裁剪图像、图层…

os实训课程模拟考试(大题复习)

目录 一、Linux操作系统 &#xff08;1&#xff09;第1关&#xff1a;Linux初体验 &#xff08;2&#xff09;第2关&#xff1a;Linux常用命令 &#xff08;3&#xff09;第3关&#xff1a;Linux 查询命令帮助语句 二、Linux之进程管理—&#xff08;重点&#xff09; &…

青岛网站建设一般多少钱

青岛网站建设的价格一般会根据网站的规模、功能、设计风格等因素来定&#xff0c;价格会存在着一定的差异。一般来说&#xff0c;一个简单的网站建设可能在数千元到一万元之间&#xff0c;而一个复杂的大型网站建设可能会需要数万元到数十万元不等。所以在选择网站建设服务时&a…

[Cloud Networking] BGP

1. AS (Autonomous System) 由于互联网规模庞大&#xff0c;所以网络会被分为许多 自治系统&#xff08;AS-Autonomous system&#xff09;。 所属类型ASN名称IPv4 数量IPv6数量运营商ISPAS3356LEVEL3 - Level 3 Parent, LLC, US29,798,83273,301,954,048互联网企业AS15169GO…

java接口自动化测试,怎样可以快速入门?

从0到1&#xff0c;快速入门Java接口自动化测试 Java接口自动化测试是一种自动化测试的方式&#xff0c;通过模拟用户发送HTTP请求并验证返回结果&#xff0c;来测试接口的正确性。它可以大大提高测试效率和覆盖率&#xff0c;减少人工测试的工作量。本文将从零开始&#xff0…

【NodeJs】入门

目录 一、前导 二、 url模块 三、path模块 四、buffer模块 五、fs模块 六、stream流模块 七、os模块 八、crypto模块 九、util模块 十、http模块 nodejs官网 Node.js — 在任何地方运行 JavaScript nmp是Node.js包管理器&#xff0c;用来安装各种库、框架和工具&…

pdf怎么转换成jpg,本地转换还是在线转换?

PDF&#xff08;Portable Document Format&#xff09;和JPG&#xff08;Joint Photographic Experts Group&#xff09;这两种文件格式在我们的日常生活和工作中扮演着举足轻重的角色。PDF因其跨平台、保持原样性强的特点&#xff0c;被广泛应用于文件传输和存储&#xff1b;而…

从0到1搭建Java开发环境(内涵超详细教程、软件、提供网盘链接直接一步到位!!!!)

软件部分 需要的软件为下面两个&#xff1a; IDEANavicat 需要的可以自行拿&#xff08;安装教程和软件&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1y3RoMt0ZapyJsj3P0DPaVA?pwdxr4p 提取码&#xff1a;xr4p 环境部分 需要的环境为以下几个&…

springboot+vue+mybatis奶茶管理系统+PPT+论文+讲解+售后

由于科学技术的快速发展&#xff0c;人们的生活也与信息时代的发展相关。同时&#xff0c;随着市场化和经济化的发展&#xff0c;国内很多行业已经意识到了这一点&#xff0c;为了提升行业的竞争力&#xff0c;就应当率先把握机会。于是在互联网的默化潜移影响下&#xff0c;餐…

【Qt+opencv】编译、配置opencv

文章目录 前言下载opencv编译opencvmingw版本 总结 前言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;它包含了超过2500个优化的算法。这些算法可以用来检测和识别面部&#xff0c;识别对象&#x…

UML建模笔记

5个视图 设计。类&#xff0c;接口&#xff0c;对象如何协作。实现。组件&#xff0c;运行程序&#xff0c;文档关系。用例。用户功能期望。进程。并发与同步相关进程&#xff0c;线程。部署。部署到计算机。 建模目的 和客户共创追踪需求变更协同开发进度控制持续迭代测试生…

前端工程化08-新的包管理工具pnpm

1、历史原因解读 pnpm这个东西发布的时间是比较早的&#xff0c;但是在最近一两年的时候才开始流行&#xff0c;甚至是可以说非常的盛行&#xff0c;那么这个包到底是个什么东西的&#xff0c;那么我们先说下&#xff0c;原来的包管理工具到底有那些问题&#xff1f;比如说我们…

MySQL自增主键踩坑记录

对于MySQL的自增主键&#xff0c;本文记录、整理下在工作中实际遇到的问题。 下面示例均基于MySQL 8.0 修改列的类型后&#xff0c;自增属性消失 CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL );上面的…

论文学习——一种自适应提升的动态多目标优化进化算法

论文题目&#xff1a;A dynamic multi-objective optimization evolutionary algorithm with adaptive boosting 一种自适应提升的动态多目标优化进化算法&#xff08;Hu Peng a,b,∗, Jianpeng Xiong a, Chen Pi a, Xinyu Zhou c, Zhijian Wu d&#xff09;IEEE Swarm and Ev…