Создание Cron Job
Cron Job выполняется периодически по расписанию. Можно запустить синхронизацию времени для всех активных узлов в определенный момент времени.
Cron Job аналогичен crontab Linux. Crontab — это список команд, которые используются для изменения и управления Cron Job. Характеристики Cron Job:
-
Запускается только один раз в указанное время.
-
Запускается периодически в указанное время.
Cron Job используется следующим образом:
-
Планирует Jobs на указанное время.
-
Создает Jobs для периодического выполнения, например, резервное копирование базы данных и отправка электронной почты.
Перед началом работы
Создайте кластер и узел, проверьте, что они находится в статусе «Running».
Создание рабочей нагрузки в консоли ССЕ
-
Войдите в консоль управления Advanced:
-
В списке сервисов выберите Cloud Container Engine.
-
В консоли управления CCE выберите Clusters.
-
Нажмите на название созданного кластера.
-
В левом меню выберите Workloads.
-
Перейдите на вкладку Cron Job.
-
Нажмите Create Workload.
-
Заполните поле Basic Info:
Параметр
Описание
Workload Type
Выберите тип рабочей нагрузки Cron Job.
Workload Name
Укажите название рабочей нагрузки.
Namespace
Выберите пространство имен рабочей нагрузки.
По умолчанию — default. Чтобы создать новое, нажмите Create Namespace.
Cluster Name
Название кластера указано по умолчанию.
(Опционально) Description
Описание рабочей нагрузки.
Добавьте при необходимости.
-
Заполните поле Container Settings согласно таблице ниже. Чтобы настроить несколько контейнеров в поде, нажмите Add Container.
Параметр
Описание
Basic Info
Выполните базовые настройки контейнера.
Lifecycle
Настройте параметры жизненного цикла контейнера.
Environment Variables
Настройте окружение.
Image Access Credential
Укажите учетные данные, используемые для доступа к хранилищу образов.
По умолчанию — default-secret. Этот секрет можно использовать для доступа к образам в SWR. Чтобы создать новый, нажмите Create Secret.
GPU
Инстанс рабочей нагрузки будет запланирован для узла с указанным типом графической карты GPU.
По умолчанию — All.
-
Чтобы настроить расписание, заполните поле Execution Settings:
Параметр
Описание
Concurrency Policy
Политика параллелизма. Выберите один из трех режимов:
-
Forbid — новый Job не может быть создан до завершения предыдущего Job.
-
Allow — Cron Job разрешает параллельно запускать Jobs, которые освобождают ресурсы кластера.
-
Replace — новый Job заменяет предыдущий Job, когда пришло время создать Job, но предыдущий Job не завершен.
Policy Settings
Этот параметр настройки политики указывает, когда будет запускаться новый Cron Job. Настройки политики в YAML реализуются с помощью cron-выражений.
-
Cron Job выполняется в определенный интервал времени. Единицы измерения — минуты, часы, дни или месяцы. Например, если Cron Job выполняется каждые 30 минут, cron-выражение имеет вид */30 * * * * *, а время выполнения 00:00:00, 00:30:00, 01:00:00 и так далее.
-
Cron Job выполняется в определенное время в течение месяца. Например, если Cron Job выполняется в 00:00 первого дня каждого месяца, cron-выражение имеет вид 0 0 1 */1 *, а время выполнения ****-01-01 00:00:00, ****-02-01 00:00:00 и так далее.
-
Cron Job выполняется в определенное время в течение недели. Например, если Cron Job выполняется в 00:00 каждый понедельник, cron-выражение имеет вид 0 0 * * * 1, а время выполнения ****-**-01 00:00:00 в понедельник, ****-**-08 00:00:00 в понедельник и так далее.
Примечание-
Если Cron Job выполняется в определенное время в течение месяца, а количество дней в месяце превышает заданное, Cron Job не будет выполняться в этом месяце. Например, если количество дней установлено равным 30, но в феврале нет 30 дня, Cron Job пропустит этот месяц и продолжит выполнение 30 марта.
-
В связи с принципом работы cron, последний интервал может не выполниться. Диапазон единиц времени делится по модулю. Например, если единицей измерения является минута, значение варьируется от 0 до 59. Если значение не может быть точно разделено, последний интервал не учитывается.
Например, единица периода — час. Так как 24/2, 24/3, 24/4, 24/6, 24/8 и 24/12 делится без остатка, то все итерации заданного периода будут учитываться. В любом другом случае последний интервал не будет учитываться. Например, если cron-выражение имеет вид * * */12 * * *, то время его выполнения 00:00:00 и 12:00:00 каждый день. Если cron-выражение — * * */13 * * *, то время его выполнения — 00:00:00 и 13:00:00 каждый день. В 00:00 следующего дня задача выполнится при учете того, что период не достиг 13 часов.
Так как /2, /3, /4, /6, /8 и /12 могут быть разделены на 24, то точный период может быть представлен. Если используется другой период, то последний период будет сброшен в начале нового дня. Например, если cron-выражение имеет вид * * */12 * * *, время выполнения 00:00:00 и 12:00:00 каждый день. Если cron-выражение — * * */13 * * *, время выполнения — 00:00:00 и 13:00:00 каждый день. В 00:00 следующего дня время выполнения обновляется, даже если период не достиг 13 часов.
Job Records
Можно установить количество Jobs, которые будут успешно выполнены или не будут выполнены. Установка лимита 0 — соответствует сохранению ни одного Job после его завершения.
-
-
В поле Advanced Settings настройте метки и аннотации.
-
Нажмите Create Workload.
После успешного создания рабочая нагрузка появится со статусом «Running» на вкладке Cron Jobs.
Создание рабочей нагрузки через kubectl
Конфигурация Cron Job:
-
.spec.schedule — принимает строку формата Cron, например, 0 * * * * * или @hourly, в качестве времени расписания создаваемых и выполняемых Jobs.
-
.spec.jobTemplate — определяет запуск Jobs и имеет ту же схему, что и при создании Jobs с помощью kubectl.
-
spec.startingDeadlineSeconds — указывает крайний срок начала Job.
-
.spec.concurrencyPolicy — параметры параллельного выполнения Cron Job. Поддерживаются следующие параметры:
-
Allow (значение по умолчанию) — разрешает параллельное выполнение Jobs.
-
Forbid — запрещает параллельный запуск, пропуская следующий запуск, если предыдущий еще не завершился.
-
Replace — отменяет текущий Job и заменяет его новым.
-
Ниже приведен пример Cron Job, который сохраняется в файле cronjob.yaml.
apiVersion: batch/v1beta1kind: CronJobmetadata:name: hellospec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: helloimage: busyboxargs:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailure
Запуск Job
-
Запустите Cron Job, введите:
kubectl create -f cronjob.yamlВ выводе команды появится:
cronjob.batch/hello created -
Запросите статус выполнения Cron Job:
-
Введите kubectl get cronjob.
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEhello */1 * * * * False 0 <none> 9s -
Введите kubectl get jobs.
NAME COMPLETIONS DURATION AGEhello-1597387980 1/1 27s 45s -
Введите kubectl get pod.
NAME READY STATUS RESTARTS AGEhello-1597387980-tjv8f 0/1 Completed 0 114shello-1597388040-lckg9 0/1 Completed 0 39s -
Введите kubectl logs hello-1597387980-tjv8f.
Fri Aug 14 06:56:31 UTC 2020Hello from the Kubernetes cluster -
Введите kubectl delete cronjob hello.
cronjob.batch "hello" deleted -
При удалении Cron Job связанные с ним поды и Jobs тоже удаляются.
Связанные операции
Операция | Описание |
---|---|
Изменение YAML-файла | Чтобы изменить YAML-файл, нажмите More → Edit YAML рядом с названием Cron Job. |
Остановка Cron Job |
|
Удаление Cron Job |
Удаленные Jobs нельзя восстановить. Соблюдайте осторожность при выполнении этой операции. |
- Перед началом работы
- Создание рабочей нагрузки в консоли ССЕ
- Создание рабочей нагрузки через kubectl