Устранение распространенных неполадок с помощью службы "Экземпляры контейнеров 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, основанных на неподдерживаемых выпусках 1709 или 1803 из Semi-Annual Channel. Сведения о поддерживаемых образах 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".

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

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

Для образов на основе конкретных образов Windows В службе "Экземпляры контейнеров 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"!".

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

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

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

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

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

В политике отсутствует хэш

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

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

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

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

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