如何在N小时内运行Kubernetes作业一次?
Kubernetes提到,如何在N小时内运行Kubernetes作业一次?,kubernetes,cron,Kubernetes,Cron,Kubernetes提到,CronJob支持以下用例: 在指定的时间点一次 但是,我没有看到任何这样做的例子。具体地说,我希望启动一个作业,使其在N小时内运行一次。它与常规CronJob对象一样,但使用一种格式使CronJob表达式在特定时间点运行: apiVersion:batch/v1beta1 种类:克朗乔 元数据: 姓名:我的工作 名称空间:kube系统 规格: 附表:“7 6” 重新启动策略:OnFailure 作业模板: ... 例如,这将在“2018年7月7日星期六07:07”运
CronJob
支持以下用例:
在指定的时间点一次
但是,我没有看到任何这样做的例子。具体地说,我希望启动一个作业,使其在N小时内运行一次。它与常规CronJob对象一样,但使用一种格式使CronJob表达式在特定时间点运行:
apiVersion:batch/v1beta1
种类:克朗乔
元数据:
姓名:我的工作
名称空间:kube系统
规格:
附表:“7 6”
重新启动策略:OnFailure
作业模板:
...
例如,这将在“2018年7月7日星期六07:07”运行
下一次发生在2029年,因此您有足够的时间删除cronJob对象。也就是说,如果您不尽可能地删除它,它将创建一个新作业。据我所知,没有任何方法可以避免这种情况。根据,CronJob使用常见的计划格式:
以下是一些例子:
schedule: "1 2-14 * * 0-1,5-6" (first minute of every hour from 2am to 2pm UTC on Sun,Mon,Fri,Sat)
schedule: "*/1 * * * *" (every minute)
CronJobs也有一些限制:
cron作业大约在其任务的每个执行时间创建一个作业对象
日程我们说“关于”是因为在某些情况下
可以创建两个作业,也可以不创建作业。我们试图
让它们变得稀有,但不要完全阻止它们。因此,工作
应该是幂等的
如果startingDeadlineSeconds
设置为一个大值或未设置(默认值)
如果并发策略
设置为允许
,则作业将
始终至少运行一次
如果CronJob控制器未运行或
从CronJob开始时间之前到
开始时间加上启动死线秒数,或者如果跨度覆盖
多个启动时间和并发策略不允许并发。
例如,假设cron作业设置为恰好在08:30:00
如果CronJob
控制器恰好从08:29:00
下降到08:42:00
,作业将
没有开始。如果需要稍后启动,则设置更长的启动死线秒数
总比不开始好
Cronjob只负责创建与其属性匹配的作业
日程安排,而工作又反过来负责管理工作
它所代表的豆荚
另一件重要的事情是Kubernetes专门使用UTC。确保在创建日程安排时考虑到这一点
要仅运行一次作业,可以在管理计算机或主节点上使用由命令启动的kubectl create-f job.yaml
echo "kubectl create -f job.yaml" | at midnight
这似乎是一种奇怪的方式,通过依赖。我认为该格式可能是一个支持年份的扩展cron。同样让我感到惊讶的是,文档中并没有关于如何实现它的示例。还值得注意的是,k8s集群相对来说是短暂的,所以这个集群不太可能在2029年存在。此外,请参见Kubernetes网站repo:中的GitHub问题。它特别解决了您在要点中对一次性运行
CronJob
的担忧,GH用户garyschulteog Invisitigate表示,这个用例确实是不可能的。与此同时,我已经打开了一个公关,完全删除了要点:这个答案并不完全正确。对于答案中的示例,cronjob将再次在“2018年7月14日星期六07:07”运行。Cron使用或组合月日和周日的条件。对这个设计有一个讨论。如果有人想验证cronjob的时间表,这是非常棒的。请注意,它并不总是UTC,而是基于kube controller manager运行的时区。实际上,大多数Kubernetes提供商将其设置为UTC,但对于自托管安装,这并不总是正确的。