A job в Kubernetes предназначено для запуска одного экземпляра модуля и обеспечения его выполнения до конца. Как указывает другой ответ, CronJob
- это фабрика для Job
с, которая знает, как и когда создавать задание в соответствии с указанным расписанием.
Соответственно, в отличие от службы, которая предназначена для вечной работы, контейнеры в модуле, созданные модулем, должны завершиться после завершения задания. Есть существенная проблема с шаблоном коляски, которая часто требует ручной обработки жизненного цикла стручка; если вашему основному модулю требуются дополнительные модули для ведения журналов или доступа к базе данных, вы должны организовать их выход по завершении основного модуля, в противном случае они останутся работающими, и k8s не сочтет задание выполненным. В таких обстоятельствах модуль, связанный с заданием, никогда не прекратит работу.
Льготный период прекращения здесь не применим: этот таймер применяется после того, как Kubernetes запросил прекращение работы вашего модуля (например, если вы его удалите). Он определяет максимальное время, в течение которого стручку предоставляется возможность корректно завершить работу, прежде чем kubelet прекратит его. Если Kubernetes никогда не считает вашу работу завершенной, этот этап жизненного цикла модуля не будет введен.
Кроме того, старые блоки хранятся после завершения в течение некоторого времени, чтобы можно было просматривать журналы и тому подобное. В списке могут отображаться модули, которые не работают активно и поэтому не потребляют вычислительные ресурсы на рабочих узлах.
Если ваши модули не завершают работу, пожалуйста, предоставьте больше информации о коде, который они выполняют, чтобы мы могли помочь определить, почему процесс никогда не завершается.