我在Kubernetes中有一个Cronjob,它每3分钟运行一次。如下所示,它似乎运行正常,但是生成的pod会立即删除自身,我无法查看有关为什么删除它的任何细节。
下面是cronjob骨架,
apiVersion: batch/v1beta1
kind: CronJob
...
spec:
schedule: "*/3 * * * *"
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 3
concurrencyPolicy: Forbid
startingDeadlineSeconds: 120
jobTemplate:
spec:
backoffLimit: 2
template:
spec:
...
这将生成如下的cronjob,
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
test */3 * * * * False 0 1m 51m
由此产生的工作,
NAME DESIRED SUCCESSFUL AGE
test-1552177080 1 0 8m
test-1552177260 1 0 5m
test-1552177440 1 0 2m
查看我可以看到的其中一项工作的细节,
Name: test-1552177440
Namespace: storage
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 2m57s job-controller Created pod: test-1552177440-b5d6g
Normal SuccessfulDelete 2m40s job-controller Deleted pod: test-1552177440-b5d6g
Warning BackoffLimitExceeded 2m40s (x2 over 2m40s) job-controller Job has reached the specified backoff limit
您可以看到,SuccessfulDelete
立即删除了广告连播。
有什么办法可以阻止这种情况的发生吗?最终,id希望查看有关为何无法启动pod的任何日志或任何详细信息。
答案 0 :(得分:1)
我遇到了同样的问题。
参考:https://github.com/kubernetes/kubernetes/issues/78644#issuecomment-498165434
<块引用>一旦作业失败(当它超过其活动截止时间秒数或退避限制时会发生这种情况),所有活动 pod 都会被删除,以防止它们永远运行/崩溃循环。任何不活跃的 Pod,例如它们处于失败或成功的 Pod 阶段,都应该留下。
如果您希望 pod 在失败后仍然存在,将 pod 的重启策略更改为 Never
应该可以防止它们被立即清理,但这确实意味着每次 pod 失败时都会创建一个新的 pod直到达到退避限制。
您能否尝试将 restartPolicy 修复为 Never
?
apiVersion: batch/v1beta1
kind: CronJob
...
spec:
schedule: "*/3 * * * *"
...
jobTemplate:
spec:
...
template:
spec:
...
restartPolicy: Never # Point!