Ответ
В контексте Kubernetes Job, под «правилами» обычно подразумеваются спецификации (spec), управляющие выполнением и завершением Job'а. Это не отдельный объект rules, а параметры в spec объекта Job.
Ключевые параметры управления Job:
completions(целое число, по умолчанию 1): Количество успешных завершений Pod'ов, необходимое для того, чтобы вся Job считалась выполненной. Полезно для задач, которые нужно обработать N раз.parallelism(целое число, по умолчанию 1): Максимальное количество Pod'ов, которые могут выполняться параллельно в рамках одной Job. Управляет скоростью обработки.backoffLimit(целое число, по умолчанию 6): Определяет, сколько раз Kubernetes будет пытаться перезапустить Pod при его неудачном завершении (с ненулевым кодом выхода), прежде чем пометить всю Job как Failed. Счётчик сбрасывается при успешном выполнении Pod'а.activeDeadlineSeconds(целое число в секундах): Абсолютный лимит времени на выполнение всей Job. Если Job работает дольше, все её Pod'ы завершаются, а сама Job помечается как Failed.ttlSecondsAfterFinished(целое число в секундах): Время жизни завершённой Job (успешной или неудачной) перед её автоматическим удалением. Помогает очищать историю.
Пример манифеста Job с этими параметрами:
apiVersion: batch/v1
kind: Job
metadata:
name: batch-data-processor
spec:
completions: 10 # Нужно успешно обработать 10 элементов
parallelism: 3 # Одновременно могут работать не более 3 Pod'ов
backoffLimit: 3 # Максимум 3 попытки перезапуска для каждого Pod'а
activeDeadlineSeconds: 3600 # Вся Job должна уложиться в 1 час
ttlSecondsAfterFinished: 300 # Удалить Job через 5 минут после завершения
template:
spec:
containers:
- name: processor
image: my-registry/data-processor:v1.2
# Pod получает аргумент с номером задачи
command: ["/app/process", "$(JOB_COMPLETION_INDEX)"]
resources:
requests:
memory: "128Mi"
cpu: "200m"
restartPolicy: Never # Для Job обычно используется Never или OnFailure
Как это работает на практике: Допустим, у нас есть очередь из 10 задач. С параметрами выше Kubernetes будет:
- Создавать и запускать Pod'ы, но не более 3 одновременно (
parallelism: 3). - Каждый Pod получает уникальный
JOB_COMPLETION_INDEX(от 0 до 9). - Если какой-то Pod упадёт с ошибкой, он будет перезапущен (новый Pod), но не более 3 раз (
backoffLimit: 3). - Job завершится успешно, когда 10 Pod'ов завершатся с кодом 0 (
completions: 10). - Если общее время выполнения превысит 3600 секунд, все Pod'ы будут убиты, Job — Failed.
Такая конфигурация позволяет эффективно управлять ресурсоёмкими пакетными задачами, такими как ночная обработка логов, массовая конвертация данных или запуск нагрузочных тестов.