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

如何用Bash脚本创建多Pod运行测试用例并管理其生命周期

批量测试Pod的Bash管理方案

一、批量启动Pod(推荐用Job替代裸Pod)

Job天然适配一次性测试任务的生命周期管理(失败重试、任务状态追踪),比裸Pod更省心,不用手动处理Pod异常退出的情况。

  1. 先写Job模板文件test-job-template.yaml:
apiVersion: batch/v1
kind: Job
metadata:
  name: test-job-${TEST_CASE_ID}
  labels:
    test-batch: "${BATCH_TAG}"  # 统一标签用于后续批量操作
spec:
  template:
    spec:
      containers:
      - name: test-runner
        image: your-test-image:latest
        command: ["/bin/bash", "-c"]
        args: ["${TEST_COMMANDS}"]  # 填测试用例的多条命令
      restartPolicy: OnFailure  # 失败时自动重启容器,按需调整
  backoffLimit: 1  # 任务重试次数,根据测试需求设置
  1. 批量启动脚本start-tests.sh:
#!/bin/bash

# 定义批次标签,确保唯一,比如用时间戳
BATCH_TAG="test-batch-$(date +%Y%m%d-%H%M%S)"
# 生成1000个测试用例ID,也可以从测试用例文件读取
TEST_CASE_IDS=$(seq 1 1000)

# 用GNU parallel并行创建Job,-j控制并发数,避免打满集群API
echo "$TEST_CASE_IDS" | parallel -j 30 \
  TEST_CASE_ID={} \
  BATCH_TAG=$BATCH_TAG \
  TEST_COMMANDS="echo Starting test {}; sleep 5; echo Test {} finished" \
  envsubst < test-job-template.yaml | kubectl create -f -
  • 用envsubst直接替换模板变量,不用生成1000个独立YAML文件
  • 并发数-j 30可根据集群资源调整,避免瞬间占用过多资源

二、批量监控任务状态

  1. 实时查看所有测试Pod/Job状态:
# 监控Pod运行状态
kubectl get pods -l test-batch=${BATCH_TAG} --watch

# 查看Job整体完成情况(成功/失败数)
kubectl get jobs -l test-batch=${BATCH_TAG}
  1. 等待所有测试任务完成:
# 等待所有Job执行完成(无论成功/失败),超时时间按需设置
kubectl wait --for=condition=complete --timeout=3600s jobs -l test-batch=${BATCH_TAG}

# 仅等待所有Job成功完成,失败会触发超时
kubectl wait --for=condition=successful --timeout=3600s jobs -l test-batch=${BATCH_TAG}
  1. 批量收集测试日志:
mkdir -p test-logs/${BATCH_TAG}
# 遍历所有测试Pod,导出日志到本地目录
for pod in $(kubectl get pods -l test-batch=${BATCH_TAG} -o name); do
  pod_name=$(echo $pod | cut -d/ -f2)
  kubectl logs $pod > test-logs/${BATCH_TAG}/${pod_name}.log
done

三、批量终止/清理任务

  1. 直接删除所有测试Job(会自动清理对应的Pod):
kubectl delete jobs -l test-batch=${BATCH_TAG}
  1. 强制终止仍在运行的裸Pod(如果没用Job的情况):
kubectl delete pods -l test-batch=${BATCH_TAG} --force --grace-period=0

四、核心优化点

  • 统一标签是关键:所有测试资源加唯一批次标签,后续启动、监控、清理全靠标签过滤,不用记忆具体Pod/Job名称
  • 优先用Job:Job会自动处理Pod重启、状态上报,避免裸Pod意外退出后无追踪依据
  • 控制并发数:启动时通过parallel -j N或Job的parallelism参数限制并发Pod数,防止集群资源耗尽
  • 脚本复用:把启动、监控、清理逻辑封装成函数,比如:
function cleanup_batch() {
  local batch_tag=$1
  kubectl delete jobs -l test-batch=$batch_tag --ignore-not-found
}

内容的提问来源于stack exchange,提问作者Frank Xie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:20:34