【问题标题】:How to run kubernetes cronjob immediately如何立即运行 kubernetes cronjob
【发布时间】:2020-12-22 00:28:39
【问题描述】:

我对 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

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

【问题讨论】:

标签: kubernetes cron kubernetes-cronjob


【解决方案1】:

正如 cmets 中所述,CronJobJob 支持。您可以做的是同时使用相同的规范启动CronjobJob 资源。您可以使用helm chart or kustomize 方便地做到这一点。

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

kubectl apply -f <file/dir>

使用此解决方法,初始 Job 启动,然后在一段时间后启动 Cronjob。 这个解决方案的缺点是第一个 Job 是独立的,它不包含在 Cronjob 的历史记录中。另一个可能的副作用是如果Job 不能足够快地完成其任务,第一个Job 和第一个CronJob 可以并行运行。 concurrencyPolicy 不考虑 Job

来自文档:

一个 cron 作业大约每执行一次就创建一个作业对象 日程。我们说“约”是因为在某些情况下 可能会创建两个作业,也可能不会创建作业。我们试图 使这些变得罕见,但不要完全阻止它们。

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

【讨论】:

    猜你喜欢
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2017-11-29
    • 2016-08-21
    相关资源
    最近更新 更多