Delen via


Een Azure Kubernetes Service-cluster maken en koppelen met v1

VAN TOEPASSING OP: Python SDK azureml v1

VAN TOEPASSING OP: Azure CLI ml-extensie v1

Belangrijk

In dit artikel wordt beschreven hoe u de CLI en SDK v1 gebruikt om een Azure Kubernetes Service-cluster te maken of te koppelen. Dit wordt nu beschouwd als verouderde functie. Als u een Azure Kubernetes Service-cluster wilt koppelen met behulp van de aanbevolen benadering voor v2, raadpleegt u Inleiding tot het Kubernetes-rekendoel in v2.

Azure Machine Learning kan getrainde machine learning-modellen implementeren in Azure Kubernetes Service. U moet echter eerst een AKS-cluster (Azure Kubernetes Service) maken vanuit uw Azure Machine Learning-werkruimte of een bestaand AKS-cluster koppelen . Dit artikel bevat informatie over het maken en koppelen van een cluster.

Vereisten

  • Een Azure Machine Learning-werkruimte. Zie Een Azure Machine Learning-werkruimte maken voor meer informatie.

  • De Azure CLI-extensie (v1) voor Machine Learning Service, Azure Machine Learning Python SDK of de Azure Machine Learning Visual Studio Code-extensie.

    Belangrijk

    Sommige Azure CLI-opdrachten in dit artikel gebruiken de azure-cli-mlextensie (of v1) voor Azure Machine Learning. Ondersteuning voor de v1-extensie eindigt op 30 september 2025. U kunt de v1-extensie tot die datum installeren en gebruiken.

    U wordt aangeraden vóór 30 september 2025 over te stappen op de mlextensie of v2. Zie de Azure ML CLI-extensie en Python SDK v2 voor meer informatie over de v2-extensie.

  • Als u van plan bent een virtueel Azure-netwerk te gebruiken om de communicatie tussen uw Azure Machine Learning-werkruimte en het AKS-cluster te beveiligen, moeten uw werkruimte en de bijbehorende resources (opslag, sleutelkluis, Azure Container Registry) privé-eindpunten of service-eindpunten hebben in hetzelfde VNET als het VNET van het AKS-cluster. Volg de zelfstudie om een beveiligde werkruimte te maken om deze privé-eindpunten of service-eindpunten toe te voegen aan uw VNET.

