CronJobs

Содержание

Понимание CronJobs

Обратитесь к официальной документации Kubernetes:

CronJob определяет задачи, которые выполняются до завершения и затем останавливаются. Они позволяют запускать одну и ту же Job несколько раз согласно расписанию.

CronJob — это тип контроллера рабочих нагрузок в Kubernetes. Вы можете создать CronJob через веб-консоль или CLI для периодического или повторяющегося запуска непостоянной программы, такой как запланированные резервные копирования, очистки или рассылки электронной почты.

Создание CronJobs

Создание CronJob с помощью CLI

Предварительные требования

  • Убедитесь, что kubectl настроен и подключен к вашему кластеру.

Пример YAML-файла

# example-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *" 
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

Создание CronJobs через YAML

kubectl apply -f example-cronjob.yaml

Создание CronJobs через веб-консоль

Предварительные требования

Получите адрес образа. Образы могут быть взяты из реестра образов, интегрированного администратором платформы через toolchain, либо из сторонних реестров образов.

  • Для образов из интегрированного реестра администратор обычно назначает реестр образов вашему проекту, что позволяет использовать образы из него. Если нужный реестр образов не найден, обратитесь к администратору для выделения.

  • Если используется сторонний реестр образов, убедитесь, что образы можно напрямую загрузить из него в текущем кластере.

Процедура — Настройка базовой информации

  1. В Container Platform перейдите в Workloads > CronJobs в левой боковой панели.

  2. Нажмите Create CronJob.

  3. Выберите или введите образ и нажмите Confirm.

    Примечание: Фильтрация образов доступна только при использовании образов из интегрированного реестра платформы. Например, интегрированный проект с именем containers (docker-registry-projectname) означает, что projectname — имя проекта платформы, а containers — имя проекта в реестре образов.

  4. В разделе Cron Configuration настройте метод выполнения задачи и связанные параметры.

    Execute Type:

    • Manual: Ручное выполнение требует явного запуска задачи вручную для каждого запуска.

    • Scheduled: Запланированное выполнение требует настройки следующих параметров расписания:

      ПараметрОписание
      ScheduleОпределяет расписание cron с использованием синтаксиса Crontab. Контроллер CronJob рассчитывает следующее время выполнения с учётом выбранного часового пояса.

      Примечания:
      • Для Kubernetes версий < v1.25: выбор часового пояса не поддерживается; расписание ДОЛЖНО использовать UTC.
      • Для Kubernetes версий ≥ v1.25: поддерживается расписание с учётом часового пояса (по умолчанию — локальный часовой пояс пользователя).
      Concurrency PolicyОпределяет, как обрабатываются параллельные выполнения Job (Allow, Forbid или Replace согласно спецификации K8s).

    Job History Retention:

    • Установите лимиты хранения для завершённых Jobs:
      • History Limits: лимит истории успешных задач (по умолчанию: 20)
      • Failed Jobs: лимит истории неудачных задач** (по умолчанию: 20)
    • При превышении лимитов хранения старейшие задачи удаляются в первую очередь.
  5. В разделе Job Configuration выберите тип задачи. CronJob управляет Jobs, состоящими из Pods. Настройте шаблон Job в зависимости от типа вашей рабочей нагрузки:

    ПараметрОписание
    Job TypeВыберите режим завершения Job (Non-parallel, Parallel with fixed completion count или Indexed Job согласно паттернам Job в K8s).
    Backoff LimitУстановите максимальное количество попыток повторного запуска перед пометкой Job как неудачной.

Процедура — Настройка Pod

Процедура — Настройка контейнеров

Создание

  • Нажмите Create.

Немедленное выполнение

Поиск ресурса CronJob

  • веб-консоль: в Container Platform перейдите в Workloads > CronJobs в левой боковой панели.
  • CLI:
    kubectl get cronjobs -n <namespace>

Запуск выполнения по требованию

  • веб-консоль: Execute Immediately
    1. Нажмите вертикальное многоточие (⋮) справа в списке cronjob.
    2. Нажмите Execute Immediately. (Или на странице деталей CronJob нажмите Actions в правом верхнем углу и выберите Execute Immediately).
  • CLI:
    kubectl create job --from=cronjob/<cronjob-name> <job-name> -n <namespace>

Проверка деталей Job:

kubectl describe job/<job-name> -n <namespace>
kubectl logs job/<job-name> -n <namespace>

Мониторинг статуса выполнения

СтатусОписание
PendingJob создан, но ещё не запланирован к выполнению.
RunningPod(ы) Job активно выполняются.
SucceededВсе Pods, связанные с Job, успешно завершились (код выхода 0).
FailedПо крайней мере один Pod, связанный с Job, завершился с ошибкой (код выхода не 0).

Удаление CronJobs

Удаление CronJobs через веб-консоль

  1. В Container Platform перейдите в Workloads > CronJobs.
  2. Найдите CronJobs, которые хотите удалить.
  3. В выпадающем меню Actions нажмите кнопку Delete и подтвердите.

Удаление CronJobs через CLI

  kubectl delete cronjob <cronjob-name>