Наше требование состоит в том, что нам нужно выполнять пакетную обработку каждые 3 часа, но один процесс не может справиться с рабочей нагрузкой. нам нужно запустить несколько модулей для одного и того же задания cron. Есть ли способ сделать это?
Спасибо.
Вы можете указать parallelism: <num_of_pods>
для cronjob.spec.jobTemplate.spec
, и он будет запускать несколько модулей () одновременно.
Ниже приведен пример cronjob, который запускает 3 модуля nginx каждую минуту.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
creationTimestamp: null
labels:
run: cron1
name: cron1
spec:
concurrencyPolicy: Allow
jobTemplate:
metadata:
creationTimestamp: null
spec:
parallelism: 3
template:
metadata:
creationTimestamp: null
labels:
run: cron1
spec:
containers:
- image: nginx
name: cron1
resources: {}
restartPolicy: OnFailure
schedule: '*/1 * * * *'
concurrencyPolicy: Forbid
status: {}
Но в моем случае есть еще одно условие. Допустим, мы запланировали запуск задания каждые 3 часа. он работал в 8 утра. если какой-либо из контейнеров все еще работает в 11 утра. в основном, если задание еще не завершено, мы не хотим, чтобы оно запускалось снова. Чтобы сделать это возможным, нам нужно сделать concurrencyPolicy: запрещать.
Да, concurrencyPolicy: Forbid
запрещает одновременные запуски, пропуская следующий запуск, если предыдущий запуск еще не завершен
Что вы имеете в виду под
single process can not handle the work load
. Вы хотите сказать, что пакетная обработка огромных данных или большие вычисления, а обработка/вычисления могут быть распараллелены с несколькими пакетными процессами?