You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Locust部署GKE后Worker连Master失败及webport参数无效问题求助

Locust负载测试部署问题排查

我正在为某个端点搭建Locust负载测试,已完成Dockerfile、run.sh脚本、Locust测试脚本及配置文件的编写,也在GKE上创建了集群并部署了Locust Master与Worker实例,同时暴露了对应端口。但访问locust-web时出现**「Worker unable to connect to the master and invalid args in webport」**错误,请求协助排查解决。


相关配置文件

Dockerfile

FROM python:3.8

# Add the external tasks directory into /tasks
WORKDIR /src

ADD requirements.txt .
RUN pip install --no-cache-dir --upgrade locust==2.10.1

ADD run.sh .
ADD load_test.py .
ADD load_test.conf .

# Expose the required Locust ports
EXPOSE 5557 5558 8089

# Set script to be executable
RUN chmod 755 run.sh

# Start Locust using LOCUS_OPTS environment variable
CMD ["bash", "run.sh"]

run.sh脚本

#!/bin/bash
LOCUST="locust"
LOCUS_OPTS="--config=load_test.conf"
LOCUST_MODE=${LOCUST_MODE:-standalone}

if [[ "$LOCUST_MODE" = "master" ]]; then
    LOCUS_OPTS="$LOCUS_OPTS --master"
elif [[ "$LOCUST_MODE" = "worker" ]]; then
    LOCUS_OPTS="$LOCUS_OPTS --worker --master-host=$LOCUST_MASTER_HOST"
fi

echo "${LOCUST} ${LOCUS_OPTS}"

$LOCUST $LOCUS_OPTS

Locust测试脚本

import json

from locust import HttpUser, constant, task


class CategorizationUser(HttpUser):
    wait_time = constant(1)

    @task
    def predict(self):
        payload = json.dumps(
            {
                "text": "Face and Body Paint washable Rubies Halloween item 91#385"
            }
        )
        _ = self.client.post("/predict", data=payload)

配置文件(load_test.conf)

locustfile = load_test.py
headless = false
users = 1000
spawn-rate = 1
run-time = 5m
host = IP
html = locust_report.html

deployment.yaml

---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: default
  name: locust-master-deployment
  labels:
    name: locust
    role: master
spec:
  replicas: 1
  selector:
    matchLabels:
      name: locust
      role: master
  template:
    metadata:
      labels:
        name: locust
        role: master
    spec:
      containers:
        - name: locust
          image: gcr.io/PROJECT_ID/IMAGE_URI
          imagePullPolicy: Always
          env:
            - name: LOCUST_MODE
              value: master
            - name: LOCUST_LOG_LEVEL
              value: DEBUG
          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

---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: default
  name: locust-worker-deployment
  labels:
    name: locust
    role: worker
spec:
  replicas: 2
  selector:
    matchLabels:
      name: locust
      role: worker
  template:
    metadata:
      labels:
        name: locust
        role: worker
    spec:
      containers:
        - name: locust
          image: gcr.io/PROJECT_ID/IMAGE_URI
          imagePullPolicy: Always
          env:
            - name: LOCUST_MODE
              value: worker
            - name: LOCUST_MASTER
              value: locust-master-service
            - name: LOCUST_LOG_LEVEL
              value: DEBUG

端口暴露命令

kubectl expose pod locust-master-deployment-f9d4c4f59-8q6wk \
    --type NodePort \
    --port 5558 \
    --target-port 5558 \
    --name locust-5558

kubectl expose pod locust-master-deployment-f9d4c4f59-8q6wk \
    --type NodePort \
    --port 5557 \
    --target-port 5557 \
    --name locust-5557

kubectl expose pod locust-master-deployment-f9d4c4f59-8q6wk \
    --type LoadBalancer \
    --port 80 \
    --target-port 8089 \
    --name locust-web

问题排查与修复方案

1. Worker连接Master的环境变量不匹配

run.sh中Worker模式依赖LOCUST_MASTER_HOST环境变量,但Worker Deployment配置里设置的是LOCUST_MASTER,变量名不匹配导致Worker无法获取Master地址。

修复:
修改Worker Deployment的环境变量:

env:
  - name: LOCUST_MODE
    value: worker
  - name: LOCUST_MASTER_HOST  # 修正变量名
    value: locust-master-service
  - name: LOCUST_LOG_LEVEL
    value: DEBUG

2. 缺少Master内部Service

Worker配置中指定的locust-master-service不存在,导致无法通过DNS解析Master实例。

修复:
创建Master的ClusterIP Service(供集群内部Worker访问):

kubectl create service clusterip locust-master-service \
  --tcp=5557:5557 --tcp=5558:5558 --tcp=8089:8089 \
  --selector=name=locust,role=master

3. 配置文件缺失Web端口参数

"invalid args in webport"错误通常是因为配置文件未指定Web端口,或参数冲突。

修复:
在load_test.conf中添加端口配置:

web-port = 8089

4. 优化端口暴露方式

直接暴露单个Pod的端口会导致Pod重建后服务失效,建议改为暴露Deployment对应的Service:

# 暴露Master Web端口为LoadBalancer
kubectl expose deployment locust-master-deployment \
  --type LoadBalancer \
  --port 80 \
  --target-port 8089 \
  --name locust-web

# 暴露Master Worker通信端口(仅当需要外部Worker连接时执行)
kubectl expose deployment locust-master-deployment \
  --type NodePort \
  --port 5557 \
  --target-port 5557 \
  --name locust-5557

kubectl expose deployment locust-master-deployment \
  --type NodePort \
  --port 5558 \
  --target-port 5558 \
  --name locust-5558

内容的提问来源于stack exchange,提问作者S. P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:33:20