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. Pokud chcete připojit cluster Azure Kubernetes Service pomocí doporučeného přístupu pro v2, přečtěte si téma Úvod do výpočetního cíle Kubernetes ve verzi 2.

Azure Machine Learning může nasadit natré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 služby Azure Machine Learning, nebo připojit existující cluster AKS. Tento článek obsahuje informace o vytvoření i připojení 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 místo základního Load Balancer (BLB) nasadit Standard Load Balancer(SLB), vytvořte cluster na portálu, rozhraní příkazovém řádku nebo sadě SDK AKS a pak ho připojte k pracovnímu prostoru Služby 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á cluster obsahuje. Instanční objekt nebo uživatel musí mít v clusteru také přiřazenou Azure Kubernetes Service 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-test není vhodný pro provoz na produkční úrovni a může prodloužit dobu odvozování. Clustery pro vývoj/testování také nezaručují odolnost proti chybám.

  • Pokud se při vytváření nebo připojování clusteru použije k produkčnímu prostředí, musí obsahovat aspoň 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 ve verzi vytvořeného clusteru na výběr:

  • studio Azure Machine Learning nebo oddíl služby Azure Machine Learning Azure Portal.
  • Rozšíření Služby Machine Learning pro Azure CLI
  • Azure Machine Learning SDK.

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 znovu nasadit nebo aktualizovat webovou službu , aby bylo možné provést nasazení pro správnou metodu blobfuse pro verzi clusteru.

Poznámka

Můžou existovat hraniční případy, kdy máte starší cluster, který už není podporovaný. V tomto 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

K vyhledání dostupných a výchozích verzí AKS použijte příkaz 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 je podobný 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 pomocí parametru --query vybrat výchozí verzi:

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

Výstup tohoto příkazu je podobný následujícímu textu:

Result
--------
1.16.13

Pokud chcete programově zkontrolovat dostupné verze, použijte rozhraní REST API Container Service Client – List Orchestraators. 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()

Řešení potíží

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 odpojením clusteru od pracovního prostoru Azure Machine Learning a opětovným připojováním clusteru k pracovnímu prostoru.

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)

Před opětovným připojením clusteru 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 tyto soubory před odpojením clusteru načíst tak, že se ke clusteru připojíte pomocí kubectl příkazu a načtete tajný klíč azuremlfessl.

kubectl get secret/azuremlfessl -o yaml

Poznámka

Kubernetes ukládá tajné kódy ve formátu s kódováním Base64. Před poskytnutím attach_config.enable_ssltajných kódů budete muset dekódovat cert.pem komponenty tajných kódů Base64 a key.pem .

Selhání webové služby

Mnoho selhání webových služeb v AKS je možné ladit připojením ke clusteru pomocí kubectl. Pro 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, před dalším připojením odstraňte azureml-fe 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 požadavek byl zamítnut, 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žije 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