文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用 Locust 进行 Kubernetes 分布式性能测试

2024-12-13 22:06

关注

介绍

在本教程中,我们将会介绍如何集成和使用 Locust 来测试在 Kubernetes 集群中运行的微服务,以下是将会涵盖的内容:

要求

在继续之前,请确保您的环境满足要求;首先安装和部署 Docker、Kubernetes 和 Git。

准备 Kubernetes 集群:

在开始讲解如何使用 Locust 测试在 Kubernetes 集群上运行的微服务之前,我们需要准备和部署我们将在集群上测试的服务。这些服务如下图所示。该微服务应用包括以下组件:

要在本地部署上述设置,请按照以下步骤操作:

`$> git clone git@github.com:eon01/kubernetes-locust-example.git
$> cd locust/guestbook
$> kubectl apply -f`

上述kubectl应用的YAML 文件中包含的服务和deployment:

GuestBook将在以下 URL 上提供访问入口:http://127.0.0.1:30625,您可以使用以下命令验证这一点:

$>kubectl get all

Locust:简介

性能和负载测试是软件生命周期中最热门的话题之一。这些测试可以为我们提供有关软件应用程序和基础设施设置的性能和健壮性所需的指标和KPI。Locust是可以用来执行用户行为负载测试的工具之一。它依赖流行的python编程语言来定义负载测试场景。这意味着可以执行一些条件行为或进行一些计算。Locust还支持在多个工作节点上运行分布式负载测试。该工具带有一个web界面,用于配置和运行有多种配置的预定义测试。在这篇博文中,我们将介绍使用Locust在分布式模型中测试Guestbook应用程序所需的步骤。为了实现这一目标,我们需要完成以下的内容。

Locust:测试用例

我们需要用 Python 编写一些测试用例来测试 GuestBook 应用程序。应用程序界面简单明了,只有一个文本框和一个按钮,如下图所示。

为了简单起见,我们将实现两个用例。

下面的 locust 文件可用于测试这些用例。

from locust import HttpUser, task, between
class MyUser(HttpUser):
wait_time = between(5, 15)
@task
def index(self):
self.client.get("/")
@task
def update(self):
self.client.get("/guestbook.php?cmd=set&key=messages&value=,JohnDietish,")

Locust:Docker 镜像

下一步是使用已定义的用例为 Locust 主从workers构建 Docker 镜像。这些 Docker 镜像稍后将用于在集群上部署 Locust 组件。

以下就是 Locust Docker 镜像文件结构。

我们的 Docker 镜像必须至少包含以下文件:

下面是这个文件的样子:

要在本地构建 Docker 镜像,请按照以下步骤操作:

$> git clone git@github.com:eon01/kubernetes-locust-example
$> cd locust/docker
$> docker build -t locust:guestbook

Locust:以分布式模式部署

现在我们为测试用例创建了 Docker 镜像,是时候开始部署分布式 Locust 集群了,我们将使用 Kubernetes。请注意,您可以在没有 Kubernetes 的情况下将 Locust 部署在单个 VM 上,但如果您需要分布式测试,Kubernetes 集群是使用的理想选择。

为了完成这个任务,我们需要创建以下 Kubernetes 资源。

Locust master deployment
Locust master service.
Locust worker deployment.

以上所有资源都是标准的 Kubernetes 对象。定义这些对象的最关键因素是为每个对象提供所需环境变量的正确值并开放正确的端口。

下面是主部署的定义文件。

如定义文件所示,将环境变量LOCUST_MODE和TARGET_HOST传递给容器非常重要;否则,容器将不会配置为作为主 Locust 实例运行。

apiVersion: apps/v1
kind: Deployment
metadata:
name: locust-master
labels:
name: locust-master
spec:
replicas: 1
selector:
matchLabels:
app: locust-master
template:
metadata:
labels:
app: locust-master
spec:
containers:
- name: locust-master
image: locust:guestbook
env:
- name: LOCUST_MODE
value: master
- name: TARGET_HOST
value: http://frontend-internal
ports:
- name: loc-master-web
containerPort: 8089
protocol: TCP
- name: loc-master-p1
containerPort: 5557
protocol: TCP
- name: loc-master-p2
containerPort: 5558
protocol: TCP

另一方面,worker 定义文件需要为 LOCUST_MODE 传递不同的值,并且它必须传递另一个名为 LOCUST_MASTER 的变量来建立 worker(s) 和 master 之间的通信。下面是部署 Locust 工作池的定义文件:

apiVersion: apps/v1
kind: Deployment
metadata:
name: locust-worker
labels:
name: locust-worker
spec:
replicas: 4
selector:
matchLabels:
app: locust-worker
template:
metadata:
labels:
app: locust-worker
spec:
containers:
- name: locust-worker
image: locust:guestbook
env:
- name: LOCUST_MODE
value: worker
- name: LOCUST_MASTER_URL
value: locust-master
- name: TARGET_HOST
value: http://frontend-internal

最后,需要服务对象来公开要通过 Web 界面和工作容器访问的主组件。下面是 Locust 服务的定义文件。

kind: ServiceapiVersion: v1
metadata:
name: locust-master
labels:
app: locust-master
spec:
ports:
- port: 5557
targetPort: loc-master-p1
protocol: TCP
name: loc-master-p1
- port: 5558
targetPort: loc-master-p2
protocol: TCP
name: loc-master-p2
selector:
app: locust-master
---
kind: Service
apiVersion: v1
metadata:
name: locust-master-ui
labels:
app: locust-master
spec:
ports:
- port: 8089
targetPort: loc-master-web
protocol: TCP
name: loc-master-web
nodePort: 30627
selector:
app: locust-master
type: NodePort

要在本地部署 Locust pod,请执行以下步骤:

$> git clone git@github.com:eon01/kubernetes-locust-example
$> cd locust/k8s
$> kubectl apply -f .

执行上述命令后,将创建 4 个 Locust 工作节点、一个主节点(以及主 Pod 的服务)。

Locust 界面可通过以下 URL 访问:http://localhost:30627

您可以使用以下命令验证资源的创建:

$> kubectl get all

Locust:运行测试

要开始运行测试用例并测试在 Kubernetes 中运行的 Guestbook 应用程序,我们需要登录到Locust运行界面http://localhost:30627。下图显示了 Locust 登录界面。

前端页面询问将用于执行负载测试的用户数量和用户的生成率。该界面还显示连接到 Locust 安装的工作节点数量。

填写测试内容并点击提交按钮后,您将被重定向到统计页面,Locust 将开始从 Docker 镜像执行定义的测试。

下图显示了 Locust 的统计信息页面,我们可以在其中看到每个已定义用例的统计信息。

如果需要调整负载测试配置,例如增加用户数,您可以点击页面顶部的编辑链接,屏幕上会出现下面的表格输入新的值。

失败和错误也反映在统计页面中;如下图所示,统计页面显示每个测试用例的失败请求计数和速率。

Locust 还为我们提供了另一个视图来显示确切的故障错误,同时可以验证故障或错误的根本原因,如下图所示。

最后,Locust 还提供了其他视图和页面,例如通过图表说明负载测试进度的详情页面、显示有关 Locust worker信息的worker页面以及我们可以下载负载测试数据的下载数据页面。

来源:新钛云服内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