CronWorkflowRun
CronWorkflowRun 用于方便地定时执行 WorkflowRun,对于创建周期性的、反复重复的任务很有用。
cron 是一种书写定时计划的格式,用一个字符串指定何时触发任务的执行,通常由以空格分隔的 5 个部分组成:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
例如:
1 0 * * *
表示在每天的 00:01 执行。45 23 * * 6
表示在每个星期六的 23:45 执行。*/5 1,2,3 * * *
表示在每天的第 1、2、3 个小时每隔 5 分钟执行一次(即 01:00,01:05,01:10,…,03:55)。
注意 */n
表示每隔 n 个时间单位执行一次,在某个时间单位多次执行可以用逗号连接(例如 1,2,3
)。
为了更方便地创建 cron 表达式,可以使用第三方网页工具,例如 crontab.guru。
创建 CronWorkflowRun
下面的 CronWorkflowRun 示例会每分钟创建一个 WorkflowRun。
apiVersion: batch.tensorstack.dev/v1beta1
kind: CronWorkflowRun
metadata:
name: cronworkflowrun-sample
spec:
schedule: "*/1 * * * *"
workflowRun:
spec:
workflowTemplateRef: workflowtemplate-sample
在该例中:
schedule
字段是一个 cron 格式的字符串,表示每分钟触发一次 WorkflowRun 的运行。- 所要运行的 WorkflowRun 由
workflowRun
字段定义,是一个引用workflowtemplate-sample
的 WorkflowRun。
详细配置 CronWorkflowRun
下面是一个经过详细配置的 CronWorkflowRun 示例,与上一节类似,也会每分钟创建一个 WorkflowRun。
apiVersion: batch.tensorstack.dev/v1beta1
kind: CronWorkflowRun
metadata:
name: cronworkflowrun-sample
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 30
concurrencyPolicy: "Allow"
suspend: true
successfulRunsHistoryLimit: 10
failedRunsHistoryLimit: 10
workflowRun:
spec:
workflowTemplateRef: workflowtemplate-sample
在该例中:
- 如果某个 WorkflowRun 由于任何原因未能准时在预设的时间点开始执行,它在 30 秒钟的期限内必须开始执行(由
startingDeadlineSeconds
字段指定),否则将被认为该次执行已失败。 - 如果到了某个 WorkflowRun 应该开始执行的时间点,但是上一个 WorkflowRun 仍未运行完成,允许这两个 WorkflowRun 同时运行(由
concurrencyPolicy
字段指定)。 suspend
字段为true
表示暂时停止创建新的 WorkflowRun,该字段可以随时变化。- 由该 CronWorkflowRun 创建的所有 WorkflowRun 中,最多保留 10 个运行成功的 WorkflowRun 和 10 个运行失败的 WorkflowRun(分别由
successfulRunsHistoryLimit
和failedRunsHistoryLimit
字段指定),多余的运行时间较早的 WorkflowRun 会被删除。
CronWorkflowRun 状态
下面是 CronWorkflowRun 的状态示例:
apiVersion: batch.tensorstack.dev/v1beta1
kind: CronWorkflowRun
metadata:
name: cronworkflowrun-sample
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 30
concurrencyPolicy: "Allow"
suspend: true
successfulRunsHistoryLimit: 10
failedRunsHistoryLimit: 10
workflowRun:
spec:
workflowTemplateRef: workflowtemplate-sample
status:
active:
- apiVersion: batch.tensorstack.dev/v1beta1
kind: WorkflowRun
name: cronworkflowrun-sample-1631093400
namespace: t9k-example
resourceVersion: "220623640"
uid: 39634803-d8cf-41d4-8a8e-649e0133b11b
lastScheduleTime: "2021-09-08T09:30:00Z"
conditions:
- lastTransitionTime: "2021-09-08T09:23:00Z"
message: At least one WorkflowRun has started
status: "True"
type: HasStarted
- lastTransitionTime: "2021-09-08T09:30:00Z"
message: There are running WorkflowRuns
status: "True"
type: IsRunning
- lastTransitionTime: "2021-09-08T09:23:35Z"
message: There are successful WorkflowRuns
status: "True"
type: HasSuccessfulRun
- lastTransitionTime: "2021-09-08T09:22:08Z"
message: No failed WorkflowRuns yet
status: "False"
type: HasFailedRun
该 CronWorkflowRun 的 status
字段显示:
- 正在执行中的 WorkflowRun 有一个,其基本信息记录在
status.active
字段中。 - 最新的 WorkflowRun 的创建时间是 2021-09-08T09:30:00Z(由
status.lastScheduleTime
字段描述)。 - 在由该 CronWorkflowRun 创建的 WorkflowRun 中,已开始过至少一次 WorkflowRun(可能已结束或未结束),有正在运行中的 WorkflowRun,有已成功的 WorkflowRun,没有失败的 WorkflowRun(由
status.conditions
字段描述)。