自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 Locust 進(jìn)行 Kubernetes 分布式性能測試

開發(fā) 架構(gòu)
在本教程中,我們將會(huì)介紹如何集成和使用 Locust 來測試在 Kubernetes 集群中運(yùn)行的微服務(wù)。

介紹

在本教程中,我們將會(huì)介紹如何集成和使用 Locust 來測試在 Kubernetes 集群中運(yùn)行的微服務(wù),以下是將會(huì)涵蓋的內(nèi)容:

  • 如何部署一個(gè)Guestbook應(yīng)用案例。
  • 一些 Locust 測試用例(我們將使用Guestbook應(yīng)用進(jìn)行測試)。
  • 為 Locust master 和 worker 構(gòu)建 Docker 鏡像。
  • 以分布式模式部署 Locust 并執(zhí)行負(fù)載測試。

要求

在繼續(xù)之前,請(qǐng)確保您的環(huán)境滿足要求;首先安裝和部署 Docker、Kubernetes 和 Git。

準(zhǔn)備 Kubernetes 集群:

在開始講解如何使用 Locust 測試在 Kubernetes 集群上運(yùn)行的微服務(wù)之前,我們需要準(zhǔn)備和部署我們將在集群上測試的服務(wù)。這些服務(wù)如下圖所示。該微服務(wù)應(yīng)用包括以下組件:

  • Redis 主從集群(用于讀取請(qǐng)求緩存)。
  • 前端應(yīng)用程序。該應(yīng)用程序被配置為使用Redis主節(jié)點(diǎn)和從節(jié)點(diǎn)寫入和讀取請(qǐng)求。

圖片

要在本地部署上述設(shè)置,請(qǐng)按照以下步驟操作:

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

上述kubectl應(yīng)用的YAML 文件中包含的服務(wù)和deployment:

  • Redis的deployment和service。
  • 前端的deployment和service。

GuestBook將在以下 URL 上提供訪問入口:http://127.0.0.1:30625,您可以使用以下命令驗(yàn)證這一點(diǎn):

$>kubectl get all

Locust:簡介

性能和負(fù)載測試是軟件生命周期中最熱門的話題之一。這些測試可以為我們提供有關(guān)軟件應(yīng)用程序和基礎(chǔ)設(shè)施設(shè)置的性能和健壯性所需的指標(biāo)和KPI。Locust是可以用來執(zhí)行用戶行為負(fù)載測試的工具之一。它依賴流行的python編程語言來定義負(fù)載測試場景。這意味著可以執(zhí)行一些條件行為或進(jìn)行一些計(jì)算。Locust還支持在多個(gè)工作節(jié)點(diǎn)上運(yùn)行分布式負(fù)載測試。該工具帶有一個(gè)web界面,用于配置和運(yùn)行有多種配置的預(yù)定義測試。在這篇博文中,我們將介紹使用Locust在分布式模型中測試Guestbook應(yīng)用程序所需的步驟。為了實(shí)現(xiàn)這一目標(biāo),我們需要完成以下的內(nèi)容。

  • 定義測試用例(locust 文件)。
  • Locust 的 Docker 鏡像。
  • 部署主從Locust workers。
  • 允許 Locust worker 和 master 之間的通信。

Locust:測試用例

我們需要用 Python 編寫一些測試用例來測試 GuestBook 應(yīng)用程序。應(yīng)用程序界面簡單明了,只有一個(gè)文本框和一個(gè)按鈕,如下圖所示。

圖片?

為了簡單起見,我們將實(shí)現(xiàn)兩個(gè)用例。

  • 在前端頁面打開GeustBook。
  • 將靜態(tài)guest姓名添加到GeustBook。

下面的 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構(gòu)建 Docker 鏡像。這些 Docker 鏡像稍后將用于在集群上部署 Locust 組件。

以下就是 Locust Docker 鏡像文件結(jié)構(gòu)。

圖片

我們的 Docker 鏡像必須至少包含以下文件:

  • Dockerfile:此文件將包含構(gòu)建 Docker 鏡像所需的說明。
  • requirements.txt:此文件包含運(yùn)行 Locust 所需的 Python 庫列表。
  • test-case.py:這是用 Python 編寫的測試用例文件。
  • run.sh:一個(gè) shell 腳本,作為 Docker 的入口點(diǎn)來支持 master 和 slave worker。

下面是這個(gè)文件的樣子:

圖片

要在本地構(gòu)建 Docker 鏡像,請(qǐng)按照以下步驟操作:

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

Locust:以分布式模式部署

現(xiàn)在我們?yōu)闇y試用例創(chuàng)建了 Docker 鏡像,是時(shí)候開始部署分布式 Locust 集群了,我們將使用 Kubernetes。請(qǐng)注意,您可以在沒有 Kubernetes 的情況下將 Locust 部署在單個(gè) VM 上,但如果您需要分布式測試,Kubernetes 集群是使用的理想選擇。

