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


Устранение неполадок с вычислительной средой Kubernetes

Из этой статьи вы узнаете, как устранять распространенные ошибки рабочей нагрузки в вычислительных ресурсах Kubernetes. Распространенные ошибки включают задания обучения и ошибки конечной точки.

Руководство по выводу

Распространенные ошибки конечных точек Kubernetes в вычислительных ресурсах Kubernetes делятся на две области: область вычислений и область кластера. Ошибки области вычислений связаны с целевым объектом вычислений, например целевой объект вычислений не найден, или целевой объект вычислений недоступен. Ошибки области кластера связаны с базовым кластером Kubernetes, например, сам кластер недоступен, или кластер не найден.

Ошибки вычислений Kubernetes

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

ERROR: GenericComputeError

Сообщение об ошибке имеет следующий тип:

Failed to get compute information.

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

  • Проверьте состояние кластера Kubernetes. Если кластер не запущен, сначала необходимо запустить кластер.
  • Проверьте работоспособность кластера Kubernetes.
    • Вы можете просмотреть отчет проверки работоспособности кластера для любых проблем, например, если кластер недоступен.
    • Чтобы проверить состояние вычислений, можно перейти на портал рабочей области.
  • Проверьте правильность сведений о типах экземпляров. Поддерживаемые типы экземпляров можно проверить в документации по вычислительным ресурсам Kubernetes.
  • При необходимости попробуйте отсоединить и повторно подключить вычислительные ресурсы к рабочей области.

Примечание.

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

ERROR: ComputeNotFound

Сообщение об ошибке выглядит следующим образом:

Cannot find Kubernetes compute.

Эта ошибка должна возникать, когда:

  • Система не может найти вычислительные ресурсы при создании и обновлении новой сетевой конечной точки или развертывания.
  • Вычислительная среда существующих сетевых конечных точек и развертываний удалена.

Чтобы устранить проблему, можно проверить следующие элементы:

  • Попробуйте повторно создать конечную точку и развертывание.
  • Попробуйте отсоединить и повторно подключить вычислительные ресурсы к рабочей области. Обратите внимание на дополнительные заметки о повторном присоединении.

ERROR: ComputeNotAccessible

Сообщение об ошибке выглядит следующим образом:

The Kubernetes compute is not accessible.

Эта ошибка должна возникать, если у рабочей области MSI (управляемое удостоверение) нет доступа к кластеру AKS. Вы можете проверить, имеет ли MSI рабочая область доступ к AKS, и если нет, вы можете следовать этому документу для управления доступом и удостоверениями.

ОШИБКА: InvalidComputeInformation

Сообщение об ошибке выглядит следующим образом:

The compute information is invalid.

При развертывании моделей в кластере Kubernetes существует процесс проверки целевого объекта вычислений. Эта ошибка должна возникать, когда данные вычислений недопустимы. Например, целевой объект вычислений не найден или конфигурация расширения Машинное обучение Azure обновлена в кластере Kubernetes.

Чтобы устранить проблему, можно проверить следующие элементы:

  • Проверьте, является ли используемый целевой объект вычислений правильным и существующим в рабочей области.
  • Попробуйте отсоединить и повторно подключить вычислительные ресурсы к рабочей области. Обратите внимание на дополнительные заметки о повторном присоединении.

ОШИБКА: InvalidComputeNoKubernetesConfiguration

Сообщение об ошибке выглядит следующим образом:

The compute kubeconfig is invalid.

Эта ошибка возникает, когда системе не удалось найти любую конфигурацию для подключения к кластеру, например:

  • Для кластера Arc-Kubernetes нет конфигурации Azure Relay.
  • Для кластера AKS не найдено конфигурации AKS.

Чтобы перестроить конфигурацию вычислительного подключения в кластере, можно попытаться отсоединить и повторно подключить вычислительные ресурсы к рабочей области. Обратите внимание на дополнительные заметки о повторном присоединении.

Ошибка кластера Kubernetes

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

ERROR: GenericClusterError

Сообщение об ошибке выглядит следующим образом:

Failed to connect to Kubernetes cluster: <message>

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

Для кластеров AKS:

  • Проверьте, завершается ли кластер AKS.
    • Если кластер не запущен, сначала необходимо запустить кластер.
  • Проверьте, включен ли кластер AKS выбранную сеть с помощью авторизованных диапазонов IP-адресов.
    • Если кластер AKS включил авторизованные диапазоны IP-адресов, убедитесь, что для кластера AKS включены все диапазоны IP-адресов уровня управления Машинное обучение Azure. Дополнительные сведения см. в этом документе.

Для кластера AKS или кластера Kubernetes с поддержкой Azure Arc:

  • Проверьте, доступен ли сервер API Kubernetes, выполнив kubectl команду в кластере.

ERROR: ClusterNotReachable

Сообщение об ошибке выглядит следующим образом:

The Kubernetes cluster is not reachable. 

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

