如何立即运行kubernetes cronjob

问题描述

我不是Kubernetes的新手,在这里我厌倦了cronjob yaml,其中每1分钟创建一个pod。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

但是吊舱仅在1分钟后创建。是否可以立即运行作业,然后每1分钟运行一次?

解决方法

如评论中所述,CronJob得到Job的支持。您可以做的是使用相同的规范同时启动CronjobJob资源。您可以使用helm chart or kustomize轻松地做到这一点。

或者,您可以将两个清单都放在同一文件中,也可以将两个文件放在同一目录中,然后使用:

kubectl apply -f <file/dir>

通过此变通方法,初始Job开始,然后过一段时间Cronjob。 该解决方案的缺点是第一个Job是独立的,并且不包含在Cronjob的历史中。另一个可能的副作用是,如果Job无法足够快地完成其任务,则第一个CronJob和第一个Job可以并行运行。 concurrencyPolicy没有考虑到Job

从文档中:

cron作业每个执行时间大约创建一次作业对象 时间表。我们说“关于”是因为在某些情况下 可能会创建两个作业,或者可能不会创建任何作业。我们试图 使它们变得罕见,但不能完全阻止它们。

因此,如果您想使任务执行更加严格,也许最好在任务执行之间使用带有睡眠1的Bash包装器脚本,或者设计一个在指定间隔后派生子进程,创建容器映像并运行它的应用程序作为部署。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...