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

Создание CronJob

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

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

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

  • Периодические резервные копии: Необходимо периодически выполнять задачи резервного копирования, такие как резервные копии баз данных и файловой системы.
  • Синхронизация данных: Данные периодически синхронизируются с основного узла на вторичный узел или облачное хранилище.
  • Очистка журналов: Необходимо периодически удалять старые файлы журналов, чтобы освободить место в хранилище.
  • Периодические отчёты: Необходимо периодически генерировать и отправлять отчёты, такие как отчёты о состоянии системы и отчёты о производительности.
  • Задачи обслуживания: Необходимо выполнять регулярные задачи обслуживания системы, такие как очистка кэша и обновление компонентов.
  • Запланированные задачи: Необходимо выполнять конкретные задачи в определённый момент времени или в течение периода, такие как перезапуск сервисов и проверки состояния.

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

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

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

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

    Параметр

    Описание

    Тип рабочей нагрузки

    Выберите 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 settings для рабочей нагрузки.

    • Container Information: Нажмите Add Container справа, чтобы настроить несколько контейнеров для pod.
      Caution

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

      • Basic Info: Настройте базовую информацию о контейнере.

        Параметр

        Описание

        Container Name

        Введите имя для контейнера.

        Pull Policy

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

        Image Name

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

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

        Image Tag

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

        CPU Quota

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

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

        Memory Quota

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

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

        (Необязательно) 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.

        (Необязательно) Privileged Container

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

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

        (Необязательно) Init Container

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

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

        (Optional) Run Option

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

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

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

      • (Optional) Lifecycle: настройте операции, которые будут выполняться в определённой фазе жизненного цикла контейнера, такие как Startup Command, Post-Start и Pre-Stop. Для получения подробной информации см. Configuring the Container Lifecycle.
      • (Optional) Environment Variables: настройте переменные среды для контейнера, используя пары ключ‑значение. Эти переменные передают внешнюю информацию в контейнеры, работающие в pod, и могут гибко изменяться после развертывания приложения. Для получения подробной информации см. Configuring Environment Variables.
    • Image Access Credential: выберите учётные данные, используемые для доступа к репозиторию образов. Значение по умолчанию — default-secret. Вы можете использовать default-secret для доступа к образам в SWR Shared Edition. Для получения подробной информации о default-secret см. default-secret.
    • (Optional) GPU: по умолчанию выбран All. Инстанс нагрузки будет запланирован на узел указанного типа GPU.

  5. Настройте 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. (Optional) Настройте advanced settings для workload.

    Parameter

    Description

    Labels and Annotations

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

    Network Configuration

    • Ограничение пропускной способности входящего/исходящего трафика pod: Вы можете задать ограничения пропускной способности входящего и исходящего трафика для pod. Подробную информацию см. в Configuring QoS for a Pod.
    • Включить ли указанную конфигурацию сетевого контейнера: доступно только для кластеров, поддерживающих эту функцию. После включения указанной конфигурации сетевого контейнера рабочая нагрузка будет использовать подсеть и группу безопасности, определённые в конфигурации. Подробную информацию см. в Binding a Subnet and Security Group to a Namespace or Workload Using a Container Network Configuration.
    • Укажите имя конфигурации сетевого контейнера: можно выбрать только пользовательскую конфигурацию сетевого контейнера, тип ресурса которой — workload.
    • Общая пропускная способность IPv6: доступно только для кластеров, поддерживающих эту функцию. После включения функции вы можете настроить общую пропускную способность для pod с IPv6‑интерфейсами двойного стека. Подробную информацию см. в 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 (default value): позволяет одновременно выполнять задания.
    • Forbid: запрещает одновременные запуски, пропуская следующий запуск, если предыдущий ещё не завершён.
    • Replace: отменяет текущий запущенный job и заменяет его новым.

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

Note

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

В кластерах версии ниже v1.21 apiVersion CronJob — 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 Другие операции

Операция

Описание

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

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

Остановка CronJob

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

Удаление CronJob

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

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