Для кластеров AKS:

  • Проверьте, завершается ли кластер AKS.
    • Если кластер не запущен, сначала необходимо запустить кластер.

Для кластера AKS или кластера Kubernetes с поддержкой Azure Arc:

  • Проверьте, доступен ли сервер API Kubernetes, выполнив kubectl команду в кластере.

ОШИБКА: ClusterNotFound

Сообщение об ошибке выглядит следующим образом:

Cannot found Kubernetes cluster. 

Эта ошибка возникает, если система не может найти кластер AKS/Arc-Kubernetes.

Чтобы устранить проблему, можно проверить следующие элементы:

  • Сначала проверьте идентификатор ресурса кластера в портал Azure, чтобы убедиться, что ресурс кластера Kubernetes по-прежнему существует и работает нормально.
  • Если кластер существует и запущен, можно попытаться отсоединить и повторно подключить вычислительные ресурсы к рабочей области. Обратите внимание на дополнительные заметки о повторном присоединении.

ОШИБКА: ClusterServiceNotFound

Сообщение об ошибке выглядит следующим образом:

AzureML extension service not found in cluster.

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

Вы можете:

  • Доступ к кластеру и проверка состояния службы azureml-ingress-nginx-controller и серверного модуля pod в azureml пространстве имен.
  • Если в кластере нет запущенных серверных модулей pod, проверьте причину, описывая модуль pod. Например, если в модуле pod недостаточно ресурсов для выполнения, можно удалить некоторые модули pod, чтобы освободить достаточно ресурсов для модуля входящего трафика.

ОШИБКА: ClusterUnauthorized

Сообщение об ошибке выглядит следующим образом:

Request to Kubernetes cluster unauthorized.

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

Вы можете повторить попытку через несколько минут.

Совет

Дополнительные сведения об устранении распространенных ошибок при создании и обновлении сетевых конечных точек и развертываний Kubernetes см. в статье "Устранение неполадок с сетевыми конечными точками".

Ошибка удостоверения

ОШИБКА: RefreshExtensionIdentityNotSet

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

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

Как проверить правильность sslCertPemFile и sslKeyPemFile?

Чтобы разрешить отображение известных ошибок, можно использовать команды для выполнения базовой проверки сертификата и ключа. Ожидаете, что вторая команда возвращает "RSA key ok" без запроса на ввод пароля.

openssl x509 -in cert.pem -noout -text
openssl rsa -in key.pem -noout -check

Выполните команды, чтобы проверить соответствие sslCertPemFile и sslKeyPemFile:

openssl x509 -in cert.pem -noout -modulus | md5sum
openssl rsa -in key.pem -noout -modulus | md5sum

Для sslCertPemFile это общедоступный сертификат. Он должен включать цепочку сертификатов, которая включает следующие сертификаты и должна находиться в последовательности сертификата сервера, промежуточного сертификата ЦС и корневого сертификата ЦС:

  • Сертификат сервера: сервер представляет клиенту во время подтверждения TLS. Он содержит открытый ключ сервера, доменное имя и другие сведения. Сертификат сервера подписан промежуточным центром сертификации (ЦС), который отвечает за удостоверение сервера.
  • Промежуточный сертификат ЦС: промежуточный ЦС представляет клиенту, чтобы подтвердить его полномочия для подписи сертификата сервера. Он содержит открытый ключ промежуточного ЦС, имя и другие сведения. Промежуточный сертификат ЦС подписан корневым ЦС, который отвечает за удостоверение промежуточного ЦС.
  • Сертификат корневого ЦС: корневой ЦС представляет клиенту, чтобы доказать, что его центр сертификации подписывает промежуточный сертификат ЦС. Он содержит открытый ключ корневого ЦС, имя и другие сведения. Сертификат корневого ЦС является самозаверяемым и доверенным клиентом.

Руководство по обучению

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

Отладка повторных попыток задания

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

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

  • Каждый журнал повторных попыток записывается в новую папку журнала с форматом "число<> повторных попыток"(например: retry-001).

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

Снимок экрана: добавление нового расширения в кластер Kubernetes с поддержкой Azure Arc из портал Azure.

Сведения о сопоставлении узлов заданий можно получить из amlarc_cr_bootstrap.log в папке system_logs.

Имя узла узла, на котором выполняется модуль pod задания, указывается в этом журнале, например:

++ echo 'Run on node: ask-agentpool-17631869-vmss0000"

"ask-agentpool-17631869-vmss00000" представляет имя узла узла, выполняющего это задание в кластере AKS. Затем вы можете получить доступ к кластеру, чтобы проверить состояние узла для дальнейшего изучения.

Задание pod зависает в состоянии Init

Если задание выполняется дольше, чем ожидалось, и если вы обнаружите, что модули pod задания зависают в состоянии Init с этим предупреждениемUnable to attach or mount volumes: *** failed to get plugin from volumeSpec for volume ***-blobfuse-*** err=no volume plugin matched, проблема может возникнуть, так как расширение Машинное обучение Azure не поддерживает режим загрузки входных данных.

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

