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


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

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

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

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

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

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

Область Length Регистр Допустимые знаки Рекомендуемый шаблон Пример
Имя контейнера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".

Образы 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 необходимо создать расширение конференц-связи Azure CLI. Перед созданием политики убедитесь, что все свойства, указанные в шаблоне ARM, допустимы и соответствуют ожидаемым значениям в политике конфиденциальных вычислений. Некоторые свойства для проверки включают образ контейнера, переменные среды, подключения томов и команды контейнера.

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

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

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

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

Следующие шаги

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