共計 3546 個字符,預計需要花費 9 分鐘才能閱讀完成。
這篇文章主要介紹了 kubernetes 中如何實現分布式負載測試 Locust,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
一:前言
本文介紹如何在 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 腳本示例:
from locust import HttpLocust, TaskSet, task
class WebsiteTasks(TaskSet):
def on_start(self):
self.client.post(/login , {
username : test ,
password : 123456
})
@task(2)
def index(self):
self.client.get(/)
@task(1)
def about(self):
self.client.get(/about/)
class WebsiteUser(HttpLocust):
task_set = WebsiteTasks
host = http://debugtalk.com
min_wait = 1000
max_wait = 5000
在這個示例中,定義了針對 http://debugtalk.com 網站的測試場景:先模擬用戶登錄系統,然后隨機地訪問首頁(/)和關于頁面(/about/),請求比例為 2:1;并且,在測試過程中,兩次請求的間隔時間為 1~5 秒間的隨機值。
三:部署測試 WEB 應用
sample-webapp-controller.yaml
kind: ReplicationController
apiVersion: v1
metadata:
name: sample-webapp
namespace: kube-system
labels:
name: sample-webapp
spec:
selector:
name: sample-webapp
replicas: 1
template:
metadata:
labels:
name: sample-webapp
spec:
containers:
– name: sample-webapp
image: index.tenxcloud.com/jimmy/k8s-sample-webapp:latest
ports:
– containerPort: 8000
sample-webapp-service.yaml
kind: Service
apiVersion: v1
metadata:
name: sample-webapp
namespace: kube-system
labels:
name: sample-webapp
spec:
ports:
– port: 8000
selector:
name: sample-webapp
kubectl create -f sample-webapp-controller.yaml
kubectl create -f sample-webapp-service.yaml
四:部署 Locust
locust-master-controller.yaml
kind: ReplicationController
apiVersion: v1
metadata:
name: locust-master
namespace: kube-system
labels:
name: locust
role: master
spec:
replicas: 1
selector:
name: locust
role: master
template:
metadata:
labels:
name: locust
role: master
spec:
containers:
– name: locust
image: index.tenxcloud.com/jimmy/locust-tasks:latest
env:
– name: LOCUST_MODE
value: master
– name: TARGET_HOST
value: http://sample-webapp:8000
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
locust-master-service.yaml
kind: Service
apiVersion: v1
metadata:
name: locust-master
namespace: kube-system
labels:
name: locust
role: master
spec:
ports:
– port: 8089
targetPort: loc-master-web
protocol: TCP
name: loc-master-web
– 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:
name: locust
role: master
locust-worker-controller.yaml
kind: ReplicationController
apiVersion: v1
metadata:
name: locust-worker
namespace: kube-system
labels:
name: locust
role: worker
spec:
replicas: 1
selector:
name: locust
role: worker
template:
metadata:
labels:
name: locust
role: worker
spec:
containers:
– name: locust
image: index.tenxcloud.com/jimmy/locust-tasks:latest
env:
– name: LOCUST_MODE
value: worker
– name: LOCUST_MASTER
value: locust-master
– name: TARGET_HOST
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
– host: locust.donkey
http:
paths:
– path: /
backend:
serviceName: locust-master
servicePort: 8089
kubectl replace -f ingress.yaml
六:執行測試
訪問 http://locust.donkey/ 設置測試參數,進行測試
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“kubernetes 中如何實現分布式負載測試 Locust”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!