Share via


Creación y conexión de un clúster de Azure Kubernetes Service con v1

SE APLICA A:Azure ML del SDK de Python v1

SE APLICA A:Extensión de ML de la CLI de Azure v1

Importante

En este artículo se muestra cómo usar la CLI y el SDK v1 para crear o adjuntar un clúster de Azure Kubernetes Service, que ahora se considera una característica heredada. Para asociar un clúster de Azure Kubernetes Service mediante el enfoque recomendado para v2, consulte Introducción al destino de proceso de Kubernetes en v2.

Azure Machine Learning puede implementar modelos de Machine Learning entrenados en Azure Kubernetes Service. Sin embargo, primero debe crear un clúster de Azure Kubernetes Service (AKS) desde el área de trabajo de Azure Machine Learning o adjuntar un clúster de AKS existente. En este artículo se proporciona información sobre cómo crear y anexar un clúster.

Requisitos previos

Limitaciones

  • Un clúster de AKS solo se puede crear o asociar como destino de proceso único en el área de trabajo de Azure Machine Learning. No se admiten varios datos adjuntos para un clúster de AKS.

  • Si necesita implementar un Standard Load Balancer (SLB) en el clúster en lugar de un Basic Load Balancer (BLB), cree un clúster en el portal de AKS, la CLI o el SDK y, a continuación, adjuntarlo al área de trabajo de Azure Machine Learning.

  • Si tiene una instancia de Azure Policy que restringe la creación de direcciones IP públicas, se producirá un error en la creación del clúster de AKS. AKS requiere una dirección IP pública para el tráfico de salida. En el artículo de tráfico de salida también se proporcionan instrucciones para bloquear el tráfico de salida desde el clúster a través de la dirección IP pública, excepto en el caso de algunos nombres de dominio completos. Hay dos formas de habilitar una dirección IP pública:

    El plano de control Azure Machine Learning no se comunica con esta dirección IP pública. Se comunica con el plano de control AKS para las implementaciones.

  • Para asociar un clúster de AKS, a la entidad de servicio o usuario que realiza la operación se le debe asignar el rol de control de acceso basado en rol de Azure (RBAC de Azure) propietario o colaborador en el grupo de recursos de Azure que contiene el clúster. También se debe asignar a la entidad de servicio o al usuario Azure Kubernetes Service rol de administrador de clústeres en el clúster.

  • Si adjunta un clúster de AKS, que tiene un intervalo IP autorizado habilitado para tener acceso al servidor de API, habilite los intervalos IP del plano de control de Azure Machine Learning del clúster de AKS. El plano de control de Azure Machine Learning se implementa entre regiones emparejadas e implementa pods de inferencia en el clúster de AKS. Sin acceso al servidor de la API, no se pueden implementar los pods de inferencia. Use el intervalo IP para las regiones emparejadas al habilitar los intervalos IP en un clúster de AKS.

    Los intervalos IP autorizados solo funcionan con Standard Load Balancer.

  • Si quiere usar un clúster de AKS privado (mediante Azure Private Link), primero debe crear el clúster y, a continuación, adjuntarlo al área de trabajo. Para obtener más información, consulte Creación de un clúster privado de Azure Kubernetes Service.

  • El uso de un nombre de dominio completo (FQDN) público con un clúster de AKS privadono se admite con Azure Machine Learning.

  • El nombre de proceso del clúster de AKS DEBE ser único en el área de trabajo de Azure Machine Learning. Puede incluir letras, dígitos y guiones. Debe empezar por una letra, terminar con una letra o un dígito y tener una longitud de entre 3 y 24 caracteres.

  • Si quiere implementar modelos en nodos de GPU o en nodos de FPGA (o en cualquier SKU específica), debe crear un clúster con la SKU específica. No se admite la creación de un grupo de nodos secundarios en un clúster existente ni la implementación de modelos en el grupo de nodos secundarios.

  • Al crear o adjuntar un clúster, puede seleccionar si quiere crearlo para desarrollo y pruebas o producción. Si quiere crear un clúster de AKS para desarrollo, validacióny pruebas, en lugar de producción, especifique el propósito del clúster en desarrollo y pruebas. Si no especifica el propósito del clúster, se crea un clúster de producción.

    Importante

    Un clúster de desarrollo y pruebas no es adecuado para un tráfico de nivel de producción y puede aumentar los tiempos de inferencia. Los clústeres de desarrollo y pruebas tampoco garantizan la tolerancia a errores.

  • Al crear o adjuntar un clúster, si se va a usar para producción, debe contener al menos tres nodos. Los clústeres de desarrollo y pruebas deben contener al menos un nodo.

  • El SDK de Azure Machine Learning no admite escalar un clúster de AKS. Para escalar los nodos en el clúster, use la interfaz de usuario para el clúster de AKS en Azure Machine Learning Studio. Solo puede cambiar el número de nodos, no el tamaño de máquina virtual del clúster. Para más información acerca del escalado de nodos en un clúster de AKS, consulte los artículos siguientes:

  • No actualice directamente el clúster mediante una configuración de YAML. Aunque Azure Kubernetes Services admite actualizaciones a través de la configuración de YAML, las implementaciones de Azure Machine Learning invalidarán los cambios. Los únicos dos campos de YAML que no se sobrescribirán serán Límites de solicitudes y CPU y memoria.

  • La creación de un clúster de AKS mediante la interfaz de usuario de Estudio de Azure Machine Learning, el SDK o la extensión de la CLI no es idempotente. Al intentar volver a crear el recurso, se producirá un error que significa que ya existe un clúster con el mismo nombre.

    • El uso de una plantilla de Azure Resource Manager y el recurso Microsoft.MachineLearningServices/workspaces/computes para crear un clúster de AKS tampoco es idempotente. Si intenta volver a usar la plantilla para actualizar un recurso ya existente, recibirá el mismo error.

