Создание и подключение кластера Служба Azure Kubernetes с помощью версии 1

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

ОБЛАСТЬ ПРИМЕНЕНИЯ: Расширение ML для Azure CLI версии 1

Важно!

В этой статье показано, как использовать CLI и пакет SDK версии 1 для создания или подключения Служба Azure Kubernetes кластере, который сейчас считается устаревшей функцией. Сведения о подключении Служба Azure Kubernetes кластере с помощью рекомендуемого подхода для версии 2 см. в статье Общие сведения о целевом объекте вычислений Kubernetes в версии 2.

Машинное обучение Azure позволяет развернуть обученные модели машинного обучения в службе Azure Kubernetes. Однако сначала необходимо создать кластер Служба Azure Kubernetes (AKS) из рабочей области Машинного обучения Azure или подключить существующий кластер AKS. Эта статья содержит сведения о создании кластера и подключении к нему.

Предварительные требования

Ограничения

  • AKS можно создать или подключить только в качестве одного целевого объекта вычислений в рабочей области Машинного обучения Azure. Несколько подключений для одного экземпляра AKS не поддерживается.

  • Если вам требуется развернуть в кластере Load Balancer (цен. категория (SLB), а не базовый Load Balancer (BLB), создайте кластер на портале AKS, cli или SDK, а затем подключите его к рабочей области Машинного обучения Azure.

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

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

  • Чтобы подключить кластер AKS, субъекту-службе или пользователю, выполняющим операцию, должна быть назначена роль Владелец или участник управления доступом на основе ролей Azure (Azure RBAC) в группе ресурсов Azure, содержащей кластер. Субъекту-службе или пользователю также нужно назначить Роль администратора кластера службы Azure Kubernetes в кластере.

  • Если вы подключаете кластер AKS с разрешенным диапазоном IP-адресов, чтобы получить доступ к серверу API, включите диапазоны IP-адресов уровня управления Машинного обучения Azure для кластера AKS. Уровень управления Машинного обучения Azure развертывается в парных регионах и развертывает модули вывода объекта pod в кластере AKS. Без доступа к серверу API невозможно развернуть модули вывода объекта pod. Используйте диапазоны IP-адресов для парных регионов при включении диапазонов IP-адресов в кластере AKS.

    IP-диапазоны авторизации работают только с подсистемой балансировки нагрузки (цен. категория "Стандартный").

  • Если вы хотите использовать частный кластер AKS (с помощью частного канала Azure), сначала необходимо создать кластер, а затем подключить его к рабочей области. Дополнительные сведения см. в статье Создание частного кластера службы Kubernetes Azure.

  • Использование общедоступного полного доменного имени (FQDN) с частным кластером AKSне поддерживается в Машинном обучении Azure.

  • Имя вычислительной среды для кластера AKS ДОЛЖНО быть уникальным в пределах рабочей области Машинного обучения Azure. Оно может содержать буквы, цифры и тире. Имя должно начинаться с буквы, заканчиваться буквой или цифрой и иметь длину от 3 до 24 символов.

  • Если вы хотите развернуть модели на узлах GPU или узлах FPGA (или на любом конкретном номере SKU), необходимо создать кластер с конкретным номером SKU. Создание пула вторичных узлов в существующем кластере и развертывание моделей в пуле вторичных узлов не поддерживаются.

  • При создании или подключении кластера можно выбрать, следует ли создать кластер для разработки, тестирования или производства. Если вы хотите создать кластер AKS для разработки, проверки и тестирования вместо производства, задайте для параметра Назначение кластера значение Разработка и тестирование. Если назначение кластера не указано, создается производственный кластер.

    Важно!

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

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

  • Пакет SDK для службы Машинное обучение Azure не поддерживает масштабирование кластера AKS. Изменить узлы в кластере AKS можно с помощью пользовательского интерфейса для кластера AKS на портале Azure. Можно изменить только количество узлов, а не размер виртуальной машины кластера. Дополнительные сведения о масштабировании узлов в кластере AKS см. в следующих статьях.

  • Отсутствие прямого обновления кластера с помощью конфигурации YAML. Хотя Служба Azure Kubernetes поддерживает обновления через конфигурацию YAML, развертывания службы Машинное обучение Azure будут перезаписывать изменения. Только два поля YAML не будут перезаписаны, — это Ограничения запросов и ЦП и память.

  • Создание кластера AKS с помощью пользовательского интерфейса Студии машинного обучения Azure, пакета SDK или расширения CLI не является идемпотентным. Повторная попытка создать ресурс приведет к ошибке с сообщением, что кластер с таким именем уже существует.

    • Использование шаблона Azure Resource Manager и ресурса Microsoft. Microsoft.MachineLearningServices/workspaces/computes для создания кластера AKS также не является идемпотентным. Если вы попытаетесь повторно использовать шаблон для обновления уже существующего ресурса, вы получите ту же ошибку.

Версия Службы Azure Kubernetes (AKS)

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

При создании кластера Службы Azure Kubernetes с помощью одного из следующих методов у вас нет выбора версии создаваемого кластера.

  • Студия машинного обучения Azure или раздел машинного обучение на портале Azure.
  • Расширение машинного обучения для Azure CLI.
  • Пакет SDK для машинного обучения Azure.

Указанные методы создания кластера AKS используют версию кластера по умолчанию. Версия по умолчанию меняется со временем, так как появляются новые версии Kubernetes.

При подключении существующего кластера AKS используются все версии AKS, поддерживаемые в настоящее время.

Важно!

Служба Azure Kubernetes использует драйвер Blobfuse FlexVolume для версий <= 1.16 и Blob-драйвер CSI для версий >= 1.17. Следовательно, важно повторно развернуть или обновить веб-службу после обновления кластера, чтобы выполнить развертывание для правильного метода blobfuse для данной версии кластера.

Примечание

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

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

Доступные и версии по умолчанию

Для поиска доступных версий AKS и по умолчанию используйте команду Azure CLIaz aks get-versions. Например, следующая команда возвращает версии, доступные в регионе "Западная часть США":

az aks get-versions -l westus -o table

После выполнения этой команды вы должны увидеть текст, аналогичный приведенному ниже.

KubernetesVersion    Upgrades
-------------------  ----------------------------------------
1.18.6(preview)      None available
1.18.4(preview)      1.18.6(preview)
1.17.9               1.18.4(preview), 1.18.6(preview)
1.17.7               1.17.9, 1.18.4(preview), 1.18.6(preview)
1.16.13              1.17.7, 1.17.9
1.16.10              1.16.13, 1.17.7, 1.17.9
1.15.12              1.16.10, 1.16.13
1.15.11              1.15.12, 1.16.10, 1.16.13

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

az aks get-versions -l westus --query "orchestrators[?default == `true`].orchestratorVersion" -o table

После выполнения этой команды вы должны увидеть текст, аналогичный приведенному ниже.

Result
--------
1.16.13

Если вы хотите программно проверить доступные версии, используйте REST API в разделе Клиент службы контейнера — список оркестраторов. Чтобы найти доступные версии, просмотрите записи, где orchestratorType имеет значение Kubernetes. Связанные записи orchestrationVersion содержат доступные версии, которые можно подключить к рабочей области.

Чтобы найти версию по умолчанию, используемую при создании кластера с помощью машинного обучения Azure, найдите запись, где orchestratorType имеет значение Kubernetes, а defaulttrue. Связанное значение orchestratorVersion является версией по умолчанию. Ниже приведен фрагмент кода:

...
 {
        "orchestratorType": "Kubernetes",
        "orchestratorVersion": "1.16.13",
        "default": true,
        "upgrades": [
          {
            "orchestratorType": "",
            "orchestratorVersion": "1.17.7",
            "isPreview": false
          }
        ]
      },
...

Создание кластера AKS.

Примерное время: около 10 минут.

Кластер AKS для рабочей области нужно создать только один раз. Один кластер можно использовать для нескольких развертываний. Если вы удаляете кластер или группу ресурсов, в которую он входит, во время следующего развертывания нужно будет создать новый кластер. К рабочей области можно подключить несколько кластеров AKS.

В следующем примере показано, как создать новый кластер AKS с помощью пакета SDK и интерфейса командной строки:

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

from azureml.core.compute import AksCompute, ComputeTarget

# Use the default configuration (you can also provide parameters to customize this).
# For example, to create a dev/test cluster, use:
# prov_config = AksCompute.provisioning_configuration(cluster_purpose = AksCompute.ClusterPurpose.DEV_TEST)
prov_config = AksCompute.provisioning_configuration()

# Example configuration to use an existing virtual network
# prov_config.vnet_name = "mynetwork"
# prov_config.vnet_resourcegroup_name = "mygroup"
# prov_config.subnet_name = "default"
# prov_config.service_cidr = "10.0.0.0/16"
# prov_config.dns_service_ip = "10.0.0.10"
# prov_config.docker_bridge_cidr = "172.17.0.1/16"

aks_name = 'myaks'
# Create the cluster
aks_target = ComputeTarget.create(workspace = ws,
                                    name = aks_name,
                                    provisioning_configuration = prov_config)

# Wait for the create process to complete
aks_target.wait_for_completion(show_output = True)

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

Подключение существующего кластера AKS

Примерное время: около 5 минут.

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

Совет

Существующий кластер AKS может находиться в регионе Azure, который отличается от рабочей области службы Машинное обучение Azure.

Предупреждение

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

Если требуется повторно подключить кластер AKS, например для изменения настроек TLS или другого кластера, необходимо сначала удалить существующее вложение с помощью команды AksCompute.detach().

Дополнительные сведения о создании кластера AKS с помощью Azure CLI или портала см. в следующих статьях.

Далее показано, как подключить имеющийся кластер AKS к рабочей области.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

from azureml.core.compute import AksCompute, ComputeTarget
# Set the resource group that contains the AKS cluster and the cluster name
resource_group = 'myresourcegroup'
cluster_name = 'myexistingcluster'

# Attach the cluster to your workgroup. If the cluster has less than 12 virtual CPUs, use the following instead:
# attach_config = AksCompute.attach_configuration(resource_group = resource_group,
#                                         cluster_name = cluster_name,
#                                         cluster_purpose = AksCompute.ClusterPurpose.DEV_TEST)
attach_config = AksCompute.attach_configuration(resource_group = resource_group,
                                         cluster_name = cluster_name)
aks_target = ComputeTarget.attach(ws, 'myaks', attach_config)

# Wait for the attach process to complete
aks_target.wait_for_completion(show_output = True)

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

Создание или подключение кластера AKS с завершением TLS

При создании или подключении кластера AKS можно включить завершение сеанса TLS с помощью объектов конфигурации AksCompute.provisioning_configuration() и AksCompute.attach_configuration() . Оба варианта возвращают объект конфигурации, содержащий метод enable_ssl, и для включения TLS можно использовать метод enable_ssl.

В следующем примере показано, как включить завершение TLS с автоматическим созданием и настройкой сертификата TLS с помощью сертификата Майкрософт.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

   from azureml.core.compute import AksCompute, ComputeTarget
   
   # Enable TLS termination when you create an AKS cluster by using provisioning_config object enable_ssl method

   # Leaf domain label generates a name using the formula
   # "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com"
   # where "######" is a random series of characters
   provisioning_config.enable_ssl(leaf_domain_label = "contoso")
   
   # Enable TLS termination when you attach an AKS cluster by using attach_config object enable_ssl method

   # Leaf domain label generates a name using the formula
   # "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com"
   # where "######" is a random series of characters
   attach_config.enable_ssl(leaf_domain_label = "contoso")


В следующем примере показано, как включить завершение TLS с пользовательским сертификатом и пользовательским именем домена. При использовании личного домена и сертификата необходимо обновить запись DNS, чтобы она указывала на IP-адрес конечной точки оценки, см. статью Обновление DNS.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

   from azureml.core.compute import AksCompute, ComputeTarget

   # Enable TLS termination with custom certificate and custom domain when creating an AKS cluster
   
   provisioning_config.enable_ssl(ssl_cert_pem_file="cert.pem",
                                        ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")
    
   # Enable TLS termination with custom certificate and custom domain when attaching an AKS cluster

   attach_config.enable_ssl(ssl_cert_pem_file="cert.pem",
                                        ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")


Примечание

Дополнительные сведения о защите развертывания моделей в кластере AKS см. в статье Использование TLS для защиты веб-службы с помощью машинного обучения Azure.

Создание или подключение кластера AKS для использования внутренней подсистемы балансировки нагрузки с частным IP-адресом

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

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

Чтобы создать кластер AKS, использующий внутреннюю подсистему балансировки нагрузки, используйте параметры load_balancer_type и load_balancer_subnet:

from azureml.core.compute.aks import AksUpdateConfiguration
from azureml.core.compute import AksCompute, ComputeTarget

# When you create an AKS cluster, you can specify Internal Load Balancer to be created with provisioning_config object
provisioning_config = AksCompute.provisioning_configuration(load_balancer_type = 'InternalLoadBalancer')

# Create the cluster
aks_target = ComputeTarget.create(workspace = ws,
                                name = aks_name,
                                provisioning_configuration = provisioning_config)

# Wait for the create process to complete
aks_target.wait_for_completion(show_output = True)

Важно!

Если в кластере AKS настроена внутренняя подсистема балансировки нагрузки, использование сертификата, предоставленного Майкрософт, не поддерживается, и для включения TLS необходимо использовать пользовательский сертификат.

Примечание

Дополнительные сведения о том, как обеспечить безопасность среды вывода, см. в статье Обеспечение безопасности среды вывода службы Машинное обучение Azure

Отключение кластера AKS

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

Предупреждение

Использование студии машинного обучения, пакета SDK или расширения Azure CLI для отключения кластера AKS не приводит к удалению кластера AKS. Сведения об удалении кластера см. в разделе Использование Azure CLI с AKS.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

aks_target.detach()

Устранение неполадок

Обновление кластера

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

Эти обновления можно применить, отключив кластер от рабочей области Машинного обучения Azure и повторно подключив его к рабочей области.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

compute_target = ComputeTarget(workspace=ws, name=clusterWorkspaceName)
compute_target.detach()
compute_target.wait_for_completion(show_output=True)

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

kubectl delete sa azureml-fe
kubectl delete clusterrole azureml-fe-role
kubectl delete clusterrolebinding azureml-fe-binding
kubectl delete svc azureml-fe
kubectl delete svc azureml-fe-int-http
kubectl delete deploy azureml-fe
kubectl delete secret azuremlfessl
kubectl delete cm azuremlfeconfig

Если в кластере включен протокол TLS, то при повторном подключении кластера необходимо предоставить сертификат TLS/SSL и закрытый ключ.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Пакет SDK для Python для ML Azure версии 1

attach_config = AksCompute.attach_configuration(resource_group=resourceGroup, cluster_name=kubernetesClusterName)

# If SSL is enabled.
attach_config.enable_ssl(
    ssl_cert_pem_file="cert.pem",
    ssl_key_pem_file="key.pem",
    ssl_cname=sslCname)

attach_config.validate_configuration()

compute_target = ComputeTarget.attach(workspace=ws, name=args.clusterWorkspaceName, attach_configuration=attach_config)
compute_target.wait_for_completion(show_output=True)

Если у вас больше нет сертификата TLS/SSL и закрытого ключа или вы используете сертификат, созданный службой Машинное обучение Azure, вы можете получить файлы до отключения кластера, подключившись к кластеру с помощью kubectl и получив секретный код azuremlfessl.

kubectl get secret/azuremlfessl -o yaml

Примечание

Kubernetes сохраняет секретные данные в формате кодировки Base-64. Сначала необходимо декодировать из base-64 компоненты cert.pem и key.pem для этих секретных данных и только после этого отправлять их в attach_config.enable_ssl.

Сбои веб-служб

Многие сбои веб-служб в Службе Azure Kubernetes можно отладить, подключившись к кластеру с помощью kubectl. Вы можете получить kubeconfig.json для кластера AKS, выполнив

ОБЛАСТЬ ПРИМЕНЕНИЯ: Расширение ML для Azure CLI версии 1

az aks get-credentials -g <rg> -n <aks cluster name>

Если после отключения кластера в кластере нет активной службы, удалите ресурсы, связанные с azureml-fe, перед повторным присоединением:

kubectl delete sa azureml-fe
kubectl delete clusterrole azureml-fe-role
kubectl delete clusterrolebinding azureml-fe-binding
kubectl delete svc azureml-fe
kubectl delete svc azureml-fe-int-http
kubectl delete deploy azureml-fe
kubectl delete secret azuremlfessl
kubectl delete cm azuremlfeconfig

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

При попытке создать или подключить кластер AKS может появиться сообщение о том, что запрос был отклонен, так как "подсистемы балансировки нагрузки не должны иметь общедоступных IP-адресов". Это сообщение возвращается, когда администратор применяет политику, которая предотвращает использование кластера AKS с общедоступным IP-адресом.

Чтобы устранить эту проблему, создайте или Подключите кластер с помощью параметров load_balancer_type и load_balancer_subnet. Дополнительные сведения см. в статье "Внутренняя подсистема балансировки нагрузки (частный IP-адрес)".

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