Kubernetes CronJob
docs提到CronJob
支持以下用例:
- 在指定的时间点
但是,我没有看到任何示例/说明如何实现此目标。具体来说,我希望开始在 N 小时内运行一次的工作。任何版本的Kubernetes都支持吗?
答案 0 :(得分:1)
它与常规CronJob对象一样,但是使用cronjob表达式的格式在特定时间点运行:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: my-cronjob
namespace: kube-system
spec:
schedule: "7 7 7 7 6"
restartPolicy: OnFailure
jobTemplate:
...
例如,它将在“ 2018年7月7日,星期六,07:07”运行。
下一次出现是在2029年,因此您有足够的时间删除cronJob对象。也就是说,如果您不删除它,它将创建一个新工作,据我所知,没有办法避免这种情况。
答案 1 :(得分:1)
根据documentation,CronJob使用常见的Cron时间表格式:
以下是一些示例:
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
设置为较大值或未设置( 默认设置),如果concurrencyPolicy
设置为Allow
,则作业将 至少要运行一次。如果CronJob控制器未运行,则作业可能无法运行,或者 从CronJob开始时间到 开始时间加上
startingDeadlineSeconds
,或者跨度包括 多个开始时间,并且concurrencyPolicy
不允许并发。 例如,假设将cron作业设置为完全从08:30:00
开始 并且如果CronJob将其startingDeadlineSeconds
设置为10
控制器恰好从08:29:00
降到08:42:00
,作业将 无法启动。如果稍后开始,请设置更长的startingDeadlineSeconds
总比根本不开始要好。Cronjob仅负责创建与其匹配的作业 时间表,而工作又负责管理 它代表的豆荚。
另一个重要的事情是Kubernetes仅使用 UTC 。创建时间表时,请确保考虑到这一点。
要仅运行一次作业,可以在管理机或主节点上使用由 at 命令启动的kubectl create -f job.yaml
。
echo "kubectl create -f job.yaml" | at midnight