Versión de Azure Kubernetes Service

Azure Kubernetes Service le permite crear un clúster mediante una variedad de versiones de Kubernetes. Para obtener más información sobre las versiones disponibles, consulte Versiones de Kubernetes compatibles en Azure Kubernetes Service (AKS).

Cuando crea un clúster de Azure Kubernetes Service con uno de los métodos siguientes, no tiene una opción en la versión del clúster que se crea:

  • Azure Machine Learning Studio o la sección de Azure Machine Learning de Azure Portal.
  • Extensión de Machine Learning para la CLI de Azure.
  • SDK de Azure Machine Learning.

Estos métodos de creación de un clúster de AKS usan la versión predeterminada del clúster. La versión predeterminada cambia con el tiempo a medida que están disponibles las nuevas versiones de Kubernetes.

Cuando adjunta un clúster de AKS existente, se admiten todas las versiones de AKS compatibles actualmente.

Importante

Azure Kubernetes Service usa el controlador Blobfuse FlexVolume en las versiones hasta la 1.16 y el controlador Blob CSI en las versiones a partir de la 1.17. Por eso es importante que, después de actualizar el clúster, se vuelva a implementar o a actualizar el servicio web para implementar en el método blobfuse adecuado a la versión del clúster.

Nota

Puede haber casos extremos en los que tenga un clúster anterior que ya no se admita. En este caso, la operación de adjuntar devolverá un error y mostrará las versiones admitidas actualmente.

Puede adjuntar versiones preliminares. La funcionalidad de versión preliminar se ofrece sin un Acuerdo de Nivel de Servicio y no es aconsejable usarla para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. La compatibilidad con las versiones preliminares puede ser limitada. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

Versiones disponibles y predeterminadas

Para buscar las versiones de AKS disponibles y predeterminadas, use el comando az aks get-versions de la CLI de Azure. Por ejemplo, el comando siguiente devuelve las versiones disponibles en la región Oeste de EE. UU.:

az aks get-versions -l westus -o table

La salida de este comando es similar al texto siguiente:

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

