Облачная платформаAdvanced

Создание CronJob

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

CronJob — это рабочая нагрузка Kubernetes, предназначенная для выполнения периодических задач, аналогично crontab в Linux. CronJobs используют формат Cron. Они периодически выполняют задания по заранее определённым расписаниям.

CronJobs помогают автоматизировать и управлять задачами, обеспечивая их своевременное выполнение и снижая нагрузку ручного управления. Они подходят для различных сценариев, включая:

  • Periodic backups: Необходимо периодически выполнять задачи резервного копирования, такие как резервные копии баз данных и файловой системы.
  • Data synchronization: Данные периодически синхронизируются с основного узла на вторичный узел или в облачное хранилище.
  • Log clearing: Необходимо периодически очищать старые файлы журналов, чтобы освободить место для хранения.
  • Periodic report: Необходимо периодически генерировать и отправлять отчёты, такие как отчёты о состоянии системы и отчёты о производительности.
  • Maintenance tasks: Необходимо выполнять регулярные задачи обслуживания системы, такие как очистка кэша и обновление компонентов.
  • Scheduled tasks: Необходимо выполнять конкретные задачи в определённый момент времени или в течение периода, такие как перезапуск сервисов и проверка состояния.

Требования

  • Кластер доступен. Подробную информацию о том, как создать кластер, см. Buying a Standard/Turbo Cluster.
  • В кластере есть доступные узлы. Если узлы недоступны, создайте их, обратившись к Creating a Node.

