Прочитать на английском

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


Устранение распространенных проблем с экземплярами контейнеров Azure

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

Если вам нужна дополнительная поддержка, ознакомьтесь с доступными параметрами справки и поддержки в портале Azure.

Проблемы при развертывании группы контейнеров

Соглашения об именах

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

Область действия Длина Регистр Допустимые знаки Рекомендуемый шаблон Пример
Имя контейнера1 1–63 Нижний регистр Буквы, цифры, дефис могут находиться в любом месте, кроме первого или последнего символа. <name>-<role>-container<number> web-batch-container1
Порты контейнеров От 1 до 65 535 Целое число Целое число от 1 до 65 535. <port-number> 443
метка имени DNS 5–63 Без учета регистра Буквы, цифры, дефис в любом месте, за исключением первого или последнего символа <name> frontend-site1
Переменная среды 1–63 Без учета регистра Буквы, цифры и подчеркивание (_) в любом месте, за исключением первого или последнего знака <name> MY_VARIABLE
Имя тома 5–63 Нижний регистр Буквенно-цифровые символы и дефисы могут использоваться в любом месте, кроме первого или последнего символа. Не может содержать два последовательных дефиса. <name> batch-output-volume

1 Ограничение также распространяется на имена групп контейнеров, если они не указаны независимо от экземпляров контейнера. Например, при развертывании с помощью команды az container create.

Версия ОС образа не поддерживается

Если вы укажете образ, который не поддерживают контейнерные экземпляры Azure, будет возвращена ошибка OsVersionNotSupported. Ошибка похожа на следующую, где {0} — это имя образа, который вы пытались развернуть:

{
  "error": {
    "code": "OsVersionNotSupported",
    "message": "The OS version of image '{0}' is not supported."
  }
}

Эта ошибка чаще всего возникает при развертывании образов Windows, основанных на Semi-Annual Channel выпуска 1709 или 1803, которые не поддерживаются. Сведения о поддерживаемых образах Windows в "Экземплярах контейнеров Azure" см. на странице Часто задаваемые вопросы.

Не удалось загрузить образ

Если Экземплярам контейнеров Azure не удается загрузить ваш образ, они повторяют попытку в течение некоторого времени. Если операция по извлечению образа продолжает завершаться сбоем, ACI в конечном итоге не выполняет развертывание, и вы можете увидеть ошибку Failed to pull image.

Чтобы устранить эту проблему, удалите экземпляр контейнера и повторите развертывание. Убедитесь, что образ существует в реестре и вы правильно ввели его имя.

Если образ невозможно получить, в выходных данных команды az container show отображаются следующие события:

"events": [
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:19+00:00",
    "lastTimestamp": "2017-12-21T22:57:00+00:00",
    "message": "pulling image \"mcr.microsoft.com/azuredocs/aci-hellowrld\"",
    "name": "Pulling",
    "type": "Normal"
  },
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:19+00:00",
    "lastTimestamp": "2017-12-21T22:57:00+00:00",
    "message": "Failed to pull image \"mcr.microsoft.com/azuredocs/aci-hellowrld\": rpc error: code 2 desc Error: image t/aci-hellowrld:latest not found",
    "name": "Failed",
    "type": "Warning"
  },
  {
    "count": 3,
    "firstTimestamp": "2017-12-21T22:56:20+00:00",
    "lastTimestamp": "2017-12-21T22:57:16+00:00",
    "message": "Back-off pulling image \"mcr.microsoft.com/azuredocs/aci-hellowrld\"",
    "name": "BackOff",
    "type": "Normal"
  }
],

Ошибка при недоступном ресурсе

Из-за изменения нагрузки региональных ресурсов в Azure при попытке развернуть экземпляр контейнера может появляться следующая ошибка:

The requested resource with 'x' CPU and 'y.z' GB memory is not available in the location 'example region' at this moment. Please retry with a different resource request or in another location.

Эта ошибка означает, что из-за тяжелой нагрузки в том регионе, где вы пытаетесь осуществить развертывание, ресурсы, указанные для контейнера, не могут быть выделены в настоящий момент. Чтобы устранить эту проблему, используйте один или несколько способов, указанных ниже.

  • Убедитесь, что параметры развертывания контейнера соответствуют параметрам, определенным в статье Доступность службы "Экземпляры контейнеров Azure" в регионах.
  • Укажите для контейнера более низкие значения ЦП и памяти.
  • Выполните развертывание в другом регионе Azure.
  • Выполните развертывание позднее.

