Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Задания для приложений контейнеров Azure позволяют выполнять контейнерные задачи, которые выполняются ограниченное время, а затем останавливаются. Задания можно использовать для выполнения таких задач, как обработка данных, машинное обучение или любой сценарий, в котором требуется обработка по запросу.
Приложения и задания контейнеров выполняются в той же среде, что позволяет им совместно использовать такие возможности, как сеть и ведение журнала.
Сравнение контейнерных приложений и заданий
В приложениях контейнеров Azure есть два типа вычислительных ресурсов: приложения и задания.
Приложения — это службы, которые выполняются непрерывно. Если контейнер в приложении завершается ошибкой, он перезапускается автоматически. Примерами приложений являются HTTP API, веб-приложения и фоновые службы, которые непрерывно обрабатывают входные данные.
Задания — это задачи, которые выполняются в течение ограниченного времени и останавливаются по завершении. Каждое выполнение задания обычно выполняет одну единицу работы. Выполнение заданий запускается вручную, по расписанию или в ответ на события. Примеры заданий включают пакетные процессы, выполняемые по запросу и запланированные задачи.
Пример сценариев
В следующей таблице сравниваются распространенные сценарии для приложений и заданий:
| Контейнер | Вычислительный ресурс | Примечания. |
|---|---|---|
| HTTP-сервер, обслуживающий веб-содержимое и запросы API | Приложение | Настройте правило масштабирования HTTP. |
| Процесс, который создает финансовые отчеты ночью | Работа | Используйте тип задания Schedule и настройте выражение cron. |
| Служба непрерывного выполнения, которая обрабатывает сообщения из очереди в Service Bus Azure | Приложение | Настройка настраиваемого правила масштабирования. |
| Задание, обрабатывающее одно сообщение или небольшой пакет сообщений из очереди Azure, а затем останавливается | Работа | Используйте тип задания события и настройте настраиваемое правило масштабирования для активации выполнения заданий при наличии сообщений в очереди. |
| Фоновая задача, которая активируется по запросу и останавливается после завершения | Работа | Используйте тип задания вручную и запускайте выполнение вручную или программно с помощью API. |
| Самостоятельно размещенный раннер GitHub Actions или агент Azure Pipelines | Работа | Используйте тип задания события и настройте правило масштабирования GitHub Actions или Azure Pipelines. |
| Приложение Azure Functions | Приложение | Разверните Azure Functions в контейнерных приложениях. |
| Приложение на основе событий, использующее пакет SDK веб-заданий Azure | Приложение | Настройте правило масштабирования для каждого источника событий. |
Основные понятия
Среда контейнерных приложений — это безопасная граница вокруг одного или нескольких контейнерных приложений и заданий. Ниже приведены некоторые ключевые понятия:
- Задание: Задание определяет конфигурацию по умолчанию, которая используется для каждого выполнения задания. Конфигурация включает образ контейнера для использования, ресурсы для выделения и команды для выполнения.
- Выполнение задания: Выполнение задания — это один запуск задания, который активируется вручную, по расписанию или в ответ на событие.
- Реплика задания: обычное выполнение задания выполняет одну реплику, определенную конфигурацией задания. В сложных сценариях выполнение задания может запустить несколько реплик.
Разрешения
Чтобы запустить задание для контейнерного приложения, необходимо иметь соответствующие разрешения. Убедитесь, что у учетной записи пользователя или субъекта-службы назначены следующие роли:
- Участник контейнерных приложений: Позволяет создавать и управлять контейнерными приложениями и заданиями.
- Средство чтения мониторинга (необязательно): Позволяет просматривать данные мониторинга для заданий.
- Пользовательская роль: для более детализированных разрешений можно создать пользовательскую роль со следующими действиями:
- microsoft.app/jobs/start/action
- microsoft.app/jobs/read
- microsoft.app/jobs/execution/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 \
--replica-retry-limit 0 \
--replica-completion-count 1 \
--parallelism 1 \
--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:
| Выражение | Описание |
|---|---|
*/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 \
--replica-retry-limit 0 \
--parallelism 1 \
--replica-completion-count 1 \
--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 Service Bus, 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 Storage.
Полное руководство см. в разделе "Развертывание задания на основе событий".
Запуск выполнения задания по запросу
Для любого типа задания можно запустить выполнение задания по запросу.
Чтобы запустить выполнение задания с помощью 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 | Описание |
|---|---|---|---|
| Тип вакансии | triggerType |
--trigger-type |
Тип задания (Manual, Scheduleили Event). |
| Время ожидания реплики | replicaTimeout |
--replica-timeout |
Максимальное время в секундах для ожидания завершения реплики. |
| Интервал опроса | pollingInterval |
--polling-interval |
Задержка в секундах между опросами событий. Значение по умолчанию — 30 секунд. |
| Ограничение повторных попыток реплики | replicaRetryLimit |
--replica-retry-limit |
Максимальное количество попыток повторной реплики. Чтобы выполнить сбой реплики без повторных попыток, задайте для параметра значение 0. Параметр replicaTimeout имеет приоритет, если срок действия истекает до завершения всех повторных попыток. |
| Параллелизм | 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"
Сетевое взаимодействие для работы и коммуникация между приложениями
Когда модуль pod задания запускается, контейнеры на стороне (например, прокси-сервер Envoy) гарантированно будут готовы до начала выполнения основного контейнера заданий. Это гарантирует, что вызовы между приложениями, выполненные заданием при запуске, успешно выполняются без сбоев подключения.
Замечание
Если ваша задача вызывает другие приложения-контейнеры при запуске, вам не нужно добавлять логику повторных попыток для начальной готовности сайдкара. Платформа обрабатывает это автоматически.
Ограничения работ
Следующие функции не поддерживаются:
- Dapr
- Вход и связанные функции, такие как пользовательские домены и SSL-сертификаты