Beperkingen

  • Een AKS kan alleen worden gemaakt of gekoppeld als één rekendoel in de Azure Machine Learning-werkruimte. Meerdere koppelingen voor één AKS wordt niet ondersteund.

  • Als u een Standard Load Balancer (SLB) in uw cluster wilt implementeren in plaats van een Basic Load Balancer (BLB), maakt u een cluster in de AKS-portal/CLI/SDK en koppelt u het vervolgens aan de Azure Machine Learning-werkruimte.

  • Als u een Azure Policy hebt die het maken van openbare IP-adressen beperkt, mislukt het maken van een AKS-cluster. AKS vereist een openbaar IP-adres voor uitgaand verkeer. Het artikel over uitgaand verkeer bevat ook richtlijnen voor het vergrendelen van uitgaand verkeer van het cluster via het openbare IP-adres, met uitzondering van een paar volledig gekwalificeerde domeinnamen. Er zijn 2 manieren om een openbaar IP-adres in te schakelen:

    Het Azure Machine Learning-besturingsvlak praat niet met dit openbare IP-adres. Het praat met het AKS-besturingsvlak voor implementaties.

  • Als u een AKS-cluster wilt koppelen, moet aan de service-principal/gebruiker die de bewerking uitvoert, de rol Eigenaar of Inzender voor op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) worden toegewezen aan de Azure-resourcegroep die het cluster bevat. Aan de service-principal/gebruiker moet ook de rol Azure Kubernetes Service-clusterbeheerder in het cluster worden toegewezen.

  • Als u een AKS-cluster koppelt waarvoor een geautoriseerd IP-bereik is ingeschakeld voor toegang tot de API-server, schakelt u de IP-bereiken van het Azure Machine Learning-besturingsvlak in voor het AKS-cluster. Het Azure Machine Learning-besturingsvlak wordt geïmplementeerd in gekoppelde regio's en implementeert deductiepods in het AKS-cluster. Zonder toegang tot de API-server kunnen de deductiepods niet worden geïmplementeerd. Gebruik de IP-bereiken voor beide gekoppelde regio's bij het inschakelen van de IP-bereiken in een AKS-cluster.

    Geautoriseerde IP-bereiken werken alleen met Standard Load Balancer.

  • Als u een privé-AKS-cluster wilt gebruiken (met behulp van Azure Private Link), moet u het cluster eerst maken en vervolgens koppelen met de werkruimte. Zie Een privé Azure Kubernetes Service-cluster maken voor meer informatie.

  • Het gebruik van een openbare FQDN (Fully Qualified Domain Name) met een privé-AKS-cluster wordt niet ondersteund met Azure Machine Learning.

  • De rekennaam voor het AKS-cluster MOET uniek zijn binnen uw Azure Machine Learning-werkruimte. Het kan letters, cijfers en streepjes bevatten. Het moet beginnen met een letter, eindigen met een letter of cijfer en tussen de 3 en 24 tekens lang zijn.

  • Als u modellen wilt implementeren op GPU-knooppunten of FPGA-knooppunten (of een specifieke SKU), moet u een cluster maken met de specifieke SKU. Er is geen ondersteuning voor het maken van een secundaire knooppuntpool in een bestaand cluster en het implementeren van modellen in de secundaire knooppuntpool.

  • Wanneer u een cluster maakt of koppelt, kunt u selecteren of u het cluster wilt maken voor dev-test of productie. Als u een AKS-cluster wilt maken voor ontwikkeling, validatie en testen in plaats van productie, stelt u het clusterdoel in op dev-test. Als u het doel van het cluster niet opgeeft, wordt er een productie-cluster gemaakt.

    Belangrijk

    Een ontwikkeltestcluster is niet geschikt voor verkeer op productieniveau en kan deductietijden verhogen. Dev/testclusters garanderen ook geen fouttolerantie.

  • Wanneer u een cluster maakt of koppelt, als het cluster wordt gebruikt voor productie, moet het ten minste drie knooppunten bevatten. Voor een dev-test-cluster moet het ten minste 1 knooppunt bevatten.

  • De Azure Machine Learning-SDK biedt geen ondersteuning voor het schalen van een AKS-cluster. Als u de knooppunten in het AKS-cluster wilt wijzigen, gebruikt u de UI voor uw AKS-cluster in de Azure Machine Learning-studio. U kunt alleen het aantal knooppunten wijzigen, niet de VM-grootte van het cluster. Zie de volgende artikelen voor meer informatie over het schalen van de knooppunten in een AKS-cluster:

  • Werk het cluster niet rechtstreeks bij met behulp van een YAML-configuratie. Hoewel Azure Kubernetes Services updates via YAML-configuratie ondersteunt, overschrijven Azure Machine Learning-implementaties uw wijzigingen. De enige twee YAML-velden die niet worden overschreven, zijn aanvraaglimieten en CPU en geheugen.

  • Het maken van een AKS-cluster met behulp van de Azure Machine Learning-studio UI, SDK of CLI-extensie is niet idempotent. Als u de resource opnieuw probeert te maken, treedt er een fout op dat er al een cluster met dezelfde naam bestaat.

Azure Kubernetes Service-versie

Met Azure Kubernetes Service kunt u een cluster maken met verschillende Kubernetes-versies. Zie ondersteunde Kubernetes-versies in Azure Kubernetes Service voor meer informatie over beschikbare versies.

Wanneer u een Azure Kubernetes Service-cluster maakt met behulp van een van de volgende methoden, hebt u geen keuze in de versie van het cluster dat wordt gemaakt:

  • Azure Machine Learning-studio of de sectie Azure Machine Learning van Azure Portal.
  • Machine Learning-extensie voor Azure CLI.
  • Azure Machine Learning SDK.

Deze methoden voor het maken van een AKS-cluster gebruiken de standaardversie van het cluster. De standaardversie verandert in de loop van de tijd naarmate nieuwe Kubernetes-versies beschikbaar komen.

Bij het koppelen van een bestaand AKS-cluster ondersteunen we alle momenteel ondersteunde AKS-versies.

Belangrijk

Azure Kubernetes Service maakt gebruik van het Blobfuse FlexVolume-stuurprogramma voor de versies <=1.16 en het Blob CSI-stuurprogramma voor de versies >=1.17. Daarom is het belangrijk om de webservice na de clusterupgrade opnieuw te implementeren of bij te werken om de blobfuse-methode voor de clusterversie te corrigeren.

Notitie

Er kunnen edge-gevallen zijn waarin u een ouder cluster hebt dat niet meer wordt ondersteund. In dit geval retourneert de bijlagebewerking een fout en worden de momenteel ondersteunde versies weergegeven.

U kunt preview-versies koppelen. Preview-functionaliteit wordt geleverd zonder service level agreement en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Ondersteuning voor het gebruik van preview-versies is mogelijk beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

