Поделиться через


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

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

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

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

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

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

Политика перезапуска Description
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

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

Чтобы увидеть политику перезапуска в действии, создайте экземпляр контейнера из образа Microsoft 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.