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

Kubernetes分布式Locust测试完成后自动删除Deployment方案咨询

问题根因

你当前使用Deployment部署一次性压测任务触发了无限重启:Deployment是面向常驻服务的工作负载,默认会始终维持Pod副本处于运行状态,当Locust压测任务完成后容器正常退出,Deployment会判定Pod异常,自动触发重建,就出现了你看到的多次重启现象。

实现压测完成自动清理资源的方案

这里提供两种最常用的实现方式,按需选择即可:

方案1:使用Job + 内置TTL自动清理(K8s 1.23及以上版本适用,无需额外脚本)

将原有的Deployment替换为Job资源,开启任务完成后自动清理机制,全程由K8s原生能力管控:

  1. 修改01-locust-master.yaml,把Deployment部分替换为Job配置,添加ttlSecondsAfterFinished字段,即可实现任务完成后自动删除Job及关联Pod:
# Service部分保持不变,仅替换原Deployment配置为以下内容
apiVersion: batch/v1
kind: Job
metadata:
  name: locust-master
spec:
  ttlSecondsAfterFinished: 300 # 任务完成后5分钟自动删除Job及关联资源
  backoffLimit: 2 # 最多失败重试2次
  template:
    metadata:
      labels:
        name: locust
        role: master
    spec:
      restartPolicy: OnFailure # 仅任务失败时才重启容器
      containers:
        # 原有container配置保持不变,和你之前的配置完全一致
  1. 修改02-locust-worker.yaml,同样把Deployment替换为Job配置:
apiVersion: batch/v1
kind: Job
metadata:
  name: locust-worker
spec:
  parallelism: 3 # 对应原来的replicas,同时运行3个worker
  completions: 3 # 等3个worker都跑完任务才算完成
  backoffLimit: 2
  template:
    metadata:
      labels:
        name: locust
        role: worker
    spec:
      restartPolicy: OnFailure
      containers:
        # 原有container配置保持不变

方案2:外部Shell脚本管控(兼容所有K8s版本,灵活性更高)

不用修改原有YAML配置,通过外部脚本先部署资源、等待任务完成再自动删除:

#!/bin/bash
# 部署所有资源
kubectl apply -f 01-locust-master.yaml -f 02-locust-worker.yaml

# 等待master Pod完成压测任务(可根据你的压测时长调整timeout值)
echo "等待压测任务完成..."
kubectl wait --for=jsonpath='{.status.phase}'=Succeeded pod -l role=master --timeout=10m

# 压测完成后删除所有关联资源
echo "压测完成,正在清理资源..."
kubectl delete -f 01-locust-master.yaml -f 02-locust-worker.yaml

如果单独要解决Pod无限重启的问题,只需要在两个Deployment的spec.template.spec下添加restartPolicy: Never即可,任务完成后容器不会再被重启。

内容的提问来源于stack exchange,提问作者George Fandango

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:57:01