Задания в приложениях контейнеров Azure

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

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

Сравнение приложений и заданий контейнеров

В приложениях контейнеров Azure есть два типа вычислительных ресурсов: приложения и задания.

Приложения — это службы, которые выполняются непрерывно. Если контейнер в приложении завершается сбоем, он перезапускается автоматически. Примерами приложений являются HTTP API, веб-приложения и фоновые службы, которые непрерывно обрабатывают входные данные.

Задания — это задачи, которые запускаются, запускаются в течение конечной длительности и завершаются по завершении. Каждое выполнение задания обычно выполняет одну единицу работы. Выполнение заданий запускается вручную, по расписанию или в ответ на события. Примеры заданий включают пакетные процессы, выполняемые по запросу и запланированные задачи.

Пример сценариев

В следующей таблице сравниваются распространенные сценарии для приложений и заданий:

Контейнер Вычислительный ресурс Примечания.
HTTP-сервер, обслуживающий веб-содержимое и запросы API Приложение Настройте правило масштабирования HTTP.
Процесс, который создает финансовые отчеты ночью Работа Используйте тип задания Schedule и настройте выражение cron.
Непрерывно выполняющаяся служба, которая обрабатывает сообщения из очереди Служебная шина Azure Приложение Настройка настраиваемого правила масштабирования.
Задание, обрабатывающее одно сообщение или небольшой пакет сообщений из очереди Azure и выход из нее Работа Используйте тип задания события и настройте настраиваемое правило масштабирования для активации выполнения заданий при наличии сообщений в очереди.
Фоновая задача, активировающаяся по запросу и завершающая работу Работа Используйте тип задания вручную и запускайте выполнение вручную или программно с помощью API.
Локальный запуск GitHub Actions или агент Azure Pipelines Работа Используйте тип задания события и настройте правило масштабирования GitHub Actions или Azure Pipelines.
Приложение Функции Azure Приложение Разверните Функции Azure в приложениях контейнеров.
Приложение на основе событий с помощью пакета SDK веб-заданий Azure Приложение Настройте правило масштабирования для каждого источника событий.

Основные понятия

Среда "Приложения контейнеров" — это безопасная граница вокруг одного или нескольких приложений контейнеров и заданий. Задания включают несколько ключевых понятий:

  • Задание. Задание определяет конфигурацию по умолчанию, используемую для каждого выполнения задания. Конфигурация включает образ контейнера для использования, ресурсы для выделения и команды для выполнения.
  • Выполнение задания: выполнение задания — это один запуск задания, который активируется вручную, по расписанию или в ответ на событие.
  • Реплика задания. Обычное выполнение задания выполняет одну реплика, определенную конфигурацией задания. В расширенных сценариях выполнение задания может выполнять несколько реплика.

Обзор заданий приложений контейнеров Azure.

Типы триггеров задания

Тип триггера задания определяет, как запускается задание. Доступны следующие типы триггеров:

  • Вручную. Задания вручную активируются по запросу.
  • Расписание. Запланированные задания активируются в определенное время и могут выполняться многократно.
  • Событие: задания, управляемые событиями, активируются такими событиями, как сообщение, поступающее в очередь.

Задания вручную

Задания вручную активируются по запросу с помощью Azure CLI, портал Azure или запроса к API Azure Resource Manager.

Примеры заданий вручную:

  • Однократная обработка таких задач, как перенос данных из одной системы в другую.
  • Сайт электронной коммерции, работающий в качестве приложения-контейнера, запускает выполнение задания для обработки инвентаризации при размещении заказа.

Чтобы создать задание вручную, используйте тип Manualзадания.

Чтобы создать задание вручную с помощью Azure CLI, используйте az containerapp job create команду. В следующем примере создается задание вручную с именем my-job в группе ресурсов с именем my-resource-group и средой приложений контейнеров с именем my-environment:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Manual" \
    --replica-timeout 1800 \
    --image "mcr.microsoft.com/k8se/quickstart-jobs:latest" \
    --cpu "0.25" --memory "0.5Gi"

Изображение mcr.microsoft.com/k8se/quickstart-jobs:latest — это общедоступный образ контейнера, который запускает задание, которое ожидает несколько секунд, выводит сообщение в консоль, а затем завершает работу. Сведения о проверке подлинности и использовании частного образа контейнера см. в разделе "Контейнеры".