為了完成這個(gè)任務(wù),我們需要?jiǎng)?chuàng)建以下 Kubernetes 資源。

Locust master deployment
Locust master service.
Locust worker deployment.

以上所有資源都是標(biāo)準(zhǔn)的 Kubernetes 對(duì)象。定義這些對(duì)象的最關(guān)鍵因素是為每個(gè)對(duì)象提供所需環(huán)境變量的正確值并開放正確的端口。

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

如定義文件所示,將環(huán)境變量LOCUST_MODE和TARGET_HOST傳遞給容器非常重要;否則,容器將不會(huì)配置為作為主 Locust 實(shí)例運(yùn)行。

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 傳遞不同的值,并且它必須傳遞另一個(gè)名為 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

最后,需要服務(wù)對(duì)象來公開要通過 Web 界面和工作容器訪問的主組件。下面是 Locust 服務(wù)的定義文件。

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,請(qǐng)執(zhí)行以下步驟:

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

執(zhí)行上述命令后,將創(chuàng)建 4 個(gè) Locust 工作節(jié)點(diǎn)、一個(gè)主節(jié)點(diǎn)(以及主 Pod 的服務(wù))。

Locust 界面可通過以下 URL 訪問:http://localhost:30627

您可以使用以下命令驗(yàn)證資源的創(chuàng)建:

$> kubectl get all

Locust:運(yùn)行測試

要開始運(yùn)行測試用例并測試在 Kubernetes 中運(yùn)行的 Guestbook 應(yīng)用程序,我們需要登錄到Locust運(yùn)行界面http://localhost:30627。下圖顯示了 Locust 登錄界面。

圖片

前端頁面詢問將用于執(zhí)行負(fù)載測試的用戶數(shù)量和用戶的生成率。該界面還顯示連接到 Locust 安裝的工作節(jié)點(diǎn)數(shù)量。

填寫測試內(nèi)容并點(diǎn)擊提交按鈕后,您將被重定向到統(tǒng)計(jì)頁面,Locust 將開始從 Docker 鏡像執(zhí)行定義的測試。

下圖顯示了 Locust 的統(tǒng)計(jì)信息頁面,我們可以在其中看到每個(gè)已定義用例的統(tǒng)計(jì)信息。

圖片

如果需要調(diào)整負(fù)載測試配置,例如增加用戶數(shù),您可以點(diǎn)擊頁面頂部的編輯鏈接,屏幕上會(huì)出現(xiàn)下面的表格輸入新的值。

圖片

失敗和錯(cuò)誤也反映在統(tǒng)計(jì)頁面中;如下圖所示,統(tǒng)計(jì)頁面顯示每個(gè)測試用例的失敗請(qǐng)求計(jì)數(shù)和速率。

圖片

Locust 還為我們提供了另一個(gè)視圖來顯示確切的故障錯(cuò)誤,同時(shí)可以驗(yàn)證故障或錯(cuò)誤的根本原因,如下圖所示。

圖片

最后,Locust 還提供了其他視圖和頁面,例如通過圖表說明負(fù)載測試進(jìn)度的詳情頁面、顯示有關(guān) Locust worker信息的worker頁面以及我們可以下載負(fù)載測試數(shù)據(jù)的下載數(shù)據(jù)頁面。

責(zé)任編輯:姜華 來源: 新鈦云服
相關(guān)推薦

2025-01-27 11:52:23

2015-08-04 15:47:39

2021-03-23 22:43:09

Grafana Tem分布式跟蹤開源

2013-12-27 10:56:42

分布式對(duì)象存儲(chǔ)Sheepdog性能測試

2014-02-19 11:37:57

分布式對(duì)象存儲(chǔ)Sheepdog

2022-03-24 14:11:25

KubernetesCitusPostgreSQL

2012-05-21 16:28:29

LinuxHadoop

2023-11-01 18:02:33

RayPython分布式

2011-04-18 14:43:23

分布式測試分布式測試

2019-10-28 10:10:01

技術(shù)研發(fā)分布式

2010-06-03 18:54:57

Hadoop

2024-01-01 22:35:26

kubernetesLease分布式選主

2014-12-11 09:56:33

DockerKubernetesGoogle

2021-06-17 14:29:39

Linkerd 分布式跟蹤Linkerd 2.1

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2023-05-29 14:07:00

Zuul網(wǎng)關(guān)系統(tǒng)

2017-09-01 05:35:58

分布式計(jì)算存儲(chǔ)

2019-06-19 15:40:06

分布式鎖RedisJava

2021-08-17 00:24:38

塊存儲(chǔ)云原生分布式

2023-11-14 08:36:15

Celery工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)