问题描述
我不是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
的支持。您可以做的是使用相同的规范同时启动Cronjob
和Job
资源。您可以使用helm chart or kustomize轻松地做到这一点。
或者,您可以将两个清单都放在同一文件中,也可以将两个文件放在同一目录中,然后使用:
kubectl apply -f <file/dir>
通过此变通方法,初始Job
开始,然后过一段时间Cronjob
。
该解决方案的缺点是第一个Job
是独立的,并且不包含在Cronjob的历史中。另一个可能的副作用是,如果Job
无法足够快地完成其任务,则第一个CronJob
和第一个Job
可以并行运行。 concurrencyPolicy
没有考虑到Job
。
从文档中:
cron作业每个执行时间大约创建一次作业对象 时间表。我们说“关于”是因为在某些情况下 可能会创建两个作业,或者可能不会创建任何作业。我们试图 使它们变得罕见,但不能完全阻止它们。
因此,如果您想使任务执行更加严格,也许最好在任务执行之间使用带有睡眠1的Bash包装器脚本,或者设计一个在指定间隔后派生子进程,创建容器映像并运行它的应用程序作为部署。