Para buscar la versión predeterminada que se usa al crear un clúster a través de Azure Machine Learning, puede usar el parámetro --query para seleccionar la versión predeterminada:

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

La salida de este comando es similar al texto siguiente:

Result
--------
1.16.13

Si quiere comprobar mediante programación las versiones disponibles, utilice la API REST Container Service Client - List Orchestrators. Para buscar las versiones disponibles, examine las entradas en las que orchestratorType sea Kubernetes. Las entradas orchestrationVersion asociadas contienen las versiones disponibles que se pueden adjuntar al área de trabajo.

Para buscar la versión predeterminada que se usa al crear un clúster a través de Azure Machine Learning, busque la entrada en la que orchestratorType sea Kubernetes y default sea true. El valor de orchestratorVersion asociado es la versión predeterminada. El siguiente fragmento de código JSON es un ejemplo de entrada:

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

Creación de un clúster de AKS

Tiempo estimado: Aproximadamente 10 minutos.

Crear o asociar un clúster de AKS es un proceso único en el área de trabajo. Puede volver a usar este clúster con diferentes implementaciones. Si elimina el clúster o el grupo de recursos que lo contiene, tendrá que crear un nuevo clúster la próxima vez que tenga que realizar una implementación. Puede tener varios clústeres de AKS asociados al área de trabajo.

En el ejemplo siguiente se muestra cómo crear un clúster de AKS mediante el SDK y la CLI:

SE APLICA A:Azure ML del SDK de Python v1

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)

Para más información acerca de las clases, los métodos y los parámetros que se usan en este ejemplo, consulte los siguientes documentos de referencia:

Asociación de un clúster de AKS ya existente

Tiempo estimado: Aproximadamente 5 minutos.

Si ya tiene un clúster de AKS en la suscripción de Azure, puede usarlo con el área de trabajo.

Sugerencia

El clúster de AKS existente puede estar en una región de Azure diferente que su área de trabajo de Azure Machine Learning.

Advertencia

No cree varios datos adjuntos simultáneos en el mismo clúster de AKS. Por ejemplo, asociar un clúster de AKS a un área de trabajo con dos nombres diferentes o adjuntar un clúster de AKS a otra área de trabajo. Cada nuevo dato adjunto interrumpirá los datos adjuntos existentes anteriores y provocará un error imprevisible.

Si desea volver a conectar un clúster de AKS, por ejemplo, para cambiar la configuración de TLS u otra configuración del clúster, primero debe eliminar la conexión existente mediante AksCompute.detach().

Para más información acerca de cómo crear un clúster de AKS mediante la CLI de Azure o Azure Portal, consulte los artículos siguientes:

En el ejemplo siguiente se muestra cómo adjuntar un clúster de AKS existente a un área de trabajo:

SE APLICA A:Azure ML del SDK de Python v1

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)

Para más información acerca de las clases, los métodos y los parámetros que se usan en este ejemplo, consulte los siguientes documentos de referencia:

Creación o conexión de un clúster de AKS con terminación TLS

Cuando se crea o conecta un clúster de AKS, se puede habilitar la terminación de Seguridad de la capa de transporte con los objetos de configuración AksCompute.provisioning_configuration() y AksCompute.attach_configuration() . Ambos métodos devuelven un objeto de configuración que tiene un método enable_ssl y se puede usar el método enable_ssl para habilitar TLS.

En el ejemplo siguiente se muestra cómo habilitar la terminación TLS con la generación y configuración automáticas de certificados TLS con el certificado de Microsoft en segundo plano.

SE APLICA A:Azure ML del SDK de Python v1

   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")


En el ejemplo siguiente se muestra cómo habilitar la terminación TLS con el certificado personalizado y el nombre de dominio personalizado. Con el certificado y el dominio personalizado, debe actualizar el registro DNS para que apunte a la dirección IP del punto de conexión de puntuación; vea Actualización del DNS.

SE APLICA A:Azure ML del SDK de Python v1

   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")


Nota

