как запускать cronjob каждые 10 секунд в кубернетах?
"Я просто хочу запускать cronjob в Kubernetes каждые 10 секунд. Какая для этого будет обязательная команда?"
3 ответа
Вы не можете использовать объект CronJob kubernetes для работы менее 1 минуты. Возможно, вы использовали неправильный инструмент для процесса, который должен выполняться так часто. https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
Создать бесконечный цикл при развертывании (демонизировать его)
Вам нужно будет использовать формулу bash, чтобы создать бесконечный цикл и спать 10 секунд на каждое выполнение внутри развертывания.
Создайте 1 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
- execute_job.sh
- name: 10_seconds
image: busybox
args:
- /bin/sh
- -c
- sleep 10; execute_job.sh
- name: 20_seconds
image: busybox
args:
- /bin/sh
- -c
- sleep 20; execute_job.sh
- name: 30_seconds
image: busybox
args:
- /bin/sh
- -c
- sleep 30; execute_job.sh
- name: 40_seconds
image: busybox
args:
- /bin/sh
- -c
- sleep 40; execute_job.sh
- name: 50_seconds
image: busybox
args:
- /bin/sh
- -c
- sleep 50; execute_job.sh
restartPolicy: OnFailure
Of course, one of the problems you might encounter is that your process might be overlapped (runned concurrently at the same time). This will depend on the amount of seconds your process needs to run, and the time kubernetes needs to schedule and create a container.
Если ваша задача должна выполняться так часто, cron - неподходящий инструмент.
Помимо того факта, что он просто не будет запускать задания так часто, вы также рискуете получить серьезные проблемы, если задание занимает больше времени, чем интервал между запусками. Перепишите задачу, чтобы она демонстрировала и выполнялась постоянно, затем при необходимости запустите ее из cron (при этом убедитесь, что она не будет перезапущена, если она уже запущена).
Вы можете написать сценарий, который выполняется 6 раз с интервалом в 10 секунд. и установите задание Kubernetes cron для запуска каждую минуту. таким образом каждую минуту запускается ваш скрипт, который, в свою очередь, выполняет задачу каждые 10 секунд.
сценарий для запуска логики каждые 10 секунд 6 раз, когда задание cron выполняется через одну минуту.
Это будет печатать hello world каждые 10 секунд 6 раз: #!/ Bin/bash -xa = 0
пока [$a -gt 5] не повторить "hello world" a =
expr $a + 1
спать 10 готово
пример cronjob:
apiVersion: batch/v1beta1kind: CronJobmetadata:name: hellospec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:container: - name: helloimage: imagePullPolicy: IfNotPresentcommand:- /bin/sh- -c- ./sample.shrestartPolicy: OnFailure ~
Таким образом, ваше задание cron выполняется каждую минуту. Который, в свою очередь, запускает ваш скрипт, который запускается каждые 10 секунд и выполняет бизнес-логику в течение 6 минут.
Это идея, которой вы можете следовать, чтобы заставить работу cron работать за секунды, поскольку Kubernetes не предоставляет значения для планирования менее 1 минуты.
Хотя в этом подходе вам нужно установить стратегию, чтобы не перекрывать следующее выполнение задания cron. например, если выполнение бизнес-логики занимает 15 секунд, а бизнес-логика выполняется каждые 10 секунд 6 раз в минуту. Поскольку бизнес-логика занимает 15 секунд, в идеале она должна выполняться 4 раза, а не 6 раз в минуту. Соответственно, вам нужно настроить повторение внутри скрипта.