“我只想在Kubernetes中每10秒运行一次cronjob。为此,什么命令才是命令性的?”
发布于 2020-08-16 05:00:54
CronJob kubernetes object的运行时间不能超过1分钟。对于必须频繁运行的进程,您可能使用了错误的工具。https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
在部署上创建无限循环(守护它)
您需要使用bash公式(或您最喜欢的任何编程语言,Go、Java、Python或Ruby)来进行无限循环,并在部署中每次执行时休眠10秒。下面是一个使用bash/sh的示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cronjob-deployment
labels:
app: cronjob
spec:
replicas: 1
selector:
matchLabels:
app: cronjob
template:
metadata:
labels:
app: cronjob
spec:
containers:
- name: cronjob
image: busybox
args:
- /bin/sh
- -c
- while true; do echo call ./script.sh here; sleep 10; done创建一个包含多个容器的CronJob
如果你仍然想使用CronJobs,你可以在定义中使用6个容器。一个没有延迟,其他的有10,20,30,40和50秒的延迟。
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: no_delay
image: busybox
args:
- /bin/sh
- -c
- echo call ./script.sh here
- name: 10_seconds
image: busybox
args:
- /bin/sh
- -c
- sleep 10; echo call ./script.sh here
- name: 20_seconds
image: busybox
args:
- /bin/sh
- -c
- sleep 20; echo call ./script.sh here
- name: 30_seconds
image: busybox
args:
- /bin/sh
- -c
- sleep 30; echo call ./script.sh here
- name: 40_seconds
image: busybox
args:
- /bin/sh
- -c
- sleep 40; echo call ./script.sh here
- name: 50_seconds
image: busybox
args:
- /bin/sh
- -c
- sleep 50; echo call ./script.sh here
restartPolicy: OnFailure当然,您可能会遇到的问题之一是您的流程可能会重叠(同时并发运行)。这将取决于您的进程需要运行的秒数,以及kubernetes需要调度和创建容器的时间。
发布于 2020-08-16 05:09:39
如果您的任务需要频繁运行,那么cron就是工具。
除了它不会频繁地启动作业这一事实之外,如果作业运行的时间比两次启动之间的间隔更长,那么还有可能出现一些严重的问题。重写任务,使其守护进程并持久运行,然后在必要时从cron启动它(同时确保它不会在已经运行的情况下重新启动)。
发布于 2021-04-12 01:04:43
您可以编写一个以10秒为间隔执行6次的脚本。并设置Kubernetes cron作业每分钟运行一次。这样,您的脚本每分钟开始运行一次,然后每隔10秒执行一次任务。
脚本在一分钟后执行cron作业时,每10秒运行一次逻辑,共运行6次。
这将在每10秒打印hello world 6次:#!/bin/bash -x a=0
直到$a -gt 5回应"hello world“a=expr $a + 1睡眠10完成
cronjob示例:
apiVersion:批/v1beta1种类:Sample元数据:名称: hello spec: schedule:"*/1 ** *“jobTemplate: spec: template: spec: containers:- name: hello image: imagePullPolicy: IfNotPresent命令:-/ CronJob /sh- -c - ./sample.sh restartPolicy: OnFailure ~
因此,通过这种方式,您的cron作业每一分钟执行一次,.which轮流启动您的进程,该进程每10秒运行一次,并执行业务逻辑6分钟。
这是您可以遵循的想法,使cron作业在几秒钟内工作,因为Kubernetes不会为低于1分钟的调度提供值。
尽管在这种方法中,您需要设置不与下一次执行cron作业重叠的策略。例如,如果您的业务逻辑需要15秒才能执行,而您现在每10秒运行一次业务逻辑6次。由于业务逻辑需要15秒,因此理想情况下,它应该立即运行4次而不是6次。因此,您需要调整脚本中的重复。
https://stackoverflow.com/questions/63430479
复制相似问题