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

使用Rsync从OCP Pod拷贝测试结果时出现Pod Not Found错误求助

根因分析
  • OCP Pod自动回收机制触发:OpenShift的kubelet默认会清理Completed状态的Pod,若测试完成后Jenkins任务调度延迟,还没执行Rsync,Pod就被垃圾回收,会出现"Pod Not Found"。
  • 测试与Jenkins任务的时间差:RBF测试完成后,Jenkins任务可能因队列拥堵、调度延迟等未能及时触发,这段时间Pod可能因资源回收或重新调度被销毁。
  • 静态Pod名称依赖:若Jenkins脚本硬编码测试Pod名称,Deployment/StatefulSet滚动更新后,旧Pod被销毁、新Pod带随机后缀,会导致匹配失败。
  • Pod选择逻辑不严谨:如果Rsync前的Pod查询只匹配部分标签或前缀,当存在多个同前缀Pod、或Pod标签更新变化时,可能无法定位目标Pod。
解决方案
  • 调整Pod保留策略:
    • 若测试Pod是Job类型,设置spec.ttlSecondsAfterFinished: 3600,让Completed状态的Pod保留1小时再回收;
    • 给测试Pod添加annotation kubernetes.io/pod-termination-grace-period: "300",延长优雅终止时长,给Jenkins足够拉取时间。
  • 同步触发Jenkins任务:
    • 在RBF测试完成的钩子脚本里,直接调用Jenkins API触发Rsync任务(比如curl http://jenkins-url/job/rsync-test-result/build),消除测试完成与Jenkins执行的时间差;
    • 或者在测试Pod内部完成结果上传:测试结束后直接用Rsync把结果推到Jenkins服务器指定目录,无需Jenkins主动拉取。
  • 动态获取Pod名称:
    • 修改Jenkins脚本,用OpenShift命令动态查询目标Pod,示例:
      TEST_POD=$(oc get pods -l app=rbf-test-pod,status=running -o jsonpath='{.items[0].metadata.name}')
      oc rsync $TEST_POD:/test-results/ ./local-results/
      
      确保app=rbf-test-pod是测试Pod的唯一标识标签,避免匹配错误。
  • 持久化测试结果到PVC:
    • 给测试Pod挂载PVC,将测试结果目录(如/test-results)指向PVC挂载路径;
    • Jenkins任务直接从PVC拉取结果,或部署固定的"结果代理Pod"挂载该PVC,Rsync到这个固定Pod,彻底摆脱对测试Pod生命周期的依赖。
  • 添加重试逻辑:
    • 在Jenkins的Rsync步骤中加入重试机制,示例shell脚本:
      MAX_RETRIES=3
      RETRY_COUNT=0
      until oc rsync $TEST_POD:/test-results/ ./local-results/; do
        RETRY_COUNT=$((RETRY_COUNT+1))
        if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
          echo "Rsync failed after $MAX_RETRIES retries"
          exit 1
        fi
        echo "Retrying Rsync... ($RETRY_COUNT/$MAX_RETRIES)"
        sleep 10
      done
      
      应对偶发的Pod调度延迟或临时不可用问题。

内容的提问来源于stack exchange,提问作者sourabh kadyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:35:20