Использование консоли CCE

  1. Войдите в CCE console.
  2. Нажмите имя кластера, чтобы перейти в консоль кластера, выберите Workloads в панели навигации и нажмите Create Workload в правом верхнем углу.
  3. Настройте основную информацию о рабочей нагрузке.

    Parameter

    Description

    Workload Type

    Выберите Cron Job. Для получения подробной информации о различных типах рабочих нагрузок см. Workload Overview.

    Workload Name

    Введите имя для рабочей нагрузки. Введите от 1 до 52 символов, начинающихся со строчной буквы и заканчивающихся строчной буквой или цифрой. Разрешены только строчные буквы, цифры и дефисы (-).

    Namespace

    Select a namespace for the workload. The default value is default. You can also click Create Namespace to create one. For details, see Creating a Namespace.

    Container Runtime

    Стандартный кластер CCE использует общий runtime по умолчанию, тогда как кластер CCE Turbo поддерживает как общий, так и защищённый runtime. Для получения подробной информации об их различиях см. Secure Runtime and Common Runtime.

  4. Настройте настройки контейнера для рабочей нагрузки.

    • Container Information: Click Add Container on the right to configure multiple containers for the pod.
      Caution

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

      • Basic Info: Configure basic information about the container.

        Parameter

        Description

        Container Name

        Введите имя для container.

        Pull Policy

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

        Image Name

        Нажмите Select Image и выберите образ, используемый container.

        Чтобы использовать сторонний образ, непосредственно введите путь к образу. Убедитесь, что image access credential может использоваться для доступа к image repository. Подробнее см. Using Third-Party Images.

        Image Tag

        Выберите тег образа для развертывания.

        CPU Quota

        • Request: минимальное количество ядер CPU, требуемое container. Значение по умолчанию — 0.25 ядра.
        • Limit: максимальное количество ядер CPU, которое может использовать container. Это предотвращает чрезмерное использование ресурсов container.

        Если Request и Limit не указаны, квота не ограничивается. Для получения дополнительной информации и рекомендаций по Request и Limit см. Configuring Container Specifications.

        Memory Quota

        • Request: минимальное количество памяти, необходимое контейнеру. Значение по умолчанию — 512 MiB.
        • Limit: максимальное количество памяти, доступное контейнеру. Когда использование памяти превышает указанный лимит памяти, контейнер будет завершён.

        Если Request и Limit не указаны, квота не ограничивается. Для получения дополнительной информации и рекомендаций по Request и Limit см. Configuring Container Specifications.

        (Optional) GPU Quota

        Настраивается только при наличии в кластере узлов GPU и установленного дополнения CCE AI Suite (NVIDIA GPU).

        • Do not use: GPU не будет использоваться.
        • GPU card: GPU выделяется для контейнера.
        • GPU Virtualization: процент ресурсов GPU, используемых контейнером. Например, если этот параметр установлен в 10%, контейнер будет использовать 10 % ресурсов GPU.

        Подробности о том, как использовать GPU в кластере, см. Default GPU Scheduling in Kubernetes.

        (Optional) Privileged Container

        Программы в привилегированном контейнере обладают определёнными привилегиями. Если эта опция включена, контейнеру будут предоставлены привилегии. Например, привилегированные контейнеры могут управлять сетевыми устройствами на хост‑машине, изменять параметры ядра, получать доступ ко всем устройствам узла.

        Для получения дополнительной информации см. Pod Security Standards.

        (Optional) Init Container

        Определяет, использовать ли контейнер в качестве init‑контейнера. Init‑контейнер не поддерживает health check.

        Init‑контейнер — это специальный контейнер, который запускается до того, как будут запущены другие контейнеры приложений в pod. Каждый pod может содержать несколько контейнеров. Кроме того, pod может содержать один или несколько init‑контейнеров. Контейнеры приложений в pod запускаются и работают только после завершения работы всех init‑контейнеров. Для получения подробной информации см. Init Containers.

        (Необязательно) Run Option

        Добавьте параметры запуска для контейнера. Для получения подробной информации см. Pod. CCE поддерживает следующие параметры запуска:

        • stdin: позволяет контейнерам получать ввод из внешних источников, таких как терминалы или другие потоки ввода.
        • tty: выделяет псевдотерминал контейнерам, позволяя отправлять им команды так, как если бы вы использовали локальный терминал.

          В большинстве случаев tty включается вместе со stdin, указывая, что терминал (tty) связан со стандартным вводом (stdin) контейнера. Это позволяет выполнять интерактивные операции, аналогичные команде kubectl exec -i -t. Отличие заключается в том, что этот параметр настраивается при запуске pod.

      • (Optional) Lifecycle: Configure operations to be performed in a specific phase of the container lifecycle, such as Startup Command, Post-Start, and Pre-Stop. For details, see Configuring the Container Lifecycle.
      • (Optional) Environment Variables: Configure variables for the container running environment using key-value pairs. These variables transfer external information to containers running in pods and can be flexibly modified after application deployment. For details, see Configuring Environment Variables.
    • Image Access Credential: Select the credential used for accessing the image repository. The default value is default-secret. You can use default-secret to access images in SWR Shared Edition. For details about default-secret, see default-secret.
    • (Optional) GPU: All is selected by default. The workload instance will be scheduled to the node of the specified GPU type.

  5. Configure execution settings.

    Parameter

    Description

    Concurrency Policy

    Поддерживаются следующие режимы:

    • Forbid: Новая задача может быть создана только после завершения предыдущей.
    • Allow: CronJob позволяет одновременно запускать задачи, которые захватывают ресурсы кластера.
    • Replace: Если пришло время запускать новую задачу, но предыдущая ещё не завершена, CronJob заменяет текущую запущенную задачу новой.

    Настройки политики

    Укажите, когда будет выполнен новый CronJob. Настройки политики в YAML реализуются с помощью cron‑выражений.

    • CronJob выполняется с фиксированным интервалом. Единица может быть минутой, часом, днём или месяцем. Например, если CronJob выполняется каждые 30 минут, его cron‑выражение выглядит */30 * * * *. Задача будет выполняться с интервалом 30 минут, начиная с начала часа, например, 00:00:00, 00:30:00, 01:00:00 и ....
    • CronJob выполняется в фиксированное время (по месяцам). Например, если CronJob выполняется в 00:00 первого дня каждого месяца, его cron‑выражение выглядит 0 0 1 */1 *. Задача будет выполнена в ****-01-01 00:00:00, ****-02-01 00:00:00 и ....
    • CronJob выполняется еженедельно. Например, если CronJob выполняется в 00:00 каждый понедельник, его cron‑выражение выглядит 0 0 * * 1. Задача будет выполнена в ****-**-01 00:00:00 в понедельник, ****-**-08 00:00:00 в понедельник и ....
    • Custom Cron Expression: Для получения подробностей о том, как использовать cron‑выражения, см. CronJob.
    ПРИМЕЧАНИЕ:
    • Если CronJob выполняется в фиксированное время (по месяцам) и в месяце нет указанного количества дней, CronJob не будет выполнен в этом месяце. Например, выполнение будет пропущено в феврале, если дата установлена на 30.
    • В соответствии с определением cron фиксированный период не является строгим. Диапазон единицы времени делится от 0 по периоду. Например, если единица — минута, значение варьируется от 0 до 59. Если значение нельзя разделить точно, последний период сбрасывается. Поэтому точный период может быть представлен только тогда, когда период делится без остатка.

      Возьмём CronJob, который запускается каждый час, в качестве примера. Если интервал может делить 24 часа точно, например /2, /3, /4, /6, /8 и /12, период может быть точно представлен. Однако если используется иной период, последний период будет сбрасываться в начале каждого нового дня. Например, если cron‑выражение выглядит * */12 * * *, задача будет запускаться в 00:00:00 и 12:00:00 каждый день. Аналогично, если cron‑выражение выглядит * */13 * * *, задача будет запускаться в 00:00:00 и 13:00:00 каждый день. Обратите внимание, что последний период будет сбрасываться в 00:00:00 следующего дня, даже если 13 часов ещё не прошли.

    Часовой пояс

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

    Job Records

    Настройте количество успешных или неудачных заданий, которые резервируются. Если значение установлено в 0, задания не будут резервироваться после завершения или неудачи.

  6. (Необязательно) Настройте advanced settings для рабочей нагрузки.

    Parameter

    Description

    Labels and Annotations

    Добавьте метки или аннотации для pod‑ов, используя пары ключ‑значение. После настройки нажмите Confirm. Подробную информацию о метках и аннотациях см. в Configuring Labels and Annotations.

    Network Configuration

    • Pod ingress/egress bandwidth limit: Вы можете задать ограничения пропускной способности входящего и исходящего трафика для pod‑ов. Подробную информацию см. в Configuring QoS for a Pod.
    • Включить specified container network configuration: доступно только для кластеров, поддерживающих эту функцию. После включения specified container network configuration рабочая нагрузка будет использовать подсеть и группу безопасности, определённые в конфигурации. Подробную информацию см. в Binding a Subnet and Security Group to a Namespace or Workload Using a Container Network Configuration.
    • Укажите имя container network configuration: можно выбрать только пользовательскую container network configuration, у которой тип связанного ресурса — workload.
    • IPv6 shared bandwidth: доступно только для кластеров, поддерживающих эту функцию. После включения функции вы можете настроить совместно используемую пропускную способность для pod‑а с IPv6 dual‑stack сетевыми интерфейсами. Подробную информацию см. в Configuring a Shared Bandwidth for Dual-Stack Pods in a CCE Turbo Cluster.

  7. Нажмите Create Workload в правом нижнем углу и проверьте, изменился ли статус рабочей нагрузки на Started.