Проблемы во время работы группы контейнеров

Имел место изолированный перезапуск контейнера без явного ввода данных пользователем

Существует две широкие категории причин, по которым может произойти перезапуск группы контейнеров без явного ввода данных пользователем. Во-первых, перезапуски контейнеров могут быть вызваны сбоем процесса приложения. Служба ACI рекомендует применять решения для наблюдаемости, такие как SDK Application Insights, метрики группы контейнеров и журналы группы контейнеров, чтобы выяснить, почему у приложения возникли проблемы. Во-вторых, клиенты могут столкнуться с перезапусками, инициированными инфраструктурой ACI из-за событий обслуживания. Чтобы повысить доступность приложения, запустите несколько групп контейнеров за компонентом входящего трафика, например Шлюз приложений или Диспетчер трафика.

Контейнер постоянно завершает работу и перезагружается (не очень долгий процесс)

Контейнерные группы по умолчанию выполняют политику перезапускаAlways, поэтому контейнеры в группе контейнеров всегда перезапускаются после завершения. Может потребоваться изменить ее на OnFailure или Never, если планируется запуск контейнеров на основе задач. Если вы настроили OnFailure, но контейнер по-прежнему перезагружается, возможно, существует проблема в выполняемом в контейнере приложении или скрипте.

При запуске групп контейнеров без длительных процессов могут возникать повторные завершения и перезапуски с образами, такими как Ubuntu или Alpine. Подключение через EXEC не будет работать, так как контейнер не имеет процесса поддержания его в живых. Чтобы устранить эту проблему, добавьте команду запуска, как в следующем примере, с развертыванием группы контейнеров для поддержания работы контейнера.

## Deploying a Linux container
az container create -g MyResourceGroup --name myapp --image ubuntu --command-line "tail -f /dev/null"
## Deploying a Windows container
az container create -g myResourceGroup --name mywindowsapp --os-type Windows --image mcr.microsoft.com/windows/servercore:ltsc2019
 --command-line "ping -t localhost"

API контейнеров и портал Azure включают свойство restartCount. Чтобы узнать количество перезагрузок контейнера, выполните в Azure CLI команду az container show. В примере результатов, которые мы сократили для краткости, вы увидите свойство restartCount в конце.

...
 "events": [
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:06+00:00",
     "lastTimestamp": "2017-11-13T21:20:06+00:00",
     "message": "Pulling: pulling image \"myregistry.azurecr.io/aci-tutorial-app:v1\"",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Pulled: Successfully pulled image \"myregistry.azurecr.io/aci-tutorial-app:v1\"",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Created: Created container with id bf25a6ac73a925687cafcec792c9e3723b0776f683d8d1402b20cc9fb5f66a10",
     "type": "Normal"
   },
   {
     "count": 1,
     "firstTimestamp": "2017-11-13T21:20:14+00:00",
     "lastTimestamp": "2017-11-13T21:20:14+00:00",
     "message": "Started: Started container with id bf25a6ac73a925687cafcec792c9e3723b0776f683d8d1402b20cc9fb5f66a10",
     "type": "Normal"
   }
 ],
 "previousState": null,
 "restartCount": 0
...
}

Примечание

Большинство образов контейнера для дистрибутивов Linux настраивают оболочку, например bash, в качестве команды по умолчанию. Оболочка сама по себе не является долго работающей службой. Поэтому, если для этих контейнеров настроена политика перезагрузки Always, они сразу же завершают работу и начинают циклически перезагружаться.

Контейнер долго запускается

Три основных фактора, которые влияют на время запуска контейнера в Azure Container Instances, это:

Образы Windows имеют дополнительные аспекты.

Размер изображения

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

Размер образа контейнера можно просмотреть с помощью команды docker images в интерфейсе командной строки Docker:

docker images
REPOSITORY                                    TAG       IMAGE ID        CREATED          SIZE
mcr.microsoft.com/azuredocs/aci-helloworld    latest    7367f3256b41    15 months ago    67.6MB

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

Расположение образа

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

Кэшированные изображения

