如何解决手动触发的 cron 作业可以遵守 concurrencyPolicy 吗?
apiVersion: batch/v1beta1
kind: CronJob
Metadata:
name: my-cron-job
spec:
schedule: "0 0 31 2 *"
FailedJobsHistoryLimit: 3
successfulJobsHistoryLimit: 1
concurrencyPolicy: "Forbid"
startingDeadlineseconds: 30
jobTemplate:
spec:
backoffLimit: 0
activeDeadlineseconds: 120
...
然后我像这样手动触发作业:
kubectl create job my-job --namespace precompile --from=cronjob/my-cron-job
但看起来我可以随心所欲地触发作业,而 concurrencyPolicy: "Forbid"
会被忽略。
有没有办法让手动触发的作业尊重这一点,还是我必须手动检查?
解决方法
请注意,并发策略仅适用于同一 cron 作业创建的作业。
concurrencyPolicy
字段仅适用于由同一 cron 作业创建的作业,如文档中所述:https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/#concurrency-policy
执行 $ kubectl create job my-job --namespace precompile --from=cronjob/my-cron-job
时,您实际上是在自行创建一次性作业,该作业使用 spec.jobTemplate
字段作为创建它的参考。由于 concurrencyPolicy
是一个 cronjob 字段,它甚至不被评估。
TL;DR
这实际上是预期的行为。手动创建的作业不受 concurrencyPolicy
的影响。没有任何标志可以传递来改变这种行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。