Выполнение контейнерных задач с помощью политики перезапуска

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

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

В этой статье представлены примеры, в которых используется Azure CLI. Для их выполнения потребуется локально установленная версия Azure CLI 2.0.21 или выше. Кроме того, можно использовать CLI в Azure Cloud Shell.

Политика перезапуска контейнера

При создании группы контейнеров в службе "Экземпляры контейнеров Azure" вы можете выбрать один из трех режимов политики перезапуска.

Политика перезапуска Описание
Always Контейнеры в группе контейнеров всегда перезапускаются. Эта политика применяется по умолчанию, если при создании контейнера не указать другую политику перезапуска.
Never Контейнеры в группе контейнеров никогда не перезапускаются. Такие контейнеры будут выполнены не более одного раза.
OnFailure Контейнеры в группе контейнеров перезапускаются, только если процесс в контейнере завершается ошибкой (то есть с ненулевым кодом выхода). Такие контейнеры будут работать не менее одного раза.

Примечание

Если для группы контейнеров настроен IP-адрес, этот IP-адрес может изменяться при перезапуске группы контейнеров.

Указание политики перезапуска

Способ определения политики перезапуска зависит от способа создания экземпляра контейнера: с помощью Azure CLI, командлетов PowerShell Azure или портала Azure. В Azure CLI следует указать параметр --restart-policy при вызове команды az container create.

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mycontainerimage \
    --restart-policy OnFailure

Пример выполнения до завершения

Чтобы увидеть применение политики перезапуска, создайте экземпляр контейнера из образа aci-wordcount Майкрософт и укажите политику перезапуска OnFailure. Контейнер из этого примера запускает скрипт Python, который по умолчанию анализирует текст пьесы Гамлет Уильяма Шекспира, выдает в STDOUT 10 самых употребимых слов в тексте, и завершает работу.

Запустите этот контейнер с помощью команды az container create, как показано ниже.

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
    --restart-policy OnFailure

Служба "Экземпляры контейнеров Azure" запускает контейнер, а затем останавливает его, когда завершится работа его приложения (или скрипта, как в нашем примере). Когда служба "Экземпляры контейнеров Azure" останавливает контейнер, для которого указана политика перезапуска Never или OnFailure, для состояния контейнера устанавливается значение Terminated (Завершено). Текущее состояние контейнера вы можете проверить с помощью команды az container show, как показано ниже.

az container show \
    --resource-group myResourceGroup \
    --name mycontainer \
    --query containers[0].instanceView.currentState.state

Выходные данные примера:

"Terminated"

Когда состояние контейнера примет значение Terminated (Завершено), вы сможете просмотреть выходные данные выполненной в нем задачи, используя журналы контейнера. Для просмотра выходных данных скрипта выполните команду az container logs, как показано ниже.

az container logs --resource-group myResourceGroup --name mycontainer

Выходные данные:

[('the', 990),
 ('and', 702),
 ('of', 628),
 ('to', 610),
 ('I', 544),
 ('you', 495),
 ('a', 453),
 ('my', 441),
 ('in', 399),
 ('HAMLET', 386)]

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

Дальнейшие шаги

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

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