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
Un área de trabajo de Azure Machine Learning. Para más información, consulte Creación de un área de trabajo de Azure Machine Learning.
La extensión de la CLI de Azure (v1) para Machine Learning Service, el SDK de Python para Azure Machine Learning o la extensión de Visual Studio Code para Azure Machine Learning.
Importante
Algunos de los comandos de la CLI de Azure de este artículo usan la extensión
azure-cli-ml
o v1 para Azure Machine Learning. La compatibilidad con la extensión v1 finalizará el 30 de septiembre de 2025. La extensión v1 se podrá instalar y usar hasta esa fecha.Se recomienda pasar a la extensión
ml
, o v2, antes del 30 de septiembre de 2025. Para más información sobre la extensión v2, consulte Extensión de la CLI de Azure ML y SDK de Python v2.Si planea usar una instancia de Azure Virtual Network para proteger la comunicación entre el área de trabajo de Azure Machine Learning y el clúster de AKS, deberá asegurarse de que el área de trabajo y sus recursos asociados (almacenamiento, almacén de claves y Azure Container Registry) tengan puntos de conexión privados o puntos de conexión de servicio en la misma VNet que la VNet del clúster de AKS. Siga el tutorial creación de un área de trabajo segura para agregar esos puntos de conexión privados o puntos de conexión de servicio a la VNet.
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 clúster puede usar la dirección IP pública creada de forma predeterminada con BLB o SLB.
- El clúster se puede crear sin una dirección IP pública y luego configurar una dirección IP pública con un firewall con una ruta definida por el usuario. Para obtener más información, consulte Personalización de la salida de un clúster con una ruta definida por el usuario.
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:
- Creación de un clúster de AKS (CLI)
- Creación de un clúster de AKS: Portal
- Creación de un clúster de AKS (plantilla de ARM en las plantillas de inicio rápido de Azure)
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>
Eliminación de recursos relacionados con azureml-fe
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).