Vytvoření a připojení clusteru Azure Kubernetes Service s v1

PLATÍ PRO:Sada Python SDK azureml v1

PLATÍ PRO:Rozšíření Azure CLI ml v1

Důležité

Tento článek ukazuje, jak pomocí rozhraní příkazového řádku a sady SDK v1 vytvořit nebo připojit cluster Azure Kubernetes Service, který se teď považuje za starší verzi funkce. Pokud chcete připojit Azure Kubernetes Service cluster pomocí doporučeného přístupu pro verzi 2, projděte si téma Úvod do cílového výpočetního objektu Kubernetes ve verzi 2.

Azure Machine Learning dokáže nasadit trénované modely strojového učení do Azure Kubernetes Service. Nejprve ale musíte buď vytvořit cluster Azure Kubernetes Service (AKS) z pracovního prostoru Azure Machine Learning, nebo připojit existující cluster AKS. Tento článek obsahuje informace o vytváření i připojování clusteru.

Požadavky

Omezení

  • AKS je možné vytvořit nebo připojit pouze jako jeden cílový výpočetní objekt v pracovním prostoru Azure Machine Learning. Více příloh pro jednu AKS se nepodporuje.

  • Pokud potřebujete v clusteru místo základního Load Balancer (BLB) nasadit Standard Load Balancer (SLB), vytvořte cluster na portálu AKS, rozhraní příkazového řádku nebo sadě SDK a pak ho připojte k pracovnímu prostoru Azure Machine Learning.

  • Pokud uplatňujete zásadu Azure Policy, která omezuje vytváření veřejných IP adres, vytvoření clusteru AKS se nezdaří. AKS vyžaduje veřejnou IP adresu pro odchozí přenosy. Článek o odchozích přenosech obsahuje také pokyny k uzamčení výchozích přenosů z clusteru přes veřejnou IP adresu s výjimkou několika plně kvalifikovaných názvů domén. Existují 2 způsoby, jak povolit veřejnou IP adresu:

    Řídicí rovina služby Azure Machine Learning s touto veřejnou IP adresou nekomunikuje. V rámci nasazení komunikuje s řídicí rovinou AKS.

  • Pokud chcete připojit cluster AKS, musí mít instanční objekt nebo uživatel provádějící operaci přiřazenou roli Vlastník nebo přispěvatel Řízení přístupu na základě role Azure (Azure RBAC) ve skupině prostředků Azure, která obsahuje cluster. Instanční objekt nebo uživatel musí mít také přiřazenou Azure Kubernetes Service clusteru Správa roli clusteru.

  • Pokud připojíte cluster AKS s povoleným rozsahem autorizovaných IP adres pro přístup k serveru API, povolte tento rozsah IP adres v řídicí rovině služby Azure Machine Learning pro cluster AKS. Řídicí rovina služby Azure Machine Learning se nasazuje napříč spárovanými oblastmi a nasazuje odvozovací pody v clusteru AKS. Bez přístupu k serveru API nelze odvozovací pody nasadit. Při povolování rozsahů IP adres v clusteru AKS použijte rozsahy IP adres pro obě spárované oblasti.

    Autorizované rozsahy IP adres fungují jen se službou Standard Load Balancer.

  • Pokud chcete použít privátní cluster AKS (přes Azure Private Link), musíte cluster nejprve vytvořit a pak ho připojit k pracovnímu prostoru. Další informace najdete v tématu Vytvoření privátního clusteru Azure Kubernetes Service.

  • Azure Machine Learning nepodporuje používání veřejného plně kvalifikovaného názvu domény (FQDN) s privátním clusterem AKS.

  • Název výpočetního prostředku, který představuje cluster AKS, MUSÍ být jedinečný v rámci pracovního prostoru Azure Machine Learning. Může obsahovat písmena, číslice a pomlčky. Musí začínat písmenem a končit písmenem nebo číslicí a musí mít délku 3 až 24 znaků.

  • Pokud chcete nasadit modely do uzlů GPU nebo uzlů FPGA (nebo jakékoli konkrétní skladové položky), musíte vytvořit cluster s konkrétní skladovou položkou. Vytvoření sekundárního fondu uzlů v existujícím clusteru a nasazení modelů do sekundárního fondu uzlů se nepodporuje.

  • Při vytváření nebo připojování clusteru můžete vybrat, jestli chcete cluster vytvořit pro vývoj a testování, nebo pro produkční prostředí. Pokud chcete místo produkčního prostředí vytvořit cluster AKS pro vývoj, ověřování a testování, nastavte účel clusteru na vývoj a testování. Pokud nezadáte účel clusteru, vytvoří se produkční cluster.

    Důležité

    Cluster vývoj-testování není vhodný pro provoz na produkční úrovni a může prodloužit dobu odvozování. Clustery pro vývoj a testování také nezaručují odolnost proti chybám.

  • Pokud se cluster při vytváření nebo připojování použije pro produkční prostředí, musí obsahovat alespoň 3 uzly. Cluster pro vývoj a testování musí obsahovat alespoň 1 uzel.

  • Sada SDK pro Azure Machine Learning neposkytuje podporu škálování clusteru AKS. Pokud chcete škálovat uzly v clusteru, použijte uživatelské rozhraní clusteru AKS ve studiu Azure Machine Learning. Můžete změnit jen počet uzlů, nikoli velikost virtuálního počítače v clusteru. Další informace o škálování uzlů v clusteru AKS najdete v následujících článcích:

  • Neaktualizujte cluster přímo pomocí konfigurace YAML. Služba Azure Kubernetes Services sice podporuje aktualizace prostřednictvím konfigurace YAML, ale nasazení Azure Machine Learning přepíší vaše změny. Jedinými dvěma poli YAML, která se nepřepíší, obsahují údaje pro limity požadavků a procesor a paměť.

  • Vytvoření clusteru AKS pomocí uživatelského rozhraní studio Azure Machine Learning, sady SDK nebo rozšíření rozhraní příkazového řádku není idempotentní. Při opětovném pokusu o vytvoření prostředku dojde k chybě typu „cluster se stejným názvem už existuje“.

    • Použití šablony Azure Resource Manager a prostředku Microsoft.MachineLearningServices/workspaces/computes k vytvoření clusteru AKS také není idempotentní. Pokud se pokusíte šablonu opětovně použít k aktualizaci už existujícího prostředku, zobrazí se stejná chyba.

