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

如何保留Kubernetes普通Job(非CronJob)执行完成后的Pod?

如何保留Kubernetes普通Job执行完成后的Pod

Kubernetes普通Job确实没有CronJob的successfulJobsHistoryLimit和failedJobsHistoryLimit字段,但有几种实用方法可以保留执行后的Pod用于排查分析:

1. 配置podRetentionPolicy(推荐,K8s 1.23+)

从1.23版本开始,Job新增了podRetentionPolicy字段,直接控制Pod的保留策略:

  • Always:不管Job成功还是失败,都保留所有Pod
  • OnFailure:只保留执行失败的Pod
  • Never:执行完成后立即删除Pod(默认行为)

示例Job配置:

apiVersion: batch/v1
kind: Job
metadata:
  name: demo-job
spec:
  podRetentionPolicy: Always
  template:
    spec:
      containers:
      - name: demo-container
        image: busybox:latest
        command: ["sh", "-c", "echo 'job run' && sleep 5"]
      restartPolicy: Never

2. 设置ttlSecondsAfterFinished(临时保留,K8s 1.21+)

如果不需要永久保留,只想让Pod在执行完成后留一段时间再删除,可以用这个字段设置超时时间(单位:秒)。比如保留1小时:

apiVersion: batch/v1
kind: Job
metadata:
  name: temp-retention-job
spec:
  ttlSecondsAfterFinished: 3600
  template:
    spec:
      containers:
      - name: temp-container
        image: busybox:latest
        command: ["echo", "temp job"]
      restartPolicy: Never

3. 手动阻止已执行Pod被删除

如果Job已经跑完,Pod处于Terminating状态,可以临时修改Pod阻止删除:

  1. 找到目标Pod:kubectl get pods
  2. 编辑Pod:kubectl edit pod <pod-name>
  3. 在metadata.annotations里添加:
    annotations:
      kubernetes.io/pod-deletion-cost: "-1000"
    
    这个注解会降低Pod的删除优先级,足够应对临时排查需求。

内容的提问来源于stack exchange,提问作者Vojtěch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:16:14