Beschikbare en standaardversies

Als u de beschikbare en standaardversies van AKS wilt vinden, gebruikt u de Azure CLI-opdracht az aks get-versions. Met de volgende opdracht worden bijvoorbeeld de versies geretourneerd die beschikbaar zijn in de regio VS - west:

az aks get-versions -l westus -o table

De uitvoer van deze opdracht is vergelijkbaar met de volgende tekst:

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

Als u de standaardversie wilt vinden die wordt gebruikt bij het maken van een cluster via Azure Machine Learning, kunt u de --query parameter gebruiken om de standaardversie te selecteren:

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

De uitvoer van deze opdracht is vergelijkbaar met de volgende tekst:

Result
--------
1.16.13

Als u programmatisch de beschikbare versies wilt controleren, gebruikt u de Container Service-client - List Orchestrators REST API. Als u de beschikbare versies wilt vinden, bekijkt u de vermeldingen waar orchestratorType zich bevindt Kubernetes. De bijbehorende orchestrationVersion vermeldingen bevatten de beschikbare versies die aan uw werkruimte kunnen worden gekoppeld .

Als u de standaardversie wilt vinden die wordt gebruikt bij het maken van een cluster via Azure Machine Learning, zoekt u de vermelding waar orchestratorType dat is Kubernetes en default is true. De bijbehorende orchestratorVersion waarde is de standaardversie. In het volgende JSON-fragment ziet u een voorbeeldvermelding:

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

Een nieuw AKS-cluster maken

Geschatte tijd: ongeveer 10 minuten.

Het maken of koppelen van een AKS-cluster is een eenmalig proces voor uw werkruimte. U kunt dit cluster opnieuw gebruiken voor meerdere implementaties. Als u het cluster of de resourcegroep verwijdert die het cluster bevat, moet u een nieuw cluster maken wanneer u het de volgende keer wilt implementeren. U kunt meerdere AKS-clusters aan uw werkruimte koppelen.

In het volgende voorbeeld ziet u hoe u een nieuw AKS-cluster maakt met behulp van de SDK en CLI:

VAN TOEPASSING OP: 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)

Zie de volgende referentiedocumenten voor meer informatie over de klassen, methoden en parameters die in dit voorbeeld worden gebruikt:

Een bestaand AKS-cluster koppelen

Geschatte tijd: ongeveer 5 minuten.

Als u al een AKS-cluster in uw Azure-abonnement hebt, kunt u dit gebruiken met uw werkruimte.

Tip

Het bestaande AKS-cluster kan zich in een andere Azure-regio bevinden dan uw Azure Machine Learning-werkruimte.

Waarschuwing

Maak niet meerdere, gelijktijdige bijlagen aan hetzelfde AKS-cluster. Als u bijvoorbeeld één AKS-cluster koppelt aan een werkruimte met twee verschillende namen of één AKS-cluster koppelt aan een andere werkruimte. Elke nieuwe bijlage onderbreekt de vorige bestaande bijlagen en veroorzaakt onvoorspelbare fouten.

Als u een AKS-cluster opnieuw wilt koppelen, bijvoorbeeld om tls of een andere clusterconfiguratie-instelling te wijzigen, moet u eerst de bestaande bijlage verwijderen met behulp van AksCompute.detach().

Zie de volgende artikelen voor meer informatie over het maken van een AKS-cluster met behulp van de Azure CLI of portal:

In het volgende voorbeeld ziet u hoe u een bestaand AKS-cluster koppelt aan uw werkruimte:

VAN TOEPASSING OP: 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)

Zie de volgende referentiedocumenten voor meer informatie over de klassen, methoden en parameters die in dit voorbeeld worden gebruikt:

Een AKS-cluster maken of koppelen met TLS-beëindiging

Wanneer u een AKS-cluster maakt of koppelt, kunt u TLS-beëindiging inschakelen met AksCompute.provisioning_configuration() en AksCompute.attach_configuration() configuratieobjecten. Beide methoden retourneren een configuratieobject met een enable_ssl methode en u kunt enable_ssl methode gebruiken om TLS in te schakelen.

In het volgende voorbeeld ziet u hoe u TLS-beëindiging met automatische generatie en configuratie van TLS-certificaten inschakelt met behulp van Microsoft-certificaat onder de schermen.

VAN TOEPASSING OP: 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")


In het volgende voorbeeld ziet u hoe u TLS-beëindiging inschakelt met aangepast certificaat en aangepaste domeinnaam. Met aangepast domein en certificaat moet u uw DNS-record bijwerken zodat deze verwijst naar het IP-adres van het score-eindpunt. Zie Uw DNS bijwerken