Using kubectl

CronJob имеет следующие параметры конфигурации:

  • .spec.schedule: принимает строку в формате Cron, например, 0 * * * * или @hourly, в качестве времени планирования создаваемых и выполняемых задач.
  • .spec.jobTemplate: определяет задачи для выполнения и имеет ту же схему, что и при Creating a Job Using kubectl.
  • .spec.startingDeadlineSeconds: задает срок начала задачи.
  • .spec.concurrencyPolicy: определяет, как обрабатывать одновременные выполнения задачи, созданной CronJob. Поддерживаются следующие варианты:
    • Allow (значение по умолчанию): разрешает одновременный запуск задач.
    • Forbid: запрещает одновременные запуски, пропуская следующий запуск, если предыдущий ещё не завершён.
    • Replace: отменяет текущую запущенную задачу и заменяет её новой.

Ниже приведён пример CronJob, сохранённый в файле cronjob.yaml.

Note

В кластерах версии v1.21 и новее CronJob apiVersion — batch/v1.

В кластерах версии ниже v1.21 CronJob apiVersion — batch/v1beta1.

apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *" # The job is executed every minute.
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
imagePullSecrets:
- name: default-secret

Запустите задачу.

  1. Создайте CronJob.

    kubectl create -f cronjob.yaml

    Отображается информация, аналогичная следующей:

    cronjob.batch/hello created

  2. Проверьте состояние выполнения CronJob:

    kubectl get cronjob

    Вывод команды:

    NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
    hello */1 * * * * <none> False 0 59s 2m36s

  3. Проверьте job, который запускается по расписанию.

    kubectl get jobs

    Вывод команды:

    NAME COMPLETIONS DURATION AGE
    hello-1597387980 1/1 27s 45s

  4. Проверьте pods, запущенные job.

    kubectl get pod

    Вывод команды:

    NAME READY STATUS RESTARTS AGE
    hello-1597387980-tjv8f 0/1 Completed 0 114s

  5. Проверьте pod logs. Ожидается, что в журналах будет отображено "Hello from the Kubernetes cluster".

    kubectl logs hello-1597387980-tjv8f

    Вывод команды:

    Fri Aug 14 06:56:31 UTC 2020
    Hello from the Kubernetes cluster

  6. Удалите CronJob. При удалении CronJob его связанные задачи и pods удаляются соответствующим образом.

    kubectl delete cronjob hello

    Вывод команды:

    cronjob.batch "hello" deleted

Связанные операции

После создания CronJob вы можете выполнить операции, перечисленные в Table 1.

Table 1 Other operations

Operation

Description

Редактирование YAML-файла

Нажмите More > Edit YAML рядом с именем CronJob, чтобы отредактировать YAML-файл текущей job.

Остановка CronJob

  1. Выберите задачу, которую нужно остановить, и нажмите Stop в столбце Operation.
  2. Нажмите Yes.

Удаление CronJob

  1. Выберите целевой CronJob и выберите More > Delete в столбце Operation.
  2. Нажмите Yes.

    Удалённые задачи нельзя восстановить. Будьте осторожны при удалении задачи.