Приведенная выше команда создает задание только. Чтобы начать выполнение задания, см. статью "Запуск выполнения задания по запросу".

Запланированные задания

Чтобы создать запланированное задание, используйте тип Scheduleзадания.

Задания контейнерных приложений используют выражения cron для определения расписаний. Он поддерживает стандартный формат выражения cron с пятью полями для минуты, часа, дня месяца, месяца и дня недели. Ниже приведены примеры выражений cron:

Expression Description
*/5 * * * * Выполняется каждые 5 минут.
0 */2 * * * Выполняется каждые два часа.
0 0 * * * Работает каждый день в полночь.
0 0 * * 0 Работает каждый воскресенье в полночь.
0 0 1 * * Работает в первый день каждого месяца в полночь.

Выражения Cron в запланированных заданиях оцениваются в формате UTC.

Чтобы создать запланированное задание с помощью Azure CLI, используйте az containerapp job create команду. В следующем примере создается запланированное задание с именем my-job в группе ресурсов с именем my-resource-group и средой приложений контейнеров с именем my-environment:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Schedule" \
    --replica-timeout 1800 \
    --image "mcr.microsoft.com/k8se/quickstart-jobs:latest" \
    --cpu "0.25" --memory "0.5Gi" \
    --cron-expression "*/1 * * * *"

Изображение mcr.microsoft.com/k8se/quickstart-jobs:latest — это общедоступный образ контейнера, который запускает задание, которое ожидает несколько секунд, выводит сообщение в консоль, а затем завершает работу. Сведения о проверке подлинности и использовании частного образа контейнера см. в разделе "Контейнеры".

Выражение */1 * * * * cron выполняет задание каждую минуту.

Задания на основе событий

Задания, управляемые событиями, активируются событиями из поддерживаемых пользовательских масштабировщиков. Примеры заданий на основе событий:

  • Задание, которое выполняется при добавлении нового сообщения в очередь, например Служебная шина Azure, Kafka или RabbitMQ.
  • Локальный runner GitHub Actions или агент Azure DevOps, который выполняется при очереди нового задания в рабочем процессе или конвейере.

Приложения-контейнеры и задания на основе событий используют масштабировщики KEDA . Они оба оценивают правила масштабирования в интервале опроса для измерения объема событий для источника событий, но способ использования результатов отличается.

В приложении каждый реплика непрерывно обрабатывает события и правило масштабирования определяет количество реплика для выполнения по требованию. В заданиях, управляемых событиями, каждое выполнение задания обычно обрабатывает одно событие, а правило масштабирования определяет количество выполняемых заданий.

Используйте задания, когда каждому событию требуется новый экземпляр контейнера с выделенными ресурсами или требуется выполняться в течение длительного времени. Задания, управляемые событиями, концептуально похожи на задания масштабирования KEDA.

Чтобы создать задание, управляемое событиями, используйте тип Eventзадания.

Чтобы создать задание на основе событий с помощью Azure CLI, используйте az containerapp job create команду. В следующем примере создается задание на основе событий с именем my-job в группе ресурсов с именем my-resource-group и средой приложений контейнеров с именем my-environment:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Event" \
    --replica-timeout 1800 \
    --image "docker.io/myuser/my-event-driven-job:latest" \
    --cpu "0.25" --memory "0.5Gi" \
    --min-executions "0" \
    --max-executions "10" \
    --scale-rule-name "queue" \
    --scale-rule-type "azure-queue" \
    --scale-rule-metadata "accountName=mystorage" "queueName=myqueue" "queueLength=1" \
    --scale-rule-auth "connection=connection-string-secret" \
    --secrets "connection-string-secret=<QUEUE_CONNECTION_STRING>"

В примере настраивается правило масштабирования очереди служба хранилища Azure.

Полное руководство см. в разделе "Развертывание задания на основе событий".

Запуск выполнения задания по запросу

Для любого типа задания можно запустить выполнение задания по запросу.

Чтобы запустить выполнение задания с помощью Azure CLI, используйте az containerapp job start команду. В следующем примере запускается выполнение задания с именем my-job в группе ресурсов с именем my-resource-group:

az containerapp job start --name "my-job" --resource-group "my-resource-group"

