Membuat dan melampirkan kluster Azure Kubernetes Service dengan v1

BERLAKU UNTUK:Python SDK azureml v1

BERLAKU UNTUK:Azure CLI ml extension v1

Penting

Artikel ini menunjukkan cara menggunakan CLI dan SDK v1 untuk membuat atau melampirkan kluster Azure Kubernetes Service, yang dianggap sebagai fitur warisan sekarang. Untuk melampirkan kluster Azure Kubernetes Service menggunakan pendekatan yang direkomendasikan untuk v2, lihat Pengantar target komputasi Kube di v2.

Azure Machine Learning dapat menyebarkan model pembelajaran mesin terlatih ke Azure Kubernetes Service. Namun, Anda harus terlebih dahulu membuat kluster Azure Kubernetes Service (AKS) dari ruang kerja Azure Machine Learning Anda, atau melampirkan kluster AKS yang ada. Artikel ini menyediakan informasi tentang membuat dan melampirkan klaster.

Prasyarat

Batasan

  • AKS hanya dapat dibuat atau dilampirkan sebagai target komputasi tunggal di ruang kerja Azure Machine Learning. Beberapa lampiran untuk satu AKS tidak didukung.

  • Jika Anda memerlukan Load Balancer Standar (SLB) yang disebarkan di kluster Anda alih-alih Load Balancer Dasar (BLB), buat kluster di portal AKS/CLI/SDK lalu lampirkan ke ruang kerja Azure Machine Learning.

  • Jika Anda memiliki Azure Policy yang membatasi pembuatan alamat IP Publik, pembuatan kluster AKS akan gagal. Azure Kubernetes Service membutuhkan IP Publik untuk lalu lintas egress. Artikel lalu lintas egress juga menyediakan panduan untuk mengunci lalu lintas egress dari kluster melalui IP Publik, kecuali untuk beberapa nama domain yang sepenuhnya memenuhi syarat. Ada 2 cara untuk mengaktifkan IP Publik:

    Sarana kontrol Azure Machine Learning tidak berbicara dengan IP Publik ini. Sarana ini berbicara dengan sarana kontrol AKS untuk penyebaran.

  • Untuk melampirkan kluster AKS, perwakilan layanan/pengguna yang melakukan operasi harus diberi peran Pemilik atau kontributor kontrol akses berbasis peran Azure (Azure RBAC) pada grup sumber daya Azure yang berisi kluster. Perwakilan layanan/pengguna juga harus ditetapkan Peran Admin Kluster Azure Kubernetes Service pada kluster.

  • Jika Anda melampirkan kluster AKS, yang memiliki Rentang IP sah yang diaktifkan untuk mengakses server API, aktifkan rentang IP sarana kontrol Azure Machine Learning untuk kluster AKS. Sarana kontrol Azure Machine Learning disebarkan di seluruh wilayah berpasangan dan menyebarkan pod inferensi pada kluster AKS. Tanpa akses ke server API, pod inferensi tidak dapat disebarkan. Gunakan rentang IP untuk kedua wilayah berpasangan saat mengaktifkan rentang IP dalam kluster AKS.

    Rentang IP yang diotorisasi hanya berfungsi dengan Load Balancer Standard.

  • Jika Anda ingin menggunakan kluster AKS privat (menggunakan Azure Private Link), Anda harus membuat kluster terlebih dahulu, lalu melampirkannya ke ruang kerja. Selengkapnya, lihat Membuat kluster Azure Kubernetes Service privat.

  • Menggunakan nama domain publik yang memenuhi syarat (FQDN) dengan kluster AKS privat tidak didukung dengan Azure Machine Learning.

  • Nama komputasi untuk kluster AKS HARUS unik dalam ruang kerja Azure Machine Learning Anda. Nama dapat mencakup huruf, digit, dan tanda hubung. Nama harus dimulai dengan huruf, diakhiri dengan huruf atau digit, dan panjangnya antara 3 dan 24 karakter.

  • Jika Anda ingin menyebarkan model ke simpul GPU atau simpul FPGA (atau SKU tertentu), maka Anda harus membuat kluster dengan SKU tertentu. Tidak ada dukungan untuk pembuatan kumpulan simpul sekunder di kluster yang ada dan menyebarkan model di kumpulan simpul sekunder.

  • Saat membuat atau melampirkan kluster, Anda dapat memilih apakah akan membuat kluster untuk dev-test atau produksi. Jika Anda ingin membuat kluster AKS untuk pengembangan, validasi, dan pengujian alih-alih produksi, tetapkan tujuan kluster untuk dev-test. Jika Anda tidak menentukan tujuannya, kluster produksi akan dibuat.

    Penting

    Kluster dev-test tidak cocok untuk lalu lintas tingkat produksi dan dapat meningkatkan waktu inferensi. Kluster dev/test juga tidak menjamin toleransi kegagalan.

  • Saat membuat atau melampirkan kluster, jika kluster akan digunakan untuk produksi, maka kluster tersebut harus berisi setidaknya 3 node. Untuk kluster pengujian-pengembangan, kluster harus berisi setidaknya 1 simpul.

  • Azure Machine Learning SDKtidak menyediakan penskalaan dukungan kluster AKS. Untuk menskalakan simpul dalam kluster, gunakan antarmuka pengguna untuk kluster AKS Anda di studio Azure Machine Learning. Anda hanya dapat mengubah jumlah simpul, bukan ukuran kluster komputer virtual. Selengkapnya tentang penskalaan simpul dalam kluster AKS, lihat artikel berikut ini:

  • Jangan langsung memperbarui kluster dengan menggunakan konfigurasi YAML. Meskipun Azure Kubernetes Services mendukung pembaruan melalui konfigurasi YAML, penyebaran Azure Machine Learning akan mengambil alih perubahan Anda. Hanya ada dua bidang YAML yang tidak akan ditimpa adalah batas permintaan serta cpu dan memori.

  • Pembuatan kluster AKS menggunakan ekstensi antarmuka pengguna studio Azure Machine Learning, SDK, atau CLI tidak idempoten. Mencoba membuat sumber daya lagi akan menimbulkan kesalahan dengan kluster dengan nama yang sama sudah ada.

