将 Kubernetes cronjob 安排到 运行 一次

Schedule a Kubernetes cronjob to run just once

如何在特定时间安排 Kubernetes cron job 到 运行 一次?

(或者,一个 Kubernetes 作业没有立即安排到 运行,而是延迟了一段时间——在一些调度系统中被称为“最早到 运行".)

文档说:

Cron jobs can also schedule individual tasks for a specific time [...]

但这在工作经历方面如何运作?控制平面是否足够聪明,知道调度是针对特定时间的,不会重复发生?

您始终可以在计划 cron 表达式中放置特定的分钟、小时、日期、月份,例如 12:15am 12 月 25 日:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "15 0 25 12 *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

不幸的是,它不支持指定年份(cron 表达式中的单个 * 表示星期几)但是您有一年的时间在相同的日期和时间再次到来之前删除 cronjob下一年。

如果您需要安排您的工作并且 运行 它只需要一次,您可以在 Linux 中使用 at command,它允许安排命令在特定时间执行.

例如:

echo "kubectl create -f job.yaml" | at 08:52

应该在管理机器或主节点上添加命令。