В службе "Экземпляры контейнеров Azure" используется механизм кэширования, помогающий сократить время запуска контейнера для образов, основанных на распространенных базовых образах Windows, включая nanoserver:1809, servercore:ltsc2019 и servercore:1809. Также кэшируются часто используемые образы Linux, такие как ubuntu:1604 и alpine:3.6. В случае образов Windows и Linux не следует использовать тег latest. Ознакомьтесь с рекомендациями по использованию тегов образов в реестре контейнеров для получения полезных указаний. Чтобы получить актуальный список кэшированных изображений и тегов, используйте API для получения списка кэшированных изображений.

Примечание

Возможность использования образов на основе Windows Server 2019 в службе "Экземпляры контейнеров Azure" предоставляется в режиме предварительной версии.

Контейнеры Windows замедляют период готовности сети

В контейнерах Windows при первоначальном создании в течение 30 секунд (в редких случаях и дольше) может отсутствовать входящее или исходящее подключение. Если приложению-контейнеру требуется подключение к Интернету, добавьте логику задержки и повторного выполнения, позволяющую через 30 секунд установить подключение к Интернету. После начальной настройки сетевое взаимодействие контейнеров должно возобновиться соответствующим образом.

Не удается подключиться к базовому API Docker или запустить привилегированные контейнеры

Экземпляры контейнеров Azure не предоставляют прямой доступ к базовой инфраструктуре, на которой размещаются группы контейнеров. Это включает доступ к среде выполнения контейнера, технологии оркестрации и запуск привилегированных контейнерных операций. Чтобы узнать, какие операции поддерживает ACI, ознакомьтесь со справочной документацией REST. Если есть что-то недостающее, отправьте запрос на форумах отзывов ACI.

IP-адрес группы контейнеров может быть недоступен из-за несовпадений портов

Служба "Экземпляры контейнеров Azure" пока не поддерживает перенаправление портов, как это делается в обычных конфигурациях Docker. Если вы считаете, что IP-адрес группы контейнеров должен быть доступен, но он недоступен, убедитесь, что ваш образ контейнера настроен для прослушивания тех же портов, которые вы открываете в группе контейнеров с помощью свойства ports.

Если вы хотите убедиться, что служба "Экземпляры контейнеров Azure" может принимать данные на порту, настроенном в образе контейнера, протестируйте развертывание образа aci-helloworld, который открывает порт. Также запустите приложение aci-helloworld, чтобы оно слушало порт. aci-helloworld принимает необязательную переменную среды PORT для переопределения порта 80, который используется по умолчанию. Например, чтобы проверить порт 9000, задайте переменную среды при создании группы контейнеров.

  1. Настройте группу контейнеров для предоставления порта 9000 и передайте номер порта как значение переменной среды. Формат этого примера соответствует оболочке Bash. Если вы предпочитаете другую оболочку, например PowerShell или командную строку, необходимо соответствующим образом настроить назначение переменных.

    az container create --resource-group myResourceGroup \
    --name mycontainer --image mcr.microsoft.com/azuredocs/aci-helloworld \
    --ip-address Public --ports 9000 \
    --environment-variables 'PORT'='9000'
    
  2. Найдите IP-адрес группы контейнеров в выходных данных команды az container create. Найдите значение ip.

  3. После успешной подготовки контейнера откройте в браузере IP-адрес и порт приложения контейнера, например, 192.0.2.0:9000.

    В веб-приложении отобразится сообщение: "Добро пожаловать в Azure Container Instances!"

  4. После завершения работы с контейнером az container delete удалите его с помощью команды:

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

Проблемы во время развертывания конфиденциальной контейнерной группы

Ошибки политики при использовании настраиваемой политики CCE

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

Отсутствующий хэш в политике

Расширение confcom Azure CLI использует кэшированные образы на локальном компьютере, которые могут не совпадать с доступными удаленно, что может привести к несоответствию слоев при проверке политики. Убедитесь, что вы удалили старые образы и загрузили последние образы контейнеров в локальную среду. Убедившись, что у вас есть последняя версия SHA, необходимо воссоздать политику CCE.

Процесс или контейнер завершился с кодом выхода: 139

Этот код выхода возникает из-за ограничений в базовом образе Ubuntu версии 22.04. Рекомендуется использовать другой базовый образ для устранения этой проблемы.

Дальнейшие действия

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