Compartir a través de


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

SE APLICA A:SDK de Azure Machine Learning v1 para Python

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

Importante

En este artículo se proporciona información sobre el uso del SDK de Azure Machine Learning v1. EL SDK v1 está en desuso a partir del 31 de marzo de 2025. El soporte técnico finalizará el 30 de junio de 2026. Puede instalar y usar SDK v1 hasta esa fecha.

Se recomienda realizar la transición al SDK v2 antes del 30 de junio de 2026. Para más información sobre SDK v2, consulte ¿Qué es la CLI de Azure Machine Learning y el SDK de Python v2? y la referencia del SDK v2.

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 modelo 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 proceso 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 produce 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 2 maneras de habilitar una dirección IP pública:

    El plano de control de 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 la entidad de servicio o el usuario Rol de administrador de clústeres de Azure Kubernetes Service 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 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ón, y 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 pruebas de desarrollo no es adecuado para el 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 el clúster se usa para producción, debe contener al menos 3 nodos. Los clústeres de desarrollo y pruebas deben contener al menos 1 nodo.

  • El SDK de Azure Machine Learning no proporciona compatibilidad con el escalado de 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 Estudio de Azure Machine Learning. 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 invalidan los cambios. Los únicos dos campos YAML no sobrescritos son límites de solicitudy 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. Si intenta crear el recurso de nuevo, se produce un error que indica 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 también no 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 permite crear un clúster mediante varias versiones de Kubernetes. Para obtener más información sobre las versiones disponibles, consulte Versiones de Kubernetes compatibles en Azure Kubernetes Service (AKS).

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

  • Estudio de Azure Machine Learning 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 controlador Blobfuse FlexVolume para las versiones <=1.16 y Controlador CSI de Blob para las versiones >=1.17. Por lo tanto, es importante volver a implementar o actualizar el servicio web después de la actualización del clúster para poder implementar usando el método blobfuse correcto para la versión del clúster.

Nota

Puede haber casos perimetrales en los que ya no se admite un clúster anterior. En este caso, la operación de datos adjuntos devuelve un error y enumera 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. Es posible que la compatibilidad con el uso de versiones preliminares sea 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 desea comprobar mediante programación las versiones disponibles, use la API de REST de Container Service Client - List Orchestrators. Para buscar las versiones disponibles, examine las entradas en las que orchestratorType está 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:SDK de Azure Machine Learning v1 para Python

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 distinta del á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 archivo adjunto interrumpe los datos adjuntos existentes anteriores y produce 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:SDK de Azure Machine Learning v1 para Python

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 TLS 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:SDK de Azure Machine Learning v1 para Python

   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 dominio y certificado personalizados, debe actualizar su registro DNS para que apunte a la dirección IP del punto de evaluación. Consulte la sección Actualización de su DNS.

SE APLICA A:SDK de Azure Machine Learning v1 para Python

   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, consulte Uso de TLS para proteger un servicio web a través de 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 usan 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:SDK de Azure Machine Learning v1 para Python

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 está configurado con un equilibrador de carga interno, no se admite el uso de un certificado proporcionado por Microsoft y debe usar el certificado personalizado para habilitar TLS.

Nota

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

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 Estudio de Azure Machine Learning, 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:SDK de Azure Machine Learning v1 para Python

aks_target.detach()

Solución de problemas

Actualización del clúster

Las actualizaciones de los componentes de Azure Machine Learning instalados en un clúster de Azure Kubernetes Service deben aplicarse 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:SDK de Azure Machine Learning v1 para Python

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 azureml-fe recursos 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, debe proporcionar el certificado TLS/SSL y la clave privada al volver a asociar el clúster.

SE APLICA A:SDK de Azure Machine Learning v1 para Python

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 usa un certificado generado por Azure Machine Learning, puede recuperar los archivos antes de desasociar el clúster mediante la conexión al clúster mediante kubectl y recuperando el secreto azuremlfessl.

kubectl get secret/azuremlfessl -o yaml

Nota

Kubernetes almacena los secretos en formato codificado en Base64-. Debe decodificar en Base64 los componentes cert.pem y key.pem de los secretos antes de proporcionarlos 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 desasociar el clúster, si no hay ningún servicio activo en el clúster, elimine los azureml-fe recursos relacionados antes de asociarlo de nuevo:

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 deben tener direcciones IP públicas

Al intentar crear o adjuntar un clúster de AKS, es posible que reciba un mensaje de denegación de la solicitud porque "Load Balancers no debe tener direcciones IP públicas". Este mensaje se devuelve cuando un administrador aplicó 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