Verze Azure Kubernetes Service

Azure Kubernetes Service umožňuje vytvořit cluster pomocí různých verzí Kubernetes. Další informace o dostupných verzích najdete v tématu podporované verze Kubernetes v Azure Kubernetes Service.

Při vytváření clusteru Azure Kubernetes Service pomocí jedné z následujících metod nemáte na výběr ve verzi clusteru, která je vytvořena:

  • studio Azure Machine Learning nebo část služby Azure Machine Learning Azure Portal.
  • Rozšíření Machine Learning pro Azure CLI
  • Sada Sdk služby Azure Machine Learning

Tyto metody vytvoření clusteru AKS používají výchozí verzi clusteru. Výchozí verze se v průběhu času mění s tím, jak budou k dispozici nové verze Kubernetes.

Při připojování existujícího clusteru AKS podporujeme všechny aktuálně podporované verze AKS.

Důležité

Azure Kubernetes Service používá ovladač Blobfuse FlexVolume pro verze <=1.16 a ovladač Blob CSI pro verze >=1.17. Proto je důležité po upgradu clusteru webovou službu znovu nasadit nebo aktualizovat, aby bylo možné provést nasazení na správnou metodu blobfuse pro verzi clusteru.

Poznámka

V hraničních případech můžete mít starší cluster, který už není podporovaný. V takovém případě operace připojení vrátí chybu a zobrazí seznam aktuálně podporovaných verzí.

Můžete připojit verze Preview . Funkce Ve verzi Preview se poskytují bez smlouvy o úrovni služeb a nedoporučuje se pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Podpora používání verzí Preview může být omezená. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Dostupné a výchozí verze

Dostupné a výchozí verze AKS najdete pomocí příkazu Azure CLIaz aks get-versions. Například následující příkaz vrátí verze dostupné v oblasti USA – západ:

az aks get-versions -l westus -o table