Versi Azure Kubernetes Service

Azure Kubernetes Service mengizinkan Anda membuat kluster menggunakan berbagai versi Kubernetes. Selengkapnya tentang versi yang tersedia, lihat versi Kubernetes yang didukung di Azure Kubernetes Service.

Saat membuat kluster Azure Kubernetes Service menggunakan salah satu metode berikut, Anda tidak memiliki pilihan dalam versi kluster yang dibuat:

  • Studio Azure Machine Learning, atau bagian Azure Machine Learning di portal Microsoft Azure.
  • Ekstensi Azure Machine Learning untuk Azure CLI.
  • Azure Machine Learning SDK.

Metode pembuatan kluster AKS ini menggunakan versi default kluster. Versi default berubah dari waktu ke waktu ketika versi Kube baru tersedia.

Saat melampirkan klusterAKS yang ada, kami mendukung semua versi AKS yang saat ini didukung.

Penting

Azure Kubernetes Service menggunakan driver Blobfuse FlexVolume untuk versi <=1.16 dan driver Blob CSI untuk versi >=1.17. Oleh karena itu, penting untuk menyebarkan kembali atau memperbarui layanan web setelah peningkatan kluster untuk menyebarkan metode blobfuse yang benar untuk versi kluster.

Catatan

Mungkin ada kasus tepi di mana Anda memiliki kluster yang lebih lama dan tidak lagi didukung. Dalam hal ini, operasi lampiran akan mengembalikan kesalahan dan mencantumkan versi yang saat ini didukung.

Anda dapat melampirkan versi pratinjau. Fungsionalitas pratinjau disediakan tanpa perjanjian tingkat layanan, dan tidak direkomendasikan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas. Dukungan untuk menggunakan versi pratinjau mungkin dibatasi. Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Versi yang tersedia dan default

Untuk menemukan versi AKS yang tersedia dan default, gunakan perintah Azure CLIaz aks get-versions. Misalnya, perintah berikut mengembalikan versi yang tersedia di wilayah US Barat:

az aks get-versions -l westus -o table

Output perintah ini sama dengan teks berikut:

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

Untuk menemukan versi default yang digunakan saat pembuatan kluster melalui Azure Machine Learning, Anda dapat menggunakan parameter --query untuk memilih versi default:

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

Output perintah ini sama dengan teks berikut:

