文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

kubernetes中如何实现分布式负载测试Locust

2023-06-04 17:37

关注

这篇文章主要介绍了kubernetes中如何实现分布式负载测试Locust,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一: 前言

  本文介绍如何在Kubernetes集群中对一个应用进行分布式测试,sample-webapp是一个简单的web测试应用。测试工具使用Locust.

二:Locust 介绍

  Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具.

在Locust测试框架中,测试场景是采用纯Python脚本进行描述的。对于最常见的HTTP(S)协议的系统,Locust采用Python的requests库作为客户端,使得脚本编写大大简化,富有表现力的同时且极具美感。而对于其它协议类型的系统,Locust也提供了接口,只要我们能采用Python编写对应的请求客户端,就能方便地采用Locust实现压力测试。从这个角度来说,Locust可以用于压测任意类型的系统。

  在模拟有效并发方面,Locust的优势在于其摒弃了进程和线程,完全基于事件驱动,使用gevent提供的非阻塞IO和coroutine来实现网络层的并发请求,因此即使是单台压力机也能产生数千并发请求数;再加上对分布式运行的支持,理论上来说,Locust能在使用较少压力机的前提下支持极高并发数的测试。
Locust脚本示例:

  1. from locust import HttpLocust, TaskSet, task

  2. class WebsiteTasks(TaskSet):

  3.     def on_start(self):

  4.         self.client.post("/login", {

  5.             "username": "test",

  6.             "password": "123456"

  7.         })

  8.     @task(2)

  9.     def index(self):

  10.         self.client.get("/")

  11.     @task(1)

  12.     def about(self):

  13.         self.client.get("/about/")

  14. class WebsiteUser(HttpLocust):

  15.     task_set = WebsiteTasks

  16.     host = "http://debugtalk.com"

  17.     min_wait = 1000

  18.     max_wait = 5000

在这个示例中,定义了针对http://debugtalk.com网站的测试场景:先模拟用户登录系统,然后随机地访问首页(/)和关于页面(/about/),请求比例为2:1;并且,在测试过程中,两次请求的间隔时间为1~5秒间的随机值。

三:部署测试WEB应用

sample-webapp-controller.yaml

  1. kind: ReplicationController

  2. apiVersion: v1

  3. metadata:

  4.   name: sample-webapp

  5.   namespace: kube-system

  6.   labels:

  7.     name: sample-webapp

  8. spec:

  9.   selector:

  10.     name: sample-webapp

  11.   replicas: 1

  12.   template:

  13.     metadata:

  14.       labels:

  15.         name: sample-webapp

  16.     spec:

  17.       containers:

  18.       - name: sample-webapp

  19.         image: index.tenxcloud.com/jimmy/k8s-sample-webapp:latest

  20.         ports:

  21.         - containerPort: 8000

sample-webapp-service.yaml

  1. kind: Service

  2. apiVersion: v1

  3. metadata:

  4.   name: sample-webapp

  5.   namespace: kube-system

  6.   labels:

  7.     name: sample-webapp

  8. spec:

  9.   ports:

  10.     - port: 8000

  11.   selector:

  12.     name: sample-webapp

kubectl create -f sample-webapp-controller.yaml
kubectl create -f sample-webapp-service.yaml

四:部署Locust

locust-master-controller.yaml

  1. kind: ReplicationController

  2. apiVersion: v1

  3. metadata:

  4.   name: locust-master

  5.   namespace: kube-system

  6.   labels:

  7.     name: locust

  8.     role: master

  9. spec:

  10.   replicas: 1

  11.   selector:

  12.     name: locust

  13.     role: master

  14.   template:

  15.     metadata:

  16.       labels:

  17.         name: locust

  18.         role: master

  19.     spec:

  20.       containers:

  21.         - name: locust

  22.           image: index.tenxcloud.com/jimmy/locust-tasks:latest

  23.           env:

  24.             - name: LOCUST_MODE

  25.               value: master

  26.             - name: TARGET_HOST

  27.               value: http://sample-webapp:8000

  28.           ports:

  29.             - name: loc-master-web

  30.               containerPort: 8089

  31.               protocol: TCP

  32.             - name: loc-master-p1

  33.               containerPort: 5557

  34.               protocol: TCP

  35.             - name: loc-master-p2

  36.               containerPort: 5558

  37.               protocol: TCP

locust-master-service.yaml

  1. kind: Service

  2. apiVersion: v1

  3. metadata:

  4.   name: locust-master

  5.   namespace: kube-system

  6.   labels:

  7.     name: locust

  8.     role: master

  9. spec:

  10.   ports:

  11.     - port: 8089

  12.       targetPort: loc-master-web

  13.       protocol: TCP

  14.       name: loc-master-web

  15.     - port: 5557

  16.       targetPort: loc-master-p1

  17.       protocol: TCP

  18.       name: loc-master-p1

  19.     - port: 5558

  20.       targetPort: loc-master-p2

  21.       protocol: TCP

  22.       name: loc-master-p2

  23.   selector:

  24.     name: locust

  25.     role: master

locust-worker-controller.yaml

  1. kind: ReplicationController

  2. apiVersion: v1

  3. metadata:

  4.   name: locust-worker

  5.   namespace: kube-system

  6.   labels:

  7.     name: locust

  8.     role: worker

  9. spec:

  10.   replicas: 1

  11.   selector:

  12.     name: locust

  13.     role: worker

  14.   template:

  15.     metadata:

  16.       labels:

  17.         name: locust

  18.         role: worker

  19.     spec:

  20.       containers:

  21.         - name: locust

  22.           image: index.tenxcloud.com/jimmy/locust-tasks:latest

  23.           env:

  24.             - name: LOCUST_MODE

  25.               value: worker

  26.             - name: LOCUST_MASTER

  27.               value: locust-master

  28.             - name: TARGET_HOST

  29.               value: http://sample-webapp:8000

kubectl create -f locust-master-controller.yaml
kubectl create -f locust-master-service.yaml
kubectl create -f locust-worker-controller.yaml

五:配置Traefik

  1. - host: locust.donkey

  2.     http:

  3.       paths:

  4.       - path: /

  5.         backend:

  6.           serviceName: locust-master

  7.           servicePort: 8089

kubectl replace -f ingress.yaml

六:执行测试
访问http://locust.donkey/  设置测试参数,进行测试
kubernetes中如何实现分布式负载测试Locust

感谢你能够认真阅读完这篇文章,希望小编分享的“kubernetes中如何实现分布式负载测试Locust”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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