Share 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 koppelen. Dit wordt nu beschouwd als een verouderde functie. Zie Inleiding tot Kubernetes-rekendoel in v2 als u Azure Kubernetes Service cluster wilt koppelen met behulp van de aanbevolen benadering voor v2.

Azure Machine Learning kan getrainde machine learning-modellen implementeren naar 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

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) wilt implementeren in uw cluster in plaats van een Basic Load Balancer (BLB), maakt u een cluster in de AKS-portal/CLI/SDK en koppelt u dit 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 azure RBAC (Op rollen gebaseerd toegangsbeheer) worden toegewezen voor de Azure-resourcegroep die het cluster bevat. De service-principal/gebruiker moet ook worden toegewezen Azure Kubernetes Service clusterrol Beheer op het cluster.

  • 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 dev-testcluster is niet geschikt voor verkeer op productieniveau en kan de deductietijden verhogen. Ontwikkel-/testclusters bieden ook geen garantie voor fouttolerantie.

  • Als het cluster wordt gebruikt voor productie bij het maken of koppelen van een cluster, 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 behulp van 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 de 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 als er nieuwe Kubernetes-versies beschikbaar komen.

Wanneer u een bestaand AKS-cluster koppelt , ondersteunen we alle momenteel ondersteunde AKS-versies.

Belangrijk

Azure Kubernetes Service gebruikt 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 juiste blobfuse-methode voor de clusterversie te implementeren.

Notitie

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

U kunt preview-versies bijvoegen. 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 Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.

Beschikbare en standaardversies

Gebruik de Azure CLI-opdrachtaz aks get-versions om de beschikbare en standaard AKS-versies te vinden. De volgende opdracht retourneert bijvoorbeeld de versies 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 de beschikbare versies programmatisch wilt controleren, gebruikt u de REST API Container Service Client - List Orchestrators. Als u de beschikbare versies wilt vinden, bekijkt u de vermeldingen waarbij orchestratorType is 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 en Kubernetesdefault 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 bevat, moet u een nieuw cluster maken wanneer u 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 dan uw Azure Machine Learning-werkruimte bevinden.

Waarschuwing

Maak niet meerdere, gelijktijdige bijlagen naar hetzelfde AKS-cluster. U kunt bijvoorbeeld één AKS-cluster koppelen aan een werkruimte met twee verschillende namen of een AKS-cluster koppelen aan een andere werkruimte. Elke nieuwe bijlage breekt de vorige bestaande bijlage(s) 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 motorkap.

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 een aangepast certificaat en een 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")


Notitie

Zie TLS gebruiken om een webservice te beveiligen via Azure Machine Learning voor meer informatie over het beveiligen van modelimplementatie in een AKS-cluster

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

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 parameters enload_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 een 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

Een AKS-cluster loskoppelen

Gebruik een van de volgende methoden om een cluster los te koppelen van 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. Zie Azure CLI gebruiken met AKS als u het cluster wilt verwijderen.

VAN TOEPASSING OP:Python SDK azureml v1

aks_target.detach()

Problemen oplossen

Het cluster bijwerken

Updates naar 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 u het cluster opnieuw bevestigt.

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 niet meer beschikt over het TLS/SSL-certificaat en de persoonlijke sleutel, 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 met behulp van kubectl en het geheim azuremlfesslop te halen.

kubectl get secret/azuremlfessl -o yaml

Notitie

Kubernetes slaat de geheimen op in base64-gecodeerde indeling. U moet de onderdelen en key.pem van de cert.pem geheimen base64 decoderen voordat u ze aan attach_config.enable_sslverstrekt.

Webservicefouten

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

VAN TOEPASSING OP:Azure CLI ml-extensie v1

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

Als er na het loskoppelen van het cluster geen service actief is, verwijdert u de azureml-fe gerelateerde resources voordat u het cluster 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 mogen geen openbare IP-adressen hebben'. Dit bericht wordt geretourneerd wanneer een beheerder een beleid heeft toegepast dat het gebruik van een AKS-cluster met een openbaar IP-adres voorkomt.

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

Volgende stappen