- tocdepth
2
Создание 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/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
Запуск Job
Запустите Cron Job, введите:
kubectl create -f cronjob.yaml
В выводе команды появится:
cronjob.batch/hello created
Запросите статус выполнения Cron Job:
Введите kubectl get cronjob.
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE hello */1 * * * * False 0 <none> 9s
Введите kubectl get jobs.
NAME COMPLETIONS DURATION AGE hello-1597387980 1/1 27s 45s
Введите kubectl get pod.
NAME READY STATUS RESTARTS AGE hello-1597387980-tjv8f 0/1 Completed 0 114s hello-1597388040-lckg9 0/1 Completed 0 39s
Введите kubectl logs hello-1597387980-tjv8f.
Fri Aug 14 06:56:31 UTC 2020 Hello from the Kubernetes cluster
Введите kubectl delete cronjob hello.
cronjob.batch "hello" deleted
Примечание
При удалении Cron Job связанные с ним поды и Jobs тоже удаляются.
Связанные операции
Операция |
Описание |
---|---|
Изменение YAML-файла |
Чтобы изменить YAML-файл, нажмите рядом с названием Cron Job. |
Остановка Cron Job |
|
Удаление Cron Job |
Удаленные Jobs нельзя восстановить. Соблюдайте осторожность при выполнении этой операции. |
для Dev & Test