При запуске выполнения задания можно переопределить конфигурацию задания. Например, можно переопределить переменную среды или команду запуска для выполнения одного задания с различными входными данными. Переопределенная конфигурация используется только для текущего выполнения и не изменяет конфигурацию задания.

Внимание

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

Чтобы переопределить конфигурацию задания при запуске выполнения, используйте az containerapp job start команду и передайте файл YAML, содержащий шаблон, используемый для выполнения. В следующем примере запускается выполнение задания с именем my-jobmy-resource-groupв группе ресурсов.

Получите текущую конфигурацию задания с az containerapp job show помощью команды и сохраните шаблон в файл с именем my-job-template.yaml:

az containerapp job show --name "my-job" --resource-group "my-resource-group" --query "properties.template" --output yaml > my-job-template.yaml

Параметр --query "properties.template" возвращает только конфигурацию шаблона задания.

Измените my-job-template.yaml файл, чтобы переопределить конфигурацию задания. Например, чтобы переопределить переменные среды, измените env раздел:

containers:
- name: print-hello
  image: ubuntu
  resources:
    cpu: 1
    memory: 2Gi
  env:
  - name: MY_NAME
    value: Azure Container Apps jobs
  args:
  - /bin/bash
  - -c
  - echo "Hello, $MY_NAME!"

Запустите задание с помощью шаблона:

az containerapp job start --name "my-job" --resource-group "my-resource-group" \
    --yaml my-job-template.yaml

Получение журнала выполнения заданий

Каждое задание контейнерных приложений поддерживает журнал последних выполнений заданий.

Чтобы получить состояния выполнения заданий с помощью Azure CLI, используйте az containerapp job execution list команду. В следующем примере возвращается состояние последнего выполнения задания, именованного в группе ресурсов с именем my-jobmy-resource-group:

az containerapp job execution list --name "my-job" --resource-group "my-resource-group"

Журнал выполнения запланированных заданий и заданий на основе событий ограничен самыми последними 100 успешными и неудачными выполнениями заданий.

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

Расширенная конфигурация задания

Задания контейнерных приложений поддерживают расширенные параметры конфигурации, такие как параметры контейнера, повторные попытки, время ожидания и параллелизм.

Параметры контейнера

Параметры контейнера определяют контейнеры для запуска в каждом реплика выполнения задания. К ним относятся переменные среды, секреты и ограничения ресурсов. Дополнительные сведения см. в разделе "Контейнеры". Запуск нескольких контейнеров в одном задании — это расширенный сценарий. Большинство заданий выполняют один контейнер.

Параметры задания

В следующей таблице приведены параметры задания, которые можно настроить:

Параметр Свойство диспетчера ресурсов Azure Параметр CLI Description
Тип вакансии triggerType --trigger-type Тип задания. (Manual, или ScheduleEvent)
Время ожидания реплики replicaTimeout --replica-timeout Максимальное время в секундах, дожидающийся завершения реплика.
Интервал опроса pollingInterval --polling-interval Время в секундах, ожидающее между опросом событий. Значение по умолчанию — 30 секунд.
Ограничение повторных попыток реплики replicaRetryLimit --replica-retry-limit Максимальное число попыток повторения неудачного реплика. Чтобы завершить реплика без повторных попыток, задайте для значения 0значение .
Параллелизм parallelism --parallelism Количество реплика для каждого выполнения. Для большинства заданий задайте для параметра значение 1.
Число завершения реплики replicaCompletionCount --replica-completion-count Количество реплика успешно завершено для успешного выполнения. Большинство из них равно или меньше параллелизма. Для большинства заданий задайте для параметра значение 1.

Пример

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

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Schedule" \
    --replica-timeout 1800 --replica-retry-limit 3 --replica-completion-count 5 --parallelism 5 \
    --image "myregistry.azurecr.io/quickstart-jobs:latest" \
    --cpu "0.25" --memory "0.5Gi" \
    --command "/startup.sh" \
    --env-vars "MY_ENV_VAR=my-value" \
    --cron-expression "0 0 * * *"  \
    --registry-server "myregistry.azurecr.io" \
    --registry-username "myregistry" \
    --registry-password "myregistrypassword"

Ограничения заданий

Следующие функции не поддерживаются:

  • Dapr
  • Входящий трафик и связанные функции, такие как личные домены и SSL-сертификаты

Следующие шаги