Распространенные ошибки сбоя задания

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

Задание не выполнено. 137

Если сообщение об ошибке:

Azure Machine Learning Kubernetes job failed. 137:PodPattern matched: {"containers":[{"name":"training-identity-sidecar","message":"Updating certificates in /etc/ssl/certs...\n1 added, 0 removed; done.\nRunning hooks in /etc/ca-certificates/update.d...\ndone.\n * Serving Flask app 'msi-endpoint-server' (lazy loading)\n * Environment: production\n   WARNING: This is a development server. Do not use it in a production deployment.\n   Use a production WSGI server instead.\n * Debug mode: off\n * Running on http://127.0.0.1:12342/ (Press CTRL+C to quit)\n","code":137}]}

Проверьте параметр прокси-сервера и проверьте, был ли добавлен 127.0.0.1 в диапазон прокси-пропуска при настройке az connectedk8s connectэтой сети.

Задание не выполнено. E45004

Если сообщение об ошибке:

Azure Machine Learning Kubernetes job failed. E45004:"Training feature is not enabled, please enable it when install the extension."

Проверьте, задано enableTraining=True ли при установке расширения Машинное обучение Azure. Дополнительные сведения см. в статье "Развертывание Машинное обучение Azure расширения в кластере AKS или Arc Kubernetes"

Задание не выполнено. 400

Если сообщение об ошибке:

Azure Machine Learning Kubernetes job failed. 400:{"Msg":"Encountered an error when attempting to connect to the Azure Machine Learning token service","Code":400}

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

Укажите ключ учетной записи или маркер SAS

Если вам нужно получить доступ к Реестр контейнеров Azure (ACR) для образа Docker и получить доступ к учетной записи хранения для обучающих данных, эта проблема должна возникать, если вычисление не указано с управляемым удостоверением.

Чтобы получить доступ к Реестр контейнеров Azure (ACR) из вычислительного кластера Kubernetes для образов Docker или получить доступ к учетной записи хранения для обучающих данных, необходимо подключить вычислительные ресурсы Kubernetes с включенным управляемым удостоверением, назначенным системой или пользователем.

В приведенном выше сценарии обучения это удостоверение вычислений необходимо для использования вычислительных ресурсов Kubernetes в качестве учетных данных для обмена данными между ресурсом ARM, привязанным к рабочей области и кластеру вычислений Kubernetes. Поэтому без этого удостоверения задание обучения завершается сбоем и сообщает о отсутствии ключа учетной записи или маркера sas. Обратитесь к учетной записи хранения, например если вы не указываете управляемое удостоверение для вычислений Kubernetes, задание завершается ошибкой со следующим сообщением об ошибке:

Unable to mount data store workspaceblobstore. Give either an account key or SAS token

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

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

Сбой авторизации AzureBlob

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

Unable to upload project files to working directory in AzureBlob because the authorization failed. 

Причина заключается в сбое авторизации при попытке задания отправить файлы проекта в AzureBlob. Чтобы устранить проблему, можно проверить следующие элементы:

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

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

  • Найдите идентификатор рабочей области в портал Azure или получите этот идентификатор, выполнив команду az ml workspace show в командной строке.

  • Отображение всех модулей pod azureml-fe, выполняемых с помощью kubectl get po -n azureml -l azuremlappname=azureml-feкоманды .

  • Войдите в любой из них.kubectl exec -it -n azureml {scorin_fe_pod_name} bash

  • Если кластер не использует прокси-сервер.nslookup {workspace_id}.workspace.{region}.api.azureml.ms Если вы правильно настроили приватный канал из виртуальной сети в рабочую область, внутренний IP-адрес в виртуальной сети должен отвечать с помощью средства DNSLookup .

  • Если кластер использует прокси-сервер, можно попытаться выполнить рабочую curl область

curl https://{workspace_id}.workspace.westcentralus.api.azureml.ms/metric/v2.0/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{workspace_name}/api/2.0/prometheus/post -X POST -x {proxy_address} -d {} -v -k

Когда прокси-сервер и рабочая область настроены правильно с помощью приватного канала, следует наблюдать попытку подключения к внутреннему IP-адресу. В этом сценарии ожидается ответ с кодом состояния HTTP 401, если маркер не указан.

Другие известные проблемы

Обновление вычислений Kubernetes не вступают в силу

В настоящее время интерфейс командной строки версии 2 и пакет SDK версии 2 не позволяют обновлять конфигурацию существующих вычислительных ресурсов Kubernetes. Например, изменение пространства имен не вступают в силу.

Имя рабочей области или группы ресурсов заканчивается "-"

Распространенная причина сбоя InternalServerError при создании рабочих нагрузок, таких как развертывания, конечные точки или задания в вычислительной среде Kubernetes, имеет специальные символы, такие как "-" в конце рабочей области или имени группы ресурсов.

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