如何保留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成功还是失败,都保留所有PodOnFailure:只保留执行失败的PodNever:执行完成后立即删除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阻止删除:
- 找到目标Pod:
kubectl get pods - 编辑Pod:
kubectl edit pod <pod-name> - 在
metadata.annotations里添加:
这个注解会降低Pod的删除优先级,足够应对临时排查需求。annotations: kubernetes.io/pod-deletion-cost: "-1000"
内容的提问来源于stack exchange,提问作者Vojtěch
相关产品推荐
相关产品推荐

