Criar e anexar um cluster Azure Kubernetes Service com v1
APLICA-SE A:SDK python azureml v1
APLICA-SE A:Extensão de ml da CLI do Azure v1
Importante
Este artigo mostra como utilizar a CLI e o SDK v1 para criar ou anexar um cluster Azure Kubernetes Service, que agora é considerado uma funcionalidade legada. Para anexar Azure Kubernetes Service cluster com a abordagem recomendada para v2, veja Introdução ao destino de computação do Kubernetes na v2.
O Azure Machine Learning pode implementar modelos de machine learning preparados para Azure Kubernetes Service. No entanto, primeiro tem de criar um cluster de Azure Kubernetes Service (AKS) a partir da área de trabalho do Azure Machine Learning ou anexar um cluster do AKS existente. Este artigo fornece informações sobre como criar e anexar um cluster.
Pré-requisitos
Uma área de trabalho do Azure Machine Learning. Para obter mais informações, veja Criar uma área de trabalho do Azure Machine Learning.
A extensão da CLI do Azure (v1) para o serviço Machine Learning, o SDK Python do Azure Machine Learning ou a extensão do Visual Studio Code do Azure Machine Learning.
Importante
Alguns dos comandos da CLI do Azure neste artigo utilizam a
azure-cli-ml
extensão , ou v1, para o Azure Machine Learning. O suporte para a extensão v1 terminará a 30 de setembro de 2025. Poderá instalar e utilizar a extensão v1 até essa data.Recomendamos que faça a transição para a
ml
extensão , ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, veja Extensão da CLI do Azure ML e SDK Python v2.Se planeia utilizar um Rede Virtual do Azure para proteger a comunicação entre a área de trabalho do Azure Machine Learning e o cluster do AKS, a área de trabalho e os recursos associados (armazenamento, cofre de chaves, Azure Container Registry) têm de ter pontos finais privados ou pontos finais de serviço na mesma VNET que a VNET do cluster do AKS. Siga o tutorial para criar uma área de trabalho segura para adicionar esses pontos finais privados ou pontos finais de serviço à sua VNET.
Limitações
Só é possível criar ou anexar um AKS como um destino de computação individual na área de trabalho do Azure Machine Learning. Não são suportados vários anexos para um AKS.
Se precisar de um Balanceador de Carga Standard (SLB) implementado no cluster em vez de um Balanceador de Carga Básico (BLB), crie um cluster no portal do AKS/CLI/SDK e, em seguida, anexe-o à área de trabalho do Azure Machine Learning.
Se tiver uma política do Azure Policy que restrinja a criação de endereços IP públicos, a criação do cluster do AKS falhará. O AKS requer um IP Público para o tráfego de saída. O artigo relativo ao tráfego de saída também disponibiliza orientações para bloquear o tráfego de saída do cluster através do IP Público, exceto alguns nomes de domínio completamente qualificados. Existem duas formas de ativar um IP Público:
- O cluster pode utilizar o IP Público criado por predefinição com o BLB ou o SLB, Ou
- O cluster pode ser criado sem um IP Público e, em seguida, um IP Público é configurado com uma firewall com uma rota definida pelo utilizador. Para obter mais informações, veja Personalizar a saída do cluster com uma rota definida pelo utilizador.
O plano de controlo do Azure Machine Learning não comunica com este IP Público. Comunica com o plano de controlo do AKS para implementações.
Para anexar um cluster do AKS, o principal de serviço/utilizador que executa a operação tem de ter atribuída a função de Controlo de acesso baseado em funções (RBAC do Azure) do Proprietário ou contribuidor no grupo de recursos do Azure que contém o cluster. O principal de serviço/utilizador também tem de ser atribuído Azure Kubernetes Service Função de Administração de Cluster no cluster.
Se anexar um cluster do AKS, que tem um intervalo de IP autorizado ativado para aceder ao servidor de API, ative os intervalos de IP do plano de controlo do Azure Machine Learning para o cluster do AKS. O plano de controlo do Azure Machine Learning é implementado transversalmente em regiões emparelhadas e implementa pods de inferência no cluster do AKS. Sem acesso ao servidor de API, os pods de inferência não podem ser implementados. Utilize os intervalos de IP para ambas as regiões emparelhadas quando ativar os intervalos de IP num cluster do AKS.
Os intervalos de IP autorizados só funcionam com o Balanceador de Carga Standard.
Se quiser utilizar um cluster privado do AKS (mediante a utilização do Azure Private Link), primeiro tem de criar o cluster e, em seguida, anexá-lo à área de trabalho. Para obter mais informações, veja Criar um cluster do Azure Kubernetes Service privado.
A utilização de um nome de domínio completamente qualificado (FQDN) com um cluster do AKS privadonão é suportada com o Azure Machine Learning.
O nome de computação do cluster do AKS TEM DE ser exclusivo na área de trabalho do Azure Machine Learning. Pode incluir letras, dígitos e traços. Tem de começar com uma letra, terminar com uma letra ou dígito e ter entre 3 e 24 carateres de comprimento.
Se quiser implementar modelos em nós de GPU ou nós FPGA (ou em qualquer SKU específico), tem de criar um cluster com o SKU específico. Não existe suporte para criar um conjunto de nós secundário num cluster existente e implementar modelos no conjunto de nós secundário.
Ao criar ou anexar um cluster, pode selecionar se pretende criar o cluster para dev/test ou produção. Se pretender criar um cluster do AKS para desenvolvimento, validação e testes em vez de produção, defina o objetivo do cluster como dev/test. Se não especificar a finalidade do cluster, é criado um cluster de produção.
Importante
Um cluster de dev-test não é adequado para tráfego ao nível de produção e pode aumentar os tempos de inferência. Os clusters de desenvolvimento/teste também não garantem tolerância a falhas.
Ao criar ou anexar um cluster, se o cluster for utilizado para produção, tem de conter, pelo menos, 3 nós. Os clusters de dev/test têm de conter, pelo menos, um nó.
O SDK do Azure Machine Learning não oferece suporte para o dimensionamento de clusters do AKS. Para dimensionar os nós no cluster, utilize a IU do cluster do AKS no estúdio do Azure Machine Learning. Só pode alterar a contagem de nós e não o tamanho da VM do cluster. Para obter mais informações sobre como dimensionar os nós num cluster do AKS, veja os seguintes artigos:
Não atualize diretamente o cluster mediante a utilização de uma configuração do YAML. Embora o Azure Kubernetes Service suporte atualizações através da configuração do YAML, as implementações do Azure Machine Learning irão substituir as suas alterações. Os únicos dois campos do YAML que não serão substituídos são os limites de pedidos e a CPU e a memória.
A criação de um cluster do AKS com a IU estúdio do Azure Machine Learning, o SDK ou a extensão da CLI não é idempotente. Tentar criar o recurso novamente resultará num erro de que já existe um cluster com o mesmo nome.
- A utilização de um modelo do Azure Resource Manager e o recurso Microsoft.MachineLearningServices/workspaces/computes para criar um cluster do AKS também não é idempotente. Se tentar utilizar o modelo novamente para atualizar um recurso já existente, receberá o mesmo erro.
Versão do Azure Kubernetes Service
Azure Kubernetes Service permite-lhe criar um cluster com uma variedade de versões do Kubernetes. Para obter mais informações sobre as versões disponíveis, veja Versões suportadas do Kubernetes no Azure Kubernetes Service.
Ao criar um cluster Azure Kubernetes Service com um dos seguintes métodos, não tem escolha na versão do cluster que é criada:
- estúdio do Azure Machine Learning ou a secção Azure Machine Learning do portal do Azure.
- Extensão de Machine Learning para a CLI do Azure.
- SDK do Azure Machine Learning.
Estes métodos de criação de um cluster do AKS utilizam a versão predefinida do cluster. A versão predefinida muda ao longo do tempo à medida que as novas versões do Kubernetes ficam disponíveis.
Ao anexar um cluster do AKS existente, suportamos todas as versões do AKS atualmente suportadas.
Importante
Azure Kubernetes Service utiliza o controlador Blobfuse FlexVolume para as versões <=1.16 e controlador CSI de Blob para as versões >=1.17. Por conseguinte, é importante voltar a implementar ou atualizar o serviço Web após a atualização do cluster para implementar para corrigir o método blobfuse para a versão do cluster.
Nota
Podem existir casos extremos em que tem um cluster mais antigo que já não é suportado. Neste caso, a operação de anexação devolverá um erro e listará as versões atualmente suportadas.
Pode anexar versões de pré-visualização . A funcionalidade de pré-visualização é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. O suporte para utilizar versões de pré-visualização pode ser limitado. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Versões disponíveis e predefinidas
Para encontrar as versões do AKS disponíveis e predefinidas, utilize o comando az aks get-versions da CLI do Azure. Por exemplo, o comando seguinte devolve as versões disponíveis na região E.U.A. Oeste:
az aks get-versions -l westus -o table
O resultado deste comando é semelhante ao seguinte texto:
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 encontrar a versão predefinida utilizada ao criar um cluster através do Azure Machine Learning, pode utilizar o --query
parâmetro para selecionar a versão predefinida:
az aks get-versions -l westus --query "orchestrators[?default == `true`].orchestratorVersion" -o table
O resultado deste comando é semelhante ao seguinte texto:
Result
--------
1.16.13
Se quiser verificar programaticamente as versões disponíveis, utilize a API REST Cliente do Container Service – List Orchestrators. Para encontrar as versões disponíveis, veja as entradas onde orchestratorType
está Kubernetes
. As entradas associadas orchestrationVersion
contêm as versões disponíveis que podem ser anexadas à sua área de trabalho.
Para encontrar a versão predefinida que é utilizada ao criar um cluster através do Azure Machine Learning, localize a entrada onde orchestratorType
está Kubernetes
e default
é true
. O valor associado orchestratorVersion
é a versão predefinida. O fragmento JSON seguinte mostra uma entrada de exemplo:
...
{
"orchestratorType": "Kubernetes",
"orchestratorVersion": "1.16.13",
"default": true,
"upgrades": [
{
"orchestratorType": "",
"orchestratorVersion": "1.17.7",
"isPreview": false
}
]
},
...
Criar um novo cluster do AKS
Estimativa de tempo: aproximadamente 10 minutos.
Criar ou anexar um cluster do AKS é um processo único para a área de trabalho. Pode reutilizar este cluster para várias implementações. Se eliminar o cluster ou o grupo de recursos que o contém, terá de criar um novo cluster da próxima vez que precisar de implementar. Pode ter vários clusters do AKS ligados à área de trabalho.
O exemplo seguinte demonstra como criar um novo cluster do AKS com o SDK e a CLI:
APLICA-SE A:Python SDK azureml 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 obter mais informações sobre as classes, métodos e parâmetros utilizados neste exemplo, veja os seguintes documentos de referência:
Anexar um cluster do AKS existente
Estimativa de tempo: Aproximadamente 5 minutos.
Se já tiver um cluster do AKS na sua subscrição do Azure, pode utilizá-lo com a sua área de trabalho.
Dica
O cluster do AKS existente pode estar numa região do Azure diferente da área de trabalho do Azure Machine Learning.
Aviso
Não crie vários anexos simultâneos para o mesmo cluster do AKS. Por exemplo, anexar um cluster do AKS a uma área de trabalho com dois nomes diferentes ou anexar um cluster do AKS a uma área de trabalho diferente. Cada novo anexo irá quebrar os anexos existentes anteriores e causar um erro imprevisível.
Se quiser voltar a anexar um cluster do AKS, por exemplo, para alterar o TLS ou outra definição de configuração do cluster, primeiro tem de remover o anexo existente utilizando AksCompute.detach().
Para obter mais informações sobre como criar um cluster do AKS com a CLI ou portal do Azure, veja os seguintes artigos:
- Criar um cluster do AKS (CLI)
- Criar um cluster do AKS (portal)
- Criar um cluster do AKS (Modelo do ARM em Modelos de Início Rápido do Azure)
O exemplo seguinte demonstra como anexar um cluster do AKS existente à área de trabalho:
APLICA-SE A:Python SDK azureml 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 obter mais informações sobre as classes, métodos e parâmetros utilizados neste exemplo, veja os seguintes documentos de referência:
Criar ou anexar um cluster do AKS com terminação TLS
Quando cria ou anexa um cluster do AKS, pode ativar a terminação do TLS com objetos de configuração AksCompute.provisioning_configuration() e AksCompute.attach_configuration( ). Ambos os métodos devolvem um objeto de configuração que tem um método enable_ssl e pode utilizar enable_ssl método para ativar o TLS.
O exemplo seguinte mostra como ativar a terminação do TLS com a geração e configuração automáticas de certificados TLS com o certificado Microsoft no bastidor.
APLICA-SE A:Python SDK azureml 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")
O exemplo seguinte mostra como ativar a terminação TLS com o certificado personalizado e o nome de domínio personalizado. Com o domínio e o certificado personalizados, tem de atualizar o registo DNS para apontar para o endereço IP do ponto final de classificação. Consulte Atualizar o DNS
APLICA-SE A:Python SDK azureml 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 obter mais informações sobre como proteger a implementação de modelos no cluster do AKS, veja Utilizar o TLS para proteger um serviço Web através do Azure Machine Learning
Criar ou anexar um cluster do AKS para utilizar Balanceador de Carga internos com IP privado
Quando cria ou anexa um cluster do AKS, pode configurar o cluster para utilizar uma Balanceador de Carga interna. Com uma Balanceador de Carga interna, a classificação de pontos finais para as suas implementações no AKS utilizará um IP privado na rede virtual. Os fragmentos de código seguintes mostram como configurar uma Balanceador de Carga Interna para um cluster do AKS.
APLICA-SE A:Python SDK azureml v1
Para criar um cluster do AKS que utiliza uma Balanceador de Carga interna, utilize os load_balancer_type
parâmetros eload_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)
Importante
Se o cluster do AKS estiver configurado com uma Balanceador de Carga Interna, a utilização de um certificado fornecido pela Microsoft não é suportada e tem de utilizar um certificado personalizado para ativar o TLS.
Nota
Para obter mais informações sobre como proteger o ambiente de inferência, veja Proteger um Ambiente de Inferência do Azure Machine Learning
Desanexar um cluster do AKS
Para desanexar um cluster da área de trabalho, utilize um dos seguintes métodos:
Aviso
Utilizar o estúdio do Azure Machine Learning, o SDK ou a extensão da CLI do Azure para machine learning para desanexar um cluster do AKS não elimina o cluster do AKS. Para eliminar o cluster, veja Utilizar a CLI do Azure com o AKS.
APLICA-SE A:Python SDK azureml v1
aks_target.detach()
Resolução de problemas
Atualizar o cluster
Atualizações aos componentes do Azure Machine Learning instalados num cluster de Azure Kubernetes Service tem de ser aplicado manualmente.
Pode aplicar estas atualizações ao desanexar o cluster da área de trabalho do Azure Machine Learning e voltar a ligar o cluster à área de trabalho.
APLICA-SE A:SDK python azureml v1
compute_target = ComputeTarget(workspace=ws, name=clusterWorkspaceName)
compute_target.detach()
compute_target.wait_for_completion(show_output=True)
Antes de poder voltar a anexar o cluster à área de trabalho, primeiro tem de eliminar quaisquer azureml-fe
recursos relacionados. Se não existir nenhum serviço ativo no cluster, pode eliminar os recursos azureml-fe
relacionados com o seguinte código.
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
Se o TLS estiver ativado no cluster, terá de fornecer o certificado TLS/SSL e a chave privada ao voltar a anexar o cluster.
APLICA-SE A:SDK python azureml 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)
Se já não tiver o certificado TLS/SSL e a chave privada ou estiver a utilizar um certificado gerado pelo Azure Machine Learning, pode obter os ficheiros antes de desanexar o cluster ao ligar ao cluster com kubectl
e obter o segredo azuremlfessl
.
kubectl get secret/azuremlfessl -o yaml
Nota
O Kubernetes armazena os segredos no formato codificado em Base64. Terá de descodificar base64 e os cert.pem
key.pem
componentes dos segredos antes de os fornecer ao attach_config.enable_ssl
.
Falhas de serviços Web
Muitas falhas de serviços Web no AKS podem ser depuradas ao ligar ao cluster com kubectl
. Pode obter o para um cluster do kubeconfig.json
AKS ao executar
APLICA-SE A:Extensão de ml da CLI do Azure v1
az aks get-credentials -g <rg> -n <aks cluster name>
Eliminar recursos relacionados com azureml-fe
Depois de desanexar o cluster, se não existir nenhum serviço ativo no cluster, elimine os azureml-fe
recursos relacionados antes de anexar novamente:
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
Os balanceadores de carga não devem ter IPs públicos
Ao tentar criar ou anexar um cluster do AKS, poderá receber uma mensagem a indicar que o pedido foi negado porque "Os Balanceadores de Carga não devem ter IPs públicos". Esta mensagem é devolvida quando um administrador aplica uma política que impede a utilização de um cluster do AKS com um endereço IP público.
Para resolver este problema, crie/anexe o cluster com os load_balancer_type
parâmetros e load_balancer_subnet
. Para obter mais informações, veja Internal Balanceador de Carga (PRIVATE IP).