如何立即运行 kubernetes cronjob
Posted
技术标签:
【中文标题】如何立即运行 kubernetes cronjob【英文标题】:How to run kubernetes cronjob immediately 【发布时间】: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 分钟运行一次?
【问题讨论】:
CronJob 由 Job 支持,你可以只运行一个 Job。见***.com/a/50041304 和kubernetes.io/docs/concepts/workloads/controllers/job @d4nyll .im 使用 kubectl create 命令。但它总是在指定分钟后启动 如果不清楚,您需要创建 CronJob以及从该 CronJob 派生的 Job。 【参考方案1】:正如 cmets 中所述,CronJob
由 Job
支持。您可以做的是同时使用相同的规范启动Cronjob
和Job
资源。您可以使用helm chart or kustomize 方便地做到这一点。
或者,您可以将两个清单放在同一个文件中,或者将两个文件放在同一个目录中,然后使用:
kubectl apply -f <file/dir>
使用此解决方法,初始 Job
启动,然后在一段时间后启动 Cronjob
。
这个解决方案的缺点是第一个 Job
是独立的,它不包含在 Cronjob 的历史记录中。另一个可能的副作用是如果Job
不能足够快地完成其任务,第一个Job
和第一个CronJob
可以并行运行。 concurrencyPolicy
不考虑 Job
。
来自文档:
一个 cron 作业大约每执行一次就创建一个作业对象 日程。我们说“约”是因为在某些情况下 可能会创建两个作业,也可能不会创建作业。我们试图 使这些变得罕见,但不要完全阻止它们。
因此,如果您想保持任务执行更严格,也许最好在任务执行之间使用带有 sleep 1 的 Bash 包装器脚本,或者设计一个在指定间隔后分叉子进程的应用程序,创建一个容器映像并运行它作为一个部署。
【讨论】:
以上是关于如何立即运行 kubernetes cronjob的主要内容,如果未能解决你的问题,请参考以下文章
Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Cronjob(CJ)
Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Cronjob(CJ)
19-Kubernetes-Pod控制器详解-CronJob(CJ)