VAN TOEPASSING OP: 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")


Een AKS-cluster maken of koppelen om interne load balancer te gebruiken met een privé-IP-adres

Wanneer u een AKS-cluster maakt of koppelt, kunt u het cluster configureren voor het gebruik van een interne load balancer. Met een interne load balancer gebruiken score-eindpunten voor uw implementaties naar AKS een privé-IP-adres in het virtuele netwerk. De volgende codefragmenten laten zien hoe u een interne load balancer configureert voor een AKS-cluster.

VAN TOEPASSING OP: Python SDK azureml v1

Als u een AKS-cluster wilt maken dat gebruikmaakt van een interne load balancer, gebruikt u de load_balancer_type volgende parameters 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)

Belangrijk

Als uw AKS-cluster is geconfigureerd met een interne load balancer, wordt het gebruik van een door Microsoft verstrekt certificaat niet ondersteund en moet u aangepast certificaat gebruiken om TLS in te schakelen.

Notitie

Zie Een Azure Machine Learning-deductieomgeving beveiligen/> voor meer informatie over het beveiligen van een deductieomgeving van Azure Machine Learning

Een AKS-cluster loskoppelen

Gebruik een van de volgende methoden om een cluster los te koppelen vanuit uw werkruimte:

Waarschuwing

Als u de Azure Machine Learning-studio, SDK of de Azure CLI-extensie voor machine learning gebruikt om een AKS-cluster los te koppelen, wordt het AKS-cluster niet verwijderd. Als u het cluster wilt verwijderen, raadpleegt u De Azure CLI gebruiken met AKS.

VAN TOEPASSING OP: Python SDK azureml v1

aks_target.detach()

Probleemoplossing

Het cluster bijwerken

Updates voor Azure Machine Learning-onderdelen die zijn geïnstalleerd in een Azure Kubernetes Service-cluster, moeten handmatig worden toegepast.

U kunt deze updates toepassen door het cluster los te koppelen van de Azure Machine Learning-werkruimte en het cluster opnieuw aan de werkruimte te koppelen.

VAN TOEPASSING OP: Python SDK azureml v1

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

Voordat u het cluster opnieuw aan uw werkruimte kunt koppelen, moet u eerst alle azureml-fe gerelateerde resources verwijderen. Als er geen actieve service in het cluster is, kunt u uw azureml-fe gerelateerde resources verwijderen met de volgende code.

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

Als TLS is ingeschakeld in het cluster, moet u het TLS/SSL-certificaat en de persoonlijke sleutel opgeven wanneer het cluster opnieuw wordt gekoppeld.

VAN TOEPASSING OP: Python SDK 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)

Als u het TLS/SSL-certificaat en de persoonlijke sleutel niet meer hebt of als u een certificaat gebruikt dat is gegenereerd door Azure Machine Learning, kunt u de bestanden ophalen voordat u het cluster loskoppelt door verbinding te maken met het cluster en kubectl het geheim azuremlfesslop te halen.

kubectl get secret/azuremlfessl -o yaml

Notitie

In Kubernetes worden de geheimen opgeslagen in de met Base64 gecodeerde indeling. U moet base64-decoderen van de cert.pem en key.pem onderdelen van de geheimen voordat u ze aanlevert attach_config.enable_ssl.

Webservicefouten

Veel webservicefouten in AKS kunnen worden opgespoord door verbinding te maken met het cluster met behulp van kubectl. U kunt het kubeconfig.json voor een AKS-cluster ophalen door het uitvoeren

VAN TOEPASSING OP: Azure CLI ml-extensie v1

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

Nadat het cluster is losgekoppeld en er geen actieve service in het cluster is, verwijdert u de azureml-fe gerelateerde resources voordat u het opnieuw koppelt:

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

Load balancers mogen geen openbare IP-adressen hebben

Wanneer u probeert een AKS-cluster te maken of te koppelen, ontvangt u mogelijk een bericht dat de aanvraag is geweigerd omdat Load Balancers geen openbare IP-adressen mogen hebben. Dit bericht wordt geretourneerd wanneer een beheerder een beleid heeft toegepast dat voorkomt dat een AKS-cluster met een openbaar IP-adres wordt gebruikt.

U kunt dit probleem oplossen door het cluster te maken/koppelen met behulp van de load_balancer_type en load_balancer_subnet parameters. Zie Internal Load Balancer (privé-IP)voor meer informatie.

Volgende stappen