У меня есть CronJob, который запрещает параллелизм (concurrencyPolicy: Forbid
). Теперь Pod, который запускается заданием самим CronJob, порождает Pod (который находится вне моего контроля), который, в свою очередь, также может или не может порождать Pod.
··········> ··········> time ··········> ··········>
CronJob
|
+-----------------------+----····
| |
schedules schedules
| |
v v
first Pod ~~~> Exit. first Pod ~~~> Exit.
| |
spawns spawns
| |
| ???? SECOND COMING OF SECOND POD CONCURRENT WITH FIRST
v
second Pod ~~~~~~ still running ~~~~~~>
Теперь первый Pod выходит довольно быстро, оставляя контроллер CronJob под впечатлением, что задание выполнено. Но на самом деле работа все еще выполняется, поскольку она породила Pod. Таким образом, в следующий раз, когда задание будет запланировано CronJob, он может породить модуль, который будет запускаться одновременно с другими модулями, порожденными первым запланированным заданием. Именно это я и пытаюсь предотвратить.
Есть ли способ, которым мой первый модуль (у меня есть полный контроль над первым модулем, за исключением того факта, что он порождает модуль, и я не контролирую, что происходит в этом модуле или как он создается, но я могу установить метки и annotations) каким-то образом добавляет последовательно порождаемые модули к текущему заданию, так что оно считается завершенным только после того, как эти модули возвращаются?
Мой текущий подход заключается в том, что я сам проверяю эти порожденные поды, но это довольно утомительно, и я бы предпочел, чтобы решение уже было в кубернетах. Кроме того, это просто моя инфраструктура, поскольку сборщик мусора, который очищает остатки работы, затем также очищает эти модули.