Result
--------
1.16.13

Jika Anda ingin memeriksa versi yang tersedia secara terprogram, gunakan REST API Klien Layanan Kontainer - Daftar Orkestrator. Untuk menemukan versi yang tersedia, lihat entri di mana orchestratorType adalah Kubernetes. Entri orchestrationVersion terkait berisi versi yang tersedia yang bisa dilampirkan ke ruang kerja Anda.

Untuk menemukan versi default yang digunakan saat pembuatan kluster melalui Azure Machine Learning, temukan entri di mana orchestratorType adalah Kubernetes dan default adalah true. Nilai orchestratorVersion terkait adalah versi default. Cuplikan JSON berikut menunjukkan contoh entri:

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

Membuat kluster AKS baru

Perkiraan waktu: Sekitar 10 menit.

Membuat atau melampirkan kluster AKS adalah proses satu kali untuk ruang kerja Anda. Anda dapat menggunakan kembali kluster ini untuk beberapa penyebaran. Jika Anda menghapus kluster atau grup sumber daya yang memuatnya, Anda harus membuat kluster baru saat Anda perlu menyebarkannya lagi. Anda dapat memiliki beberapa kluster AKS yang terlampir pada ruang kerja Anda.

Contoh berikut menunjukkan cara membuat kluster AKS baru menggunakan SDK dan CLI:

BERLAKU UNTUK: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)

Selengkapnya tentang kelas, metode, dan parameter yang digunakan dalam contoh ini, lihat dokumen referensi berikut:

Melampirkan kluster AKS yang sudah ada

Perkiraan waktu: Sekitar 5 menit.

Jika Anda sudah memiliki kluster AKS di langganan Azure, Anda bisa menggunakannya dengan ruang kerja Anda.

Tip

Kluster AKS yang ada dapat berada di wilayah Azure selain ruang kerja Azure Machine Learning Anda.

Peringatan

Jangan membuat beberapa lampiran simultan ke kluster AKS yang sama. Misalnya, melampirkan satu kluster AKS ke ruang kerja menggunakan dua nama yang berbeda, atau melampirkan satu kluster AKS ke ruang kerja yang berbeda. Setiap lampiran baru akan memutus lampiran yang ada sebelumnya, dan menyebabkan kesalahan yang tidak dapat diprediksi.

Jika Anda ingin melampirkan kembali kluster AKS, misalnya untuk mengubah TLS atau pengaturan konfigurasi kluster lainnya, Anda harus menghapus lampiran yang ada terlebih dahulu dengan menggunakan AksCompute.detach().

Selengkapnya tentang pembuatan kluster AKS menggunakan Azure CLI atau portal, lihat artikel berikut ini:

Contoh berikut menunjukkan cara melampirkan kluster AKS yang ada ke ruang kerja Anda:

BERLAKU UNTUK: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)

Selengkapnya tentang kelas, metode, dan parameter yang digunakan dalam contoh ini, lihat dokumen referensi berikut:

Membuat atau melampirkan kluster AKS dengan penghentian TLS

Saat membuat atau melampirkan kluster AKS, Anda dapat mengaktifkan penghentian TLS dengan objek konfigurasi AksCompute.provisioning_configuration() dan AksCompute.attach_configuration() . Kedua metode mengembalikan objek konfigurasi yang memiliki metode enable_ssl dan Anda dapat menggunakan metode enable_ssl untuk mengaktifkan TLS.

Contoh berikut menunjukkan cara mengaktifkan penghentian TLS dengan pembuatan dan konfigurasi sertifikat TLS otomatis dengan menggunakan sertifikat Microsoft di balik layanan.

BERLAKU UNTUK: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")


Contoh berikut menunjukkan cara mengaktifkan penghentian TLS dengan sertifikat kustom dan nama domain kustom. Dengan domain kustom dan sertifikat kustom, Anda harus memperbarui rekaman DNS Anda untuk mengarahkan ke alamat IP titik akhir penilaian, lihat Memperbarui DNS Anda

BERLAKU UNTUK: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")


Catatan

Selengkapnya tentang cara mengamankan penyebaran model pada kluster AKS, lihat menggunakan TLS untuk mengamankan layanan web melalui Azure Machine Learning

Membuat atau melampirkan kluster AKS untuk menggunakan Load Balancer Internal dengan IP privat