Para más información sobre cómo proteger la implementación de modelos en el clúster de AKS, vea Uso de TLS para proteger un servicio web con Azure Machine Learning.

Creación o conexión de un clúster de AKS para usar el equilibrador de carga interno con IP privada

Al crear o conectar un clúster de AKS, puede configurar el clúster para utilizar un equilibrador de carga interno. Con un equilibrador de carga interno, los puntos de conexión de puntuación de las implementaciones en AKS usarán una dirección IP privada dentro de la red virtual. En los fragmentos de código siguientes se muestra cómo configurar un equilibrador de carga interno para un clúster de AKS.

SE APLICA A:Azure ML del SDK de Python v1

Para crear un clúster de AKS que use un equilibrador de carga interno, use los parámetros load_balancer_type y load_balancer_subnet como se muestra a continuación:

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)

Importante

Si el clúster de AKS se configura con una instancia de Load Balancer interna, no se admite el uso de un certificado proporcionado por Microsoft, se debe usar un certificado personalizado para habilitar TLS.

Nota

Para más información sobre cómo proteger el entorno de inferencia, vea Protección de un entorno de inferencia de Azure Machine Learning con redes virtuales.

Desasociación de un clúster de AKS

Para desasociar un clúster del área de trabajo, use uno de los métodos siguientes:

Advertencia

El uso de Azure Machine Learning Studio, el SDK o la extensión de la CLI de Azure con aprendizaje automático para desasociar un clúster de AKS no elimina el clúster de AKS. Para eliminarlo, consulte Uso de la CLI de Azure con AKS.

SE APLICA A:Azure ML del SDK de Python v1

aks_target.detach()

Solución de problemas

Actualización del clúster

Las actualizaciones a componentes de Azure Machine Learning instalados en un clúster de Azure Kubernetes Service se deben aplicar manualmente.

Para aplicar estas actualizaciones, puede desconectar el clúster del área de trabajo de Azure Machine Learning y, luego, volver a conectarlo al área de trabajo.

SE APLICA A:Azure ML del SDK de Python v1

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

Para poder volver a adjuntar el clúster al área de trabajo, primero debe eliminar los recursos azureml-fe relacionados. Si no hay ningún servicio activo en el clúster, puede eliminar los recursos azureml-fe relacionados con el código siguiente.

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

Si TLS está habilitado en el clúster, tendrá que proporcionar el certificado TLS/SSL y la clave privada al volver a asociar el clúster.

SE APLICA A:Azure ML del SDK de Python v1

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)

Si ya no tiene el certificado TLS/SSL y la clave privada, o si usa un certificado generado por Azure Machine Learning, puede recuperar los archivos antes de desasociar el clúster si se conecta al clúster mediante kubectl y recupera el secreto azuremlfessl.

kubectl get secret/azuremlfessl -o yaml

Nota

Kubernetes almacena los secretos en formato codificado en base64. Deberá decodificar en base64 los componentes cert.pem y key.pem de los secretos antes de proporcionárselos a attach_config.enable_ssl.

Errores de servicio web

Muchos errores de servicio web de AKS se pueden depurar mediante la conexión al clúster con kubectl. Puede obtener el archivo kubeconfig.json para un clúster de AKS mediante la ejecución de

SE APLICA A:Extensión de ML de la CLI de Azure v1

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

Después de separar el clúster, si no hay ningún servicio activo en él, elimine los recursos relacionados con azureml-fe antes de volver a adjuntarlo:

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

Los equilibradores de carga no deberían tener direcciones IP públicas

Al intentar crear o adjuntar un clúster de AKS, es posible que reciba un mensaje que indica que la solicitud se ha denegado porque "los equilibradores de carga no deben tener IP públicas". Este mensaje se muestra cuando un administrador ha aplicado una directiva que impide el uso de un clúster de AKS con una dirección IP pública.

Para resolver el problema, cree o adjunte el clúster mediante los parámetros load_balancer_type y load_balancer_subnet. Para obtener más información, consulte la sección sobre el equilibrador de carga interno (IP privada).

Pasos siguientes