Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在N小时内运行Kubernetes作业一次?_Kubernetes_Cron - Fatal编程技术网

如何在N小时内运行Kubernetes作业一次?

如何在N小时内运行Kubernetes作业一次?,kubernetes,cron,Kubernetes,Cron,Kubernetes提到,CronJob支持以下用例: 在指定的时间点一次 但是,我没有看到任何这样做的例子。具体地说,我希望启动一个作业,使其在N小时内运行一次。它与常规CronJob对象一样,但使用一种格式使CronJob表达式在特定时间点运行: apiVersion:batch/v1beta1 种类:克朗乔 元数据: 姓名:我的工作 名称空间:kube系统 规格: 附表:“7 6” 重新启动策略:OnFailure 作业模板: ... 例如,这将在“2018年7月7日星期六07:07”运

Kubernetes提到,
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,但对于自托管安装,这并不总是正确的。