Saat membuat atau melampirkan kluster AKS, Anda dapat mengonfigurasikannya untuk menggunakan Load Balancer Internal. Dengan Load Balancer Internal, penilaina titik akhir untuk penyebaran Anda ke AKS akan menggunakan IP privat dalam jaringan virtual. Cuplikan kode berikut menunjukkan cara mengonfigurasi Load Balancer Internal untuk kluster AKS.

BERLAKU UNTUK:Python SDK azureml v1

Untuk membuat kluster AKS yang menggunakan Load Balancer Internal, gunakan parameter load_balancer_type dan 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)

Penting

Jika kluster AKS Anda dikonfigurasi dengan Load Balancer internal, menggunakan sertifikat yang disediakan Microsoft tidak didukung dan Anda harus menggunakan sertifikat kustom untuk mengaktifkan TLS.

Catatan

Selengkapnya tentang cara mengamankan lingkungan inferensi, lihat Mengamankan Lingkungan Inferensi Azure Machine Learning

Melepas kluster AKS

Untuk melepaskan kluster dari ruang kerja Anda, gunakan salah satu metode berikut:

Peringatan

Menggunakan studio Azure Machine Learning, SDK, atau ekstensi Azure CLI untuk pembelajaran mesin untuk melepaskan kluster AKS tidak menghapus klaster tersebut. Untuk menghapus kluster, lihat Gunakan Azure CLI dengan AKS.

BERLAKU UNTUK:Python SDK azureml v1

aks_target.detach()

Pemecahan Masalah

Memperbarui kluster

Pembaruan komponen Azure Machine Learning yang terinstal di kluster Azure Kubernetes Service harus diterapkan secara manual.

Anda dapat menerapkan pembaruan ini dengan mencopot kluster dari ruang kerja Azure Machine Learning dan melampirkannya kembali kluster ke ruang kerja.

BERLAKU UNTUK:Python SDK azureml v1

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

Sebelum Anda dapat melampirkan kembali kluster ke ruang kerja, Anda harus terlebih dahulu menghapus sumber daya terkait azureml-fe. Jika tidak ada layanan aktif di kluster, Anda dapat menghapus sumber daya terkait azureml-fe dengan kode berikut.

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

Jika TLS diaktifkan dalam kluster, Anda harus menyediakan sertifikat dan kunci privat TLS/SSL saat melampirkan kembali kluster.

BERLAKU UNTUK: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)

Jika Anda tidak lagi memiliki sertifikat dan kunci privat TLS/SSL, atau Anda menggunakan sertifikat yang dihasilkan oleh Azure Machine Learning, Anda dapat mengambil file sebelum melepaskan kluster dengan menyambungkan ke kluster menggunakan kubectl dan mengambil rahasia azuremlfessl.

kubectl get secret/azuremlfessl -o yaml

Catatan

Kubernetes menyimpan rahasia dalam format yang dikodekan Base64. Anda harus membatalkan kode Base-64 komponen cert.pem dan key.pem rahasia sebelum menyediakannya untuk attach_config.enable_ssl.

Kegagalan layanan web

Banyak kegagalan layanan web di Azure Kubernetes Service dapat didebug dengan menyambungkan ke kluster menggunakan kubectl. Anda bisa mendapatkan kubeconfig.json untuk kluster AKS dengan menjalankan

BERLAKU UNTUK: Ekstensi ml Azure CLI v1

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

Setelah mencopot kluster, jika tidak ada layanan aktif dalam kluster, silakan hapus sumber daya terkait azureml-fe sebelum melampirkannya lagi:

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

Penyeimbang muatan tidak boleh memiliki IP publik

Saat mencoba membuat atau melampirkan kluster AKS, Anda mungkin menerima pesan bahwa permintaan tersebut ditolak karena "Load Balancer tidak boleh memiliki IP publik". Pesan ini dikembalikan ketika administrator telah menerapkan kebijakan yang mencegah penggunaan kluster AKS dengan alamat IP publik.

Untuk mengatasi masalah ini, buat/lampirkan kluster dengan menggunakan parameter load_balancer_type dan load_balancer_subnet. Untuk informasi selengkapnya, lihat Load Balancer Internal (IP privat).

Langkah berikutnya