当 Job 完成时,不会再创建 Pod,但也不会删除 Pod。
默认情况下,除非 Pod 失败(restartPolicy=Never)或 Container 错误退出(restartPolicy=OnFailure),否则 Job 将不间断运行,此时 Job 将遵循上述.spec.backoffLimit 。一旦达到 .spec.backoffLimit,Job 将被标记为失败,并且任何正在运行的 Pod 都将被终止。
终止作业的另一种方法是设置活动截止日期。通过将 Job 的.spec.activeDeadlineSeconds字段设置为秒数来执行此操作。无论创建了多少 Pod,activeDeadlineSeconds 都适用于作业的持续时间。一旦 Job 达到 activeDeadlineSeconds,其所有正在运行的 Pod 都将终止,并且 Job 状态将变为 type: Failed with reason: DeadlineExceeded。
请注意,作业的.spec.activeDeadlineSeconds优先于其.spec.backoffLimit。因此,重试一个或多个失败 Pod 的作业一旦达到activeDeadlineSeconds指定的时间限制,就不会部署额外的 Pod ,即使尚未达到 backoffLimit。
这里有更多信息:工作。
您还可以设置cronjob的concurrencyPolicy以替换当前正在运行的作业并用新作业替换。
这是一个例子:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/2 * * * *"
concurrencyPolicy: Replace
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster && sleep 420
restartPolicy: Never
为concurrencyPolicy标志设置替换值意味着如果是新作业运行的时间并且之前的作业运行尚未完成,则 cron 作业将当前正在运行的作业运行替换为新的作业运行。
无论这种解决方案如何,您的问题都在于错误的图像,因此自动删除 pod 或作业并不能解决问题。因为如果您不更改作业和图像的定义中的任何内容,您的 pod 在再次创建作业后仍然会失败。
以下是 Error: ImagePullBackOff Normal BackOff: ImagePullBackOff的故障排除示例。