使用K8S集群执行分布式负载测试
本教程介绍如何使用Kubernetes部署分布式负载测试框架,该框架使用分布式部署的locust 产生压测流量,对一个部署到 K8S集群的 Web 应用执行负载测试,该 Web 应用公开了 REST 格式的端点,以响应传入的 HTTP POST 请求。
关于分布式负载测试的更多资料请查看:
本文借鉴了官方的框架,在官方基础上做了简化修改,支持在本地搭建的K8S集群上进行分布式负载测试。
1. 测试使用的工作负载实例
下图展示了将客户端请求传送到应用的示例工作负载。
为对该交互进行建模,您可以使用 Locust 这一基于 Python、可跨多个目标路径分发请求的分布式负载测试工具。例如,Locust 可以将请求分发到 /login
和 /metrics
目标路径。工作负载在 Locust 中建模为一组任务。
2. locust分布式负载测试架构
该架构涉及到两个主要组件:
- Locust 容器映像。
- 容器编排和管理机制。
Locust 容器映像包含 Locust 软件,包含用于启动 Locust 服务和执行任务的脚本。为尽可能贴近真实客户端的情况,每个 Locust 任务都进行了加权。例如,每一千个客户端总请求发生一次注册。
Kubernetes提供容器编排和管理功能。使用 Kubernetes,您可以指定为负载测试框架奠定基础的容器节点的数量。此外,您还可以将负载测试工作器组织到 pod 中,并指定希望Kubernetes 持续运行的 pod 数量。
为了部署负载测试任务,请执行以下操作:
- 部署负载测试主节点。
- 部署一组负载测试工作器。您要使用这些负载测试工作器创建大量的流量,以便执行测试。
下图展示了使用示例应用进行负载测试的架构。主 Pod 提供用于操作和监控负载测试的网页界面。工作器 Pod 为接受测试的应用生成 REST 请求流量,并将指标发送到主 Pod。
2.1 关于负载测试主节点
Locust 主节点是执行负载测试任务的入口点。Locust 主节点配置指定了数个元素,包括容器使用的默认端口:
8089
用于网页界面5557
和5558
用于与工作器通信
2.2 关于负载测试工作器
Locust 工作器执行负载测试任务,可以使用单个 Deployment 来创建多个 pod。这些 pod 分布在 Kubernetes 集群中。
下图显示了 Locust 主节点与 Locust 工作器之间的关系。