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

通过Helm Chart在K8s部署Locust@2.12.1遇CrashLoopBackOff求助

问题描述

使用Helm Chart在Kubernetes上部署Locust 2.12.1时,容器进入CrashLoopBackOff状态,错误发生在安装pip依赖阶段。

错误日志

locust-master-5bffc94676-6nd4q locust Installing collected packages: pysha3, pylru, ethereum-utils, ethereum-tester, ethereum-abi-utils, bitarray, toolz, pycryptodome, parsimonious, hexbytes, eth-typing, eth-hash, cytoolz, eth-utils, rlp, eth-keys, eth-abi, web3, eth-rlp, eth-keyfile, eth_account
locust-master-5bffc94676-6nd4q locust   Running setup.py install for pysha3: started
locust-master-5bffc94676-6nd4q locust   Running setup.py install for pysha3: finished with status 'error'
locust-master-5bffc94676-6nd4q locust   error: subprocess-exited-with-error
locust-master-5bffc94676-6nd4q locust
locust-master-5bffc94676-6nd4q locust   × Running setup.py install for pysha3 did not run successfully.
locust-master-5bffc94676-6nd4q locust   │ exit code: 1
locust-master-5bffc94676-6nd4q locust   ╰─> [15 lines of output]
locust-master-5bffc94676-6nd4q locust       running install
locust-master-5bffc94676-6nd4q locust       /opt/venv/lib/python3.10/site-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
locust-master-5bffc94676-6nd4q locust         warnings.warn(
locust-master-5bffc94676-6nd4q locust       running build
locust-master-5bffc94676-6nd4q locust       running build_py
locust-master-5bffc94676-6nd4q locust       creating build
locust-master-5bffc94676-6nd4q locust       creating build/lib.linux-x86_64-cpython-310
locust-master-5bffc94676-6nd4q locust       copying sha3.py -> build/lib.linux-x86_64-cpython-310
locust-master-5bffc94676-6nd4q locust       running build_ext
locust-master-5bffc94676-6nd4q locust       building '_pysha3' extension
locust-master-5bffc94676-6nd4q locust       creating build/temp.linux-x86_64-cpython-310
locust-master-5bffc94676-6nd4q locust       creating build/temp.linux-x86_64-cpython-310/Modules
locust-master-5bffc94676-6nd4q locust       creating build/temp.linux-x86_64-cpython-310/Modules/_sha3
locust-master-5bffc94676-6nd4q locust       gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DPY_WITH_KECCAK=1 -I/opt/venv/include -I/usr/local/include/python3.10 -c Modules/_sha3/sha3module.c -o build/temp.linux-x86_64-cpython-310/Modules/_sha3/sha3module.o
locust-master-5bffc94676-6nd4q locust       error: command 'gcc' failed: No such file or directory
locust-master-5bffc94676-6nd4q locust       [end of output]
locust-master-5bffc94676-6nd4q locust
locust-master-5bffc94676-6nd4q locust   note: This error originates from a subprocess, and is likely not a problem with pip.
locust-master-5bffc94676-6nd4q locust error: legacy-install-failure

使用的values.yaml配置

image:
  repository: locustio/locust
  tag: 2.12.1
  pullPolicy: IfNotPresent

loadtest:
  locust_host: http://quorum-node-dev-tx-1.svc.cluster.local
  locust_locustfile_configmap: locustfile
  pip_packages:
  - eth_account
  - web3

master:
  resources:
    limits:
      cpu: 2000m
      memory: 1024Mi
    requests:
      cpu: 1000m
      memory: 1024Mi
  logLevel: INFO

worker:
  replicas: 1
  resources:
    limits:
      cpu: 500m
      memory: 256Mi
    requests:
      cpu: 500m
      memory: 256Mi
  logLevel: INFO
解决办法

核心问题是容器内缺少gcc编译工具,导致pysha3依赖编译C扩展失败,以下三种方案可解决:

方案一:切换到带编译工具的官方镜像

官方默认locustio/locust镜像为轻量版本,未预装编译工具。改用带-debian后缀的镜像,这类镜像基于Debian系统,已包含gcc等编译套件。修改values.yaml的image配置:

image:
  repository: locustio/locust
  tag: 2.12.1-debian
  pullPolicy: IfNotPresent

方案二:自定义镜像提前安装依赖

自行构建镜像,预先安装编译工具和所需pip包:

  1. 创建Dockerfile:
FROM locustio/locust:2.12.1
USER root
RUN apk add --no-cache gcc musl-dev
RUN pip install eth_account web3
USER locust
  1. 构建并推送镜像至你的私有仓库,再修改values.yaml的image指向该自定义镜像。

方案三:通过InitContainer注入编译工具

利用Helm的InitContainer功能,在主容器启动前安装gcc。修改values.yaml,为master和worker添加以下配置:

master:
  # 保留原有配置,新增以下内容
  initContainers:
    - name: install-build-deps
      image: alpine:latest
      command: ['sh', '-c', 'apk add --no-cache gcc musl-dev']
      volumeMounts:
        - name: shared-libs
          mountPath: /usr/lib
        - name: shared-include
          mountPath: /usr/include
  volumes:
    - name: shared-libs
      emptyDir: {}
    - name: shared-include
      emptyDir: {}
  volumeMounts:
    - name: shared-libs
      mountPath: /usr/lib
    - name: shared-include
      mountPath: /usr/include

worker:
  # 保留原有配置,新增以下内容
  initContainers:
    - name: install-build-deps
      image: alpine:latest
      command: ['sh', '-c', 'apk add --no-cache gcc musl-dev']
      volumeMounts:
        - name: shared-libs
          mountPath: /usr/lib
        - name: shared-include
          mountPath: /usr/include
  volumes:
    - name: shared-libs
      emptyDir: {}
    - name: shared-include
      emptyDir: {}
  volumeMounts:
    - name: shared-libs
      mountPath: /usr/lib
    - name: shared-include
      mountPath: /usr/include

此方案通过共享空目录将编译工具传递给主容器,需注意Alpine与Locust基础镜像的兼容性。

内容的提问来源于stack exchange,提问作者souki aoba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:41:55