Задания в приложениях контейнеров 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 Monitor (необязательно ): позволяет просматривать данные мониторинга для заданий.
- Пользовательская роль: для более детализированных разрешений можно создать пользовательскую роль со следующими действиями:
- Microsoft.App/containerApps/jobs/start/action
- Microsoft.App/containerApps/jobs/read
- Microsoft.App/containerApps/jobs/executions/read
Дополнительные сведения о назначении ролей и разрешений см. в контроль доступа на основе ролей 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-job
my-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-job
my-resource-group
:
az containerapp job execution list --name "my-job" --resource-group "my-resource-group"
Журнал выполнения запланированных заданий и заданий на основе событий ограничен самыми последними 100 успешными и неудачными выполнениями заданий.
Чтобы вывести список всех выполнений задания или получить подробные выходные данные из задания, запросите поставщик журналов, настроенный для среды "Приложения контейнеров".
Расширенная конфигурация задания
Задания контейнерных приложений поддерживают расширенные параметры конфигурации, такие как параметры контейнера, повторные попытки, время ожидания и параллелизм.
Параметры контейнера
Параметры контейнера определяют контейнеры для запуска в каждой реплике выполнения задания. К ним относятся переменные среды, секреты и ограничения ресурсов. Дополнительные сведения см. в разделе "Контейнеры". Запуск нескольких контейнеров в одном задании — это расширенный сценарий. Большинство заданий выполняют один контейнер.
Параметры задания
В следующей таблице приведены параметры задания, которые можно настроить:
Параметр | Свойство диспетчера ресурсов Azure | Параметр CLI | Description |
---|---|---|---|
Тип вакансии | triggerType |
--trigger-type |
Тип задания. (Manual , или Schedule Event ) |
Время ожидания реплики | 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-сертификаты