Výstup tohoto příkazu se podobá následujícímu textu:

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

Pokud chcete najít výchozí verzi, která se používá při vytváření clusteru prostřednictvím služby Azure Machine Learning, můžete použít --query parametr a vybrat výchozí verzi:

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

Výstup tohoto příkazu se podobá následujícímu textu:

Result
--------
1.16.13

Pokud chcete dostupné verze zkontrolovat prostřednictvím kódu programu, použijte rozhraní REST API Container Service Client – List Orchestrators. Dostupné verze najdete v položkách, kde orchestratorType je Kubernetes. Přidružené orchestrationVersion položky obsahují dostupné verze, které lze připojit k vašemu pracovnímu prostoru.

Pokud chcete najít výchozí verzi, která se používá při vytváření clusteru prostřednictvím služby Azure Machine Learning, vyhledejte položku, kde orchestratorType je Kubernetes a default je true. Přidružená orchestratorVersion hodnota je výchozí verze. Následující fragment kódu JSON ukazuje příklad položky:

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

Vytvoření nového clusteru AKS

Časový odhad: Přibližně 10 minut.

Vytvoření nebo připojení clusteru AKS je pro váš pracovní prostor jednorázový proces. Tento cluster můžete znovu použít pro více nasazení. Pokud odstraníte cluster nebo skupinu prostředků, která ho obsahuje, musíte při příštím nasazení vytvořit nový cluster. K pracovnímu prostoru můžete mít připojené více clusterů AKS.

Následující příklad ukazuje, jak vytvořit nový cluster AKS pomocí sady SDK a rozhraní příkazového řádku:

PLATÍ PRO:Sada 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)

Další informace o třídách, metodách a parametrech použitých v tomto příkladu najdete v následujících referenčních dokumentech:

Připojení existujícího clusteru AKS

Časový odhad: Přibližně 5 minut.

Pokud už ve svém předplatném Azure máte cluster AKS, můžete ho použít se svým pracovním prostorem.

Tip

Stávající cluster AKS může být v jiné oblasti Azure, než je váš pracovní prostor Služby Azure Machine Learning.

Upozornění

Nevytvováváte více souběžných příloh ke stejnému clusteru AKS. Například připojení jednoho clusteru AKS k pracovnímu prostoru pomocí dvou různých názvů nebo připojení jednoho clusteru AKS k jinému pracovnímu prostoru. Každá nová příloha naruší předchozí existující přílohy a způsobí nepředvídatelnou chybu.

Pokud chcete cluster AKS znovu připojit, například změnit nastavení konfigurace protokolu TLS nebo jiného clusteru, musíte nejprve odebrat existující přílohu pomocí AksCompute.detach().

Další informace o vytvoření clusteru AKS pomocí azure CLI nebo portálu najdete v následujících článcích:

Následující příklad ukazuje, jak k pracovnímu prostoru připojit existující cluster AKS:

PLATÍ PRO:Sada 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)

Další informace o třídách, metodách a parametrech použitých v tomto příkladu najdete v následujících referenčních dokumentech:

Vytvoření nebo připojení clusteru AKS s ukončením protokolu TLS

Při vytváření nebo připojení clusteru AKS můžete povolit ukončení protokolu TLS s konfiguračními objekty AksCompute.provisioning_configuration() a AksCompute.attach_configuration(). Obě metody vrací objekt konfigurace, který má metodu enable_ssl , a k povolení protokolu TLS můžete použít metodu enable_ssl .

Následující příklad ukazuje, jak povolit ukončení protokolu TLS s automatickým generováním a konfigurací certifikátů TLS pomocí certifikátu Microsoftu pod pokličkou.

PLATÍ PRO:Sada 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")


Následující příklad ukazuje, jak povolit ukončení protokolu TLS pomocí vlastního certifikátu a názvu vlastní domény. U vlastní domény a certifikátu musíte aktualizovat záznam DNS tak, aby ukazoval na IP adresu bodujícího koncového bodu. Viz Aktualizace DNS.

PLATÍ PRO:Sada 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")


Poznámka

Další informace o tom, jak zabezpečit nasazení modelu v clusteru AKS, najdete v tématu Použití protokolu TLS k zabezpečení webové služby prostřednictvím služby Azure Machine Learning.

Vytvoření nebo připojení clusteru AKS pro použití interních Load Balancer s privátní IP adresou

Když vytvoříte nebo připojíte cluster AKS, můžete ho nakonfigurovat tak, aby používal interní Load Balancer. S interním Load Balancer budou bodovací koncové body pro vaše nasazení do AKS používat privátní IP adresu v rámci virtuální sítě. Následující fragmenty kódu ukazují, jak nakonfigurovat interní Load Balancer pro cluster AKS.

PLATÍ PRO:Sada Python SDK azureml v1

Pokud chcete vytvořit cluster AKS, který používá interní Load Balancer, použijte load_balancer_type parametry aload_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)

Důležité

Pokud je váš cluster AKS nakonfigurovaný s interním Load Balancer, použití certifikátu poskytnutého Microsoftem se nepodporuje a k povolení protokolu TLS musíte použít vlastní certifikát.

Poznámka

Další informace o tom, jak zabezpečit prostředí pro odvozování, najdete v tématu Zabezpečení prostředí odvozování služby Azure Machine Learning.

Odpojení clusteru AKS

K odpojení clusteru od pracovního prostoru použijte jednu z následujících metod:

Upozornění

Při použití studio Azure Machine Learning, sady SDK nebo rozšíření Azure CLI pro strojové učení k odpojení clusteru AKS se cluster AKS neodstraní. Informace o odstranění clusteru najdete v tématu Použití Azure CLI s AKS.

PLATÍ PRO:Sada Python SDK azureml v1

aks_target.detach()

Poradce při potížích

Aktualizace clusteru

Aktualizace do komponent služby Azure Machine Learning nainstalovaných v clusteru Azure Kubernetes Service se musí použít ručně.

Tyto aktualizace můžete použít tak, že cluster odpojíte od pracovního prostoru Služby Azure Machine Learning a znovu ho k pracovnímu prostoru připojíte.

PLATÍ PRO:Sada Python SDK azureml v1

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

Než budete moct cluster znovu připojit k pracovnímu prostoru, musíte nejprve odstranit všechny azureml-fe související prostředky. Pokud v clusteru není žádná aktivní služba, můžete související prostředky odstranit azureml-fe pomocí následujícího kódu.

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

Pokud je v clusteru povolený protokol TLS, budete muset při opětovném připojení clusteru zadat certifikát TLS/SSL a privátní klíč.

PLATÍ PRO:Sada 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)

Pokud už nemáte certifikát TLS/SSL a privátní klíč nebo používáte certifikát vygenerovaný službou Azure Machine Learning, můžete soubory před odpojením clusteru načíst připojením ke clusteru pomocí kubectl a načtením tajného kódu azuremlfessl.

kubectl get secret/azuremlfessl -o yaml

Poznámka

Kubernetes ukládá tajné kódy v kódování Base64. Před poskytnutím tajných kódů do budete muset dekódovat cert.pemattach_config.enable_sslkomponenty a key.pem base64.

Selhání webových služeb

Mnoho selhání webových služeb v AKS je možné ladit připojením ke clusteru pomocí kubectl. Cluster AKS můžete získat kubeconfig.json spuštěním příkazu

PLATÍ PRO:Rozšíření Azure CLI ml v1

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

Pokud po odpojení clusteru není v clusteru žádná aktivní služba, odstraňte azureml-fe před dalším připojením související prostředky:

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

Nástroje pro vyrovnávání zatížení by neměly mít veřejné IP adresy

Při pokusu o vytvoření nebo připojení clusteru AKS se může zobrazit zpráva, že se žádost zamítla, protože nástroje pro vyrovnávání zatížení by neměly mít veřejné IP adresy. Tato zpráva se vrátí, když správce použil zásadu, která brání použití clusteru AKS s veřejnou IP adresou.

Pokud chcete tento problém vyřešit, vytvořte nebo připojte cluster pomocí load_balancer_type parametrů a load_balancer_subnet . Další informace najdete v tématu Interní Load Balancer (privátní IP adresa).

Další kroky