
【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载本指南以 stable/locust 图表为核心讲解如何在 Kubernetes 集群中用 Helm 一键部署 Locust 分布式压测环境Master/Worker 架构涵盖安装命令、全部可配置参数、自定义压测脚本注入方案以及通过 Web UI 与命令行启动、监控、停止 swarm 的完整实操流程并深入解读模板源码中的 ConfigMap 生成与环境变量注入机制。读完本文你将能够独立在集群中搭建一套可横向扩容的 Locust 压测集群并将自己的任务脚本无缝接入。一、Chart 概览与分布式架构stable/locust 是 Helm 官方 Charts 仓库中针对 Locust 的模板化部署方案用于在 Kubernetes 上做分布式负载测试。Locust 本身基于 Python采用一主多从模型Master负责 Web UI、任务下发与结果聚合Worker负责实际产生并发请求。该 Chart 正是围绕这一模型封装了完整的 Kubernetes 资源将tasks/目录下的所有文件转换为一个ConfigMap由 templates/worker-cm.yaml 生成若指定了已有的 ConfigMap则直接使用它不再由 Chart 自行构建通过worker.config.configmapName控制创建 1 个Master Deploymenttemplates/master-deploy.yaml与 N 个Worker Deploymenttemplates/worker-deploy.yaml并挂载目标主机地址target-host与任务脚本locust-script。从模板可以清晰看到 Master 与 Worker 的分工详见下文源码级实现剖析Master Pod 固定 1 个副本replicas: 1对外暴露 8089Web UI与 5557/5558Master 与 Worker 间的通信端口Worker 副本数默认为 2通过LOCUST_MASTER环境变量自动指向 Master 的 Service 名称。⚠️注意该 Chart 已在 2020 年 11 月随 Helm Charts 仓库归档而标记为deprecated已弃用、不再维护Chart.yaml 中deprecated: true、appVersion: 0.9.0。本文内容以仓库当前实际状态为准仅供学习参考或作为自行维护的基线。二、前置要求Kubernetes 集群可运行 kubectl 与 helmHelm v2.1.2 及以上版本原 README 声明其依赖并测试于此版本注意 v2 语法如helm install --name、helm install -n在 Helm v3 中已不适用安装时请根据本机 Helm 版本调整命令参数。三、快速安装以 release 名称locust-nymph在默认命名空间安装并通过--set指定压测目标主机helm install -n locust-nymph --set master.config.target-hosthttp://site.example.com stable/locust也可以先编写values.yaml文件再通过-f参数传入自定义配置$ helm install --name my-release -f values.yaml stable/locust安装完成后Chart 会根据service.type自动输出访问地址详见 templates/NOTES.txtNodePort 模式默认通过kubectl get svc查询 NodePort 与节点 IP得到LOCUST_URLLoadBalancer 模式等待负载均衡器 IP 就绪后访问http://$SERVICE_IP:8089/ClusterIP 模式借助kubectl port-forward将本地端口映射到 Master Pod访问http://127.0.0.1:8089。四、核心参数详解Chart 的默认值完整记录在 stable/locust/values.yaml 中结合模板源码可整理的参数如下下表完整继承自原 README参数描述默认值NameLocust master 名称locustimage.repositoryLocust 容器镜像名greenbirdit/locustimage.tagLocust 容器镜像标签0.9.0image.pullSecrets拉取私有镜像所需的 registry secretNoneservice.type暴露 master 的 k8s Service 类型NodePortservice.nodePort集群暴露 master 的端口0service.annotations自定义 Service annotationsKV{}service.extraLabels附加的 Service labelsKV{}extraVolumes附加 Volume 列表[]extraVolumeMounts附加 VolumeMount 列表[]extraEnvs附加环境变量列表[]master.config.target-hostLocust 压测目标主机http://site.example.commaster.nodeSelectorMaster 的节点选择器{}master.tolerationsMaster 的容忍度[]worker.config.locust-script要运行的 Locust 脚本/locust-tasks/tasks.pyworker.config.configmapName挂载 Locust 脚本的 ConfigMap 名称空由 Chart 从 tasks 文件夹生成worker.replicaCountWorker 副本数2worker.nodeSelectorWorker 的节点选择器{}worker.tolerationsWorker 的容忍度[]worker.affinitiesWorker 的亲和性规则{}参数补充说明来自 values.yaml 与模板源码镜像与拉取策略image.pullPolicy默认为IfNotPresent见 values.yaml若使用私有镜像仓库可配置image.pullSecrets模板会相应生成imagePullSecrets段见 master-deploy.yaml。Service 端口service.externalPort/service.internalPort默认均为8089对应 Web UIMaster 与 Worker 的内部通信端口固定为5557p1与5558p2在 master-deploy.yaml 与 master-svc.yaml 中成对出现无需也不能通过 values 修改。资源限制values.yaml 中 Master 与 Worker 的resources.limits/resources.requests默认均为cpu: 100m、memory: 128Mi可直接在 values 中覆盖实际压测时建议根据单机并发能力调大尤其是 Worker 的 CPU 配额。调度策略master/worker分别支持nodeSelector、tolerationsWorker 额外支持affinityvalues.yaml 中预置了podAntiAffinity示例可将 Worker 打散到不同节点避免单点物理资源争抢。扩展能力extraVolumes/extraVolumeMounts/extraEnvs会同时注入 Master 与 Worker 的 Pod 定义通过toYaml渲染可用来挂载 Secret、附加 ConfigMap 或注入自定义环境变量values.yaml 中附有对应的注释示例。指定参数有两种方式--set keyvalue[,keyvalue]或使用-f values.yaml传入 YAML 文件。五、将你自己的 Locust 脚本注入集群方案一将脚本放入tasks/目录fork 方式Locust 分布式压测的灵魂是任务脚本tasks.py。最直接的方式是 fork 该 Chart把脚本放进 stable/locust/tasks/ 文件夹。安装时Chart 会通过{{ (.Files.Glob tasks/*).AsConfig }}把该目录下所有文件的内容转成 ConfigMap 的data字段见 templates/worker-cm.yaml并以 Volume 形式挂载到 Master 与 Worker Pod 的/locust-tasks/目录。仓库自带的示例脚本 stable/locust/tasks/tasks.py 是一个典型的 Locust 压测任务from locust import HttpLocust, TaskSet, task class ElbTasks(TaskSet): task def status(self): self.client.get(/status) class ElbWarmer(HttpLocust): task_set ElbTasks min_wait 1000 max_wait 3000它定义了一个TaskSet每个虚拟用户会持续请求目标服务的/status接口并设置了 13 秒的随机等待时间。你可以仿照它编写自己的业务脚本支持 Locust 0.9.x 的HttpLocust/TaskSet/task接口与该镜像 tag 对应。方案二使用已有的 ConfigMap不 fork Chart如果你不想 fork Chart可以先把自己开发的脚本打包进一个 ConfigMap然后在values.yaml中通过worker.config.configmapName指定其名称该参数默认留空见 values.yaml。此时 templates/worker-cm.yaml 会因{{ if not .Values.worker.config.configmapName }}条件判断而跳过 ConfigMap 创建改由模板 templates/_helpers.tpl 中的locust.worker-configmap定义直接引用你提供的名称。例如你的任务文件位于名为scripts的文件夹中可执行kubectl create configmap locust-worker-configs --from-file path/to/scripts然后设置worker.config.configmapName: locust-worker-configs并安装 Chart。注意无论哪种方式脚本最终都会被挂载到/locust-tasks下因此worker.config.locust-script默认值/locust-tasks/tasks.py要求 ConfigMap 中的键名必须为tasks.py使用--from-file时即取文件名作为键。若你的脚本文件名不同需同步修改worker.config.locust-script。六、与 Locust 交互启动、监控与停止压测安装完成后可通过端口转发连上 Master 的 Web UIexport LOCUST_URLhttp://127.0.0.1:8089实际执行kubectl port-forward时目标 Pod 名可通过kubectl get pods -l componentmaster查询若 Service 类型为 NodePort/LoadBalancer可参照 templates/NOTES.txt 中输出的命令直接获取集群内访问地址。Web UI默认http://127.0.0.1:8089支持手动设置并发用户数locust_count与孵化速率hatch_rate并一键启动也可以完全通过命令行控制 swarm启动 swarm100 个并发用户、每秒孵化 10 个curl -XPOST $LOCUST_URL/swarm -dlocust_count100hatch_rate10监控压测状态每秒刷新一次输出当前用户数、总 RPS 与状态watch -n 1 curl -s $LOCUST_URL/stats/requests | jq -r [.user_count, .total_rps, .state] | tsv该命令依赖jq工具返回的 JSON 中user_count为当前在线虚拟用户数、total_rps为整体请求速率、state为 swarm 当前状态如 running / stopped。停止 swarmcurl $LOCUST_URL/stop七、源码级实现剖析环境变量注入与 ConfigMap 机制1. 命名约定与模板函数templates/_helpers.tpl 定义了全套命名模板locust.fullnamerelease-locust截断 63 字符符合 DNS 命名规范用作应用级标签与选择器locust.master/locust.worker分别为release-master、release-worker作为两个 Deployment 的名称locust.master-svcrelease-master-svcMaster 的 Service 名称同时被 Worker 通过LOCUST_MASTER引用见下locust.worker-configmap若设置了worker.config.configmapName则直接返回该名称否则返回release-worker。2. Master 的环境变量与端口master-deploy.yaml 中Master 容器的环境变量由两部分组成遍历master.config的所有键值将键名upper大写并把-替换为_例如target-host变为TARGET_HOST值原样注入固定注入LOCUST_MODEmaster与LOCUST_SCRIPT/locust-tasks/tasks.py取自worker.config.locust-script告诉镜像以 Master 模式启动并加载挂载的脚本。Master Pod 同时声明了8089Web UI/API与5557、5558主从通信三个端口且配置了livenessProbe/readinessProbe每 30 秒探测根路径保证 Master 崩溃后能自动恢复。3. Worker 如何找到 Masterworker-deploy.yaml 中Worker 容器注入的关键环境变量为LOCUST_MODEworkerLOCUST_MASTERrelease-master-svc即模板函数locust.master-svc生成的 Service 名LOCUST_MASTER_WEB8089TARGET_HOST取自master.config.target-host与 Master 保持一致。这正是分布式压测得以成立的握手机制Worker 启动后通过LOCUST_MASTER找到 master-svc.yaml 暴露的5557/5558端口注册到 MasterMaster 再将任务脚本分发给所有 Worker 执行。4. ConfigMap 条件渲染worker-cm.yaml 是整个脚本分发链路的关键{{ if not .Values.worker.config.configmapName }}保证自带 ConfigMap 优先的策略——只有未指定外部 ConfigMap 时才用(.Files.Glob tasks/*).AsConfig将 Chart 内tasks/目录转为 ConfigMap并通过 Deployment 中的volumes.configMap挂载到/locust-tasks/Master 与 Worker 挂载逻辑一致见两个 Deployment 模板中的locust-tasksvolume。八、生产化使用建议横向扩容压测瓶颈通常在 Worker 侧需要更高并发时增大worker.replicaCount即可Worker Deployment 会自动滚动扩出配合worker.affinity.podAntiAffinity可将 Worker 分散到不同节点充分发挥集群算力。压测目标务必通过master.config.target-host指定被测服务地址如http://service.namespace.svc集群内地址或公网地址脚本中引用的路径需与目标服务真实暴露的接口一致。资源配额按需覆盖 Master/Worker 的resourcesMaster 仅做调度与聚合资源需求低Worker 则是 CPU 密集型建议单独调高。脚本更新任务脚本变化后需要更新 ConfigMap 并滚动重启 Deploymentkubectl rollout restart deployment以重新挂载。生命周期该 Chart 已归档弃用镜像 tag 固定为 0.9.0、依赖 Helm v2 语法生产使用前请自行评估升级到新维护的 Locust Chart 或直接使用 Locust 官方镜像本仓库代码可作为分布式架构设计的参考基线。九、附仓库关键文件索引官方文档stable/locust/README.md默认配置stable/locust/values.yamlChart 元数据版本/弃用声明stable/locust/Chart.yaml模板辅助函数与命名规则stable/locust/templates/_helpers.tplMaster/Worker 部署模板stable/locust/templates/master-deploy.yaml、stable/locust/templates/worker-deploy.yamlConfigMap 生成与安装提示stable/locust/templates/worker-cm.yaml、stable/locust/templates/NOTES.txt示例压测脚本stable/locust/tasks/tasks.py赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐基于 Helm 在 Kubernetes 上部署与运维 Joomla! CMSstable/joomla Chart 完整配置指南基于 Helm 在 Kubernetes 上部署与运维 Joomla! CMSstable/joomla Chart 完整配置指南 导读 本文以 stableKubernetes 上部署分布式 TensorFlow基于 Helm Chart 的 Worker/PS 集群搭建与配置指南Kubernetes 上部署分布式 TensorFlow基于 Helm Chart 的 Worker/PS 集群搭建与配置指南 导读 本指南以 chartsvLLM Kubernetes 生产部署实战基于 Production Stack Helm Chart 的部署、验证与配置详解vLLM Kubernetes 生产部署实战基于 Production Stack Helm Chart 的部署、验证与配置详解 本文围绕 vLLM 官方文档人工智能大模型模型推理服务推理引擎本地部署上一篇Calibre 格式转换实操3 步让 EPUB 在任何设备上都能读下一篇Biomni 生物医学 AI 智能体完整上手指南3 步装好自然语言跑通实验设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考