次の方法で共有


v1 で Azure Kubernetes Service クラスターを作成してアタッチする

適用対象:Azure Machine Learning SDK v1 for Python

適用対象:Azure CLI ml 拡張機能 v1

重要

この記事では、Azure Machine Learning SDK v1 の使用に関する情報を提供します。 SDK v1 は 2025 年 3 月 31 日の時点で非推奨となり、サポートは 2026 年 6 月 30 日に終了します。 SDK v1 は、その日付までインストールして使用できます。

2026 年 6 月 30 日より前に SDK v2 に移行することをお勧めします。 SDK v2 の詳細については、「 Azure Machine Learning Python SDK v2SDK v2 リファレンスとは」を参照してください。

重要

この記事では、CLI と SDK v1 を使用して Azure Kubernetes Service クラスターを作成またはアタッチする方法について説明します。これは、現在レガシ機能と見なされています。 v2 に推奨される方法を使用して Azure Kubernetes Service クラスターをアタッチするには、「v2 での Kubernetes コンピューティング ターゲットの概要」を参照してください。

Azure Machine Learning では、トレーニング済みの機械学習モデルを Azure Kubernetes Service にデプロイできます。 ただし、最初に Azure Machine Learning ワークスペースから Azure Kubernetes Service (AKS) クラスターを作成するか、既存の AKS クラスターをアタッチする必要があります。 この記事では、クラスターの作成とアタッチの両方について説明します。

前提条件

制限事項

  • AKS は、Azure Machine Learning ワークスペース内の単一のコンピューティング先としてのみ作成またはアタッチできます。 1 つの AKS コンピューティングの複数の添付ファイルはサポートされていません。

  • Basic Load Balancer (BLB) ではなく Standard Load Balancer (SLB) をクラスターにデプロイする必要がある場合は、AKS ポータル、CLI、または SDK でクラスターを作成してから、Azure Machine Learning ワークスペースにそれをアタッチします。

  • パブリック IP アドレスの作成を制限する Azure ポリシーがある場合、AKS クラスターの作成は失敗します。 AKS では、エグレス トラフィック用のパブリック IP が必要です。 エグレス トラフィックに関する記事では、いくつかの完全修飾ドメイン名を除き、パブリック IP を介したクラスターからのエグレス トラフィックをロックダウンする方法についても説明されています。 パブリック IP を有効にするには、次の 2 つの方法があります。

    Azure Machine Learning コントロール プレーンは、このパブリック IP とは通信しません。 デプロイのために AKS コントロール プレーンと通信します。

  • AKS クラスターを接続するには、操作を実行するサービス プリンシパル/ユーザーに、クラスターを含む Azure リソース グループで所有者または共同作成者 Azure ロールベースのアクセス制御 (Azure RBAC) ロールを割り当てる必要があります。 サービス プリンシパルまたはユーザーには、クラスターでの Azure Kubernetes Service クラスター管理者ロールが割り当てられている必要もあります。

  • API サーバーへのアクセスが有効な認可済みの IP 範囲を持つ AKS クラスターをアタッチする場合は、その AKS クラスターに対する Azure Machine Learning コントロール プレーンの IP 範囲を有効にします。 Azure Machine Learning コントロール プレーンは、ペアになっているリージョンにまたがってデプロイされ、AKS クラスター上に推論ポッドをデプロイします。 API サーバーにアクセスしないと、推論ポッドをデプロイできません。 AKS クラスターで IP 範囲を有効にする場合、ペアになっているリージョンの両方に対して IP 範囲を使用します。

    承認済みの IP 範囲は、Standard Load Balancer でのみ機能します。

  • (Azure Private Link を使用して) プライベート AKS クラスターを使用する場合は、最初にクラスターを作成してから、ワークスペースにそれをアタッチする必要があります。 詳細については、「プライベート Azure Kubernetes Service クラスターを作成する」を参照してください。

  • プライベート AKS クラスターでパブリックの完全修飾ドメイン名 (FQDN) を使うことは、Azure Machine Learning ではサポートされていません

  • AKS クラスターのコンピューティング名は、Azure Machine Learning ワークスペース内で一意である必要があります。 文字、数字、ダッシュを含めることができます。 先頭はアルファベット文字、末尾はアルファベット文字または数字である必要があり、3 から 24 文字の長さにする必要があります。

  • GPU ノードまたは FPGA ノード (つまり任意の特定の SKU) にモデルをデプロイする場合は、その特定の SKU でクラスターを作成する必要があります。 既存のクラスターにセカンダリ ノード プールを作成し、そのセカンダリ ノード プールにモデルをデプロイすることはサポートされていません。

  • クラスターを作成またはアタッチするときに、開発テストまたは運用のためにクラスターを作成するかどうかを選択できます。 運用のためではなく、開発検証テストのための AKS クラスターを作成する場合は、クラスターの目的開発テストに設定します。 クラスターの目的を指定しない場合は、 運用 クラスターが作成されます。

    重要

    開発テスト クラスターは運用レベルのトラフィックには適していません。推論時間が長くなる可能性があります。 開発/テスト クラスターでは、フォールト トレランスも保証されません。

  • クラスターを作成またはアタッチするときに、クラスターを 運用環境に使用する場合は、 少なくとも 3 つのノードを含める必要があります。 開発テストクラスターの場合は、少なくとも 1 つのノードを含む必要があります。

  • Azure Machine Learning SDK では、AKS クラスターのスケーリングはサポートされていません。 クラスター内のノードをスケーリングするには、Azure Machine Learning スタジオで AKS クラスターの UI を使います。 変更できるのはノード数のみであり、クラスターの VM サイズは変更できません。 AKS クラスターでのノードのスケーリングについて詳しくは、次の記事をご覧ください。

  • YAML の構成を使ってクラスターを直接更新しないでください。 Azure Kubernetes Services では YAML 構成を使用した更新がサポートされていますが、Azure Machine Learning デプロイによって変更がオーバーライドされます。 上書きされない YAML フィールドは、 要求の制限CPU とメモリの 2 つだけです。

  • Azure Machine Learning スタジオ UI、SDK、または CLI 拡張機能を使った AKS クラスターの作成は、べき等ではありません。 リソースを再度作成しようとすると、同じ名前のクラスターが既に存在するというエラーが発生します。

    • Azure Resource Manager テンプレートと Microsoft.MachineLearningServices/workspaces/computes リソースを使った AKS クラスターの作成も、べき等ではありません。 テンプレートをもう一度使用して既存のリソースを更新しようとすると、同じエラーが表示されます。

Azure Kubernetes Service のバージョン

Azure Kubernetes Service では、さまざまな Kubernetes バージョンを使用してクラスターを作成できます。 使用可能なバージョンの詳細については、「Azure Kubernetes Service (AKS) でサポートされている Kubernetes のバージョン」を参照してください。

次のいずれかの方法を使用して Azure Kubernetes Service クラスターを 作成 する場合、作成されるクラスターの バージョンに選択肢はありません

  • Azure Machine Learning スタジオ、または Azure portal の Azure Machine Learning セクション。
  • Azure CLI 向けの Machine Learning 拡張機能。
  • Azure Machine Learning SDK。

これらの方法で AKS クラスターを作成すると、クラスターの既定のバージョンが使われます。 Kubernetes の新しいバージョンが利用可能になると、"既定のバージョンは時間とともに変化します"。

既存の AKS クラスターをアタッチするときは、現在サポートされているすべての AKS バージョンがサポートされます。

重要

Azure Kubernetes Service では、Blobfuse FlexVolume ドライバー (バージョン <= 1.16 の場合) と Blob CSI driver (バージョン >= 1.17 の場合) が使われます。 そのため、クラスターバージョンの正しい blobfuse メソッドにデプロイするには、クラスターのアップグレード後に Web サービス を再デプロイまたは更新することが重要です。

サポートされなくなった古いクラスターがあるエッジ ケースが存在する可能性があります。 この場合、添付ファイル操作はエラーを返し、現在サポートされているバージョンを一覧表示します。

プレビュー バージョンをアタッチできます。 プレビュー段階の機能はサービス レベル アグリーメントなしで提供されており、運用環境のワークロードに使用することはお勧めできません。 機能によっては、サポートされない場合、または機能が制限される場合があります。 プレビュー バージョンの使用のサポートが制限される場合があります。 詳しくは、「Microsoft Azure プレビューの追加使用条件」をご覧ください。

使用可能なバージョンと既定のバージョン

AKS の使用可能なバージョンと既定のバージョンを確認するには、Azure CLI コマンド az aks get-versions を使用します。 たとえば、次のコマンドは、米国西部リージョンで使用可能なバージョンを返します。

az aks get-versions -l westus -o table

このコマンドの出力は次のテキストのようになります。

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

Azure Machine Learning でクラスターを作成するときに使用される既定のバージョンを確認するには、--query パラメーターを使用して既定のバージョンを選択します。

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

このコマンドの出力は次のテキストのようになります。

Result
--------
1.16.13

使用できるバージョンをプログラムで調べるには、Container Service Client - List Orchestrators REST API を使います。 使用できるバージョンを見つけるには、orchestratorTypeKubernetes であるエントリを調べます。 関連付けられている orchestrationVersion エントリには、ワークスペースにアタッチできるバージョンが含まれています。

Azure Machine Learning を使用してクラスターを作成するときに使用される既定のバージョンを見つけるには、orchestratorTypeKubernetesdefaulttrue になっているエントリを見つけます。 関連付けられている orchestratorVersion 値が既定のバージョンです。 次の JSON スニペットは、エントリの例を示しています。

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

新しい AKS クラスターを作成する

推定所要時間: 約 10 分。

AKS クラスターの作成またはアタッチは、ワークスペースでの 1 回限りのプロセスです。 複数のデプロイでこのクラスターを再利用できます。 クラスターまたはそれを含むリソース グループを削除した場合、次回デプロイする必要があるときに、新しいクラスターを作成する必要があります。 複数の AKS クラスターをワークスペースにアタッチできます。

次の例では、SDK と CLI を使用して新しい AKS クラスターを作成する方法を示します。

適用対象:Azure Machine Learning SDK v1 for Python

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)

この例で使われているクラス、メソッド、パラメーターの詳細については、次のリファレンス ドキュメントをご覧ください。

既存の AKS クラスターをアタッチする

推定所要時間: 約 5 分。

Azure サブスクリプションに AKS クラスターが既にある場合は、それをワークスペースで使用できます。

ヒント

既存の AKS クラスターは、Azure Machine Learning ワークスペース以外の Azure リージョンに存在できます。

警告

同じ AKS クラスターに対して複数のアタッチメントを同時に作成することは避けてください。 たとえば、2 つの異なる名前を使用して 1 つの AKS クラスターをワークスペースにアタッチしたり、1 つの AKS クラスターを別のワークスペースにアタッチしたりすることです。 新しい添付ファイルごとに、以前の既存の添付ファイルが破損し、予期しないエラーが発生します。

TLS や他のクラスター構成設定を変更するためなど、AKS クラスターを再度アタッチしたい場合は、最初に AksCompute.detach() を使って既存のアタッチを削除する必要があります。

Azure CLI または portal を使用した AKS クラスターの作成の詳細については、次の記事をご覧ください。

次の例では、既存の AKS クラスターをワークスペースにアタッチする方法を示します。

適用対象:Azure Machine Learning SDK v1 for Python

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)

この例で使われているクラス、メソッド、パラメーターの詳細については、次のリファレンス ドキュメントをご覧ください。

TLS 終端を使用して AKS クラスターを作成またはアタッチする

AKS クラスターを作成またはアタッチするときに、AksCompute.provisioning_configuration()AksCompute.attach_configuration() の構成オブジェクトを使って、TLS 終端を有効にできます。 どちらのメソッドからも enable_ssl メソッドを持つ構成オブジェクトが返され、この enable_ssl メソッドを使って TLS を有効にできます。

次の例では、内部で Microsoft 証明書を使って、TLS 証明書の生成と構成が自動的に行われる TLS 終端を有効にする方法を示します。

適用対象:Azure Machine Learning SDK v1 for Python

   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")


次の例では、カスタム証明書とカスタム ドメイン名を使用して TLS 終端を有効にする方法を示します。 カスタム ドメインと証明書では、スコア付けエンドポイントの IP アドレスを指す DNS レコードを更新する必要があります。「DNS の更新」を参照してください。

適用対象:Azure Machine Learning SDK v1 for Python

   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")


AKS クラスターでのモデルデプロイをセキュリティで保護する方法の詳細については、TLS を使用して Azure Machine Learning を使用して Web サービスをセキュリティで保護する方法に関するページを参照してください。

内部ロード バランサーとプライベート IP を使用する AKS クラスターを作成またはアタッチする

AKS クラスターを作成またはアタッチするとき、内部ロード バランサーを使うようにクラスターを構成できます。 内部ロード バランサーでは、AKS へのデプロイのスコア付けエンドポイントは、仮想ネットワーク内のプライベート IP を使用します。 次のコード スニペットでは、AKS クラスター用に内部ロード バランサーを構成する方法を示します。

適用対象:Azure Machine Learning SDK v1 for Python

内部ロード バランサーを使用する AKS クラスターを作成するには、load_balancer_typeload_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)

重要

AKS クラスターが内部ロード バランサーで構成されている場合、Microsoft が提供する証明書の使用はサポートされていないため、 カスタム証明書を使用して TLS を有効にする必要があります。

推論環境をセキュリティで保護する方法の詳細については、「Azure Machine Learning 推論環境のセキュリティ保護」を参照してください。

AKS クラスターをデタッチする

ワークスペースからクラスターをデタッチするには、次のいずれかの方法を使用します。

警告

Azure Machine Learning スタジオ、SDK、または機械学習のための Azure CLI 拡張機能を使用して AKS クラスターをデタッチしても、AKS クラスターは削除されません。 クラスターの削除については、AKS での Azure CLI の使用に関する記事をご覧ください。

適用対象:Azure Machine Learning SDK v1 for Python

aks_target.detach()

トラブルシューティング

クラスターを更新する

Azure Kubernetes Service クラスターにインストールされている Azure Machine Learning コンポーネントの更新プログラムは、手動で適用する必要があります。

これらの更新プログラムを適用するには、Azure Machine Learning ワークスペースからクラスターをデタッチしてから、クラスターをワークスペースに再アタッチします。

適用対象:Azure Machine Learning SDK v1 for Python

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

クラスターをワークスペースに再アタッチする前に、まず azureml-fe 関連リソースを削除する必要があります。 クラスターにアクティブなサービスがない場合は、次のコードを使用して azureml-fe 関連リソースを削除できます。

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

クラスターで TLS が有効になっている場合は、クラスターを再アタッチするときに TLS/SSL 証明書と秘密キーを指定する必要があります。

適用対象:Azure Machine Learning SDK v1 for Python

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)

TLS/SSL 証明書と秘密キーがなくなった場合、または Azure Machine Learning によって生成された証明書を使用している場合は、 kubectl を使用してクラスターに接続し、シークレット azuremlfesslを取得することで、クラスターをデタッチする前にファイルを取得できます。

kubectl get secret/azuremlfessl -o yaml

Kubernetes では、Base64 エンコード形式でシークレットが格納されます。 cert.pemに提供する前に、シークレットのkey.pemattach_config.enable_sslコンポーネントを Base64 でデコードする必要があります。

Webservice のエラー

AKS の多くの Webservice エラーは、kubectl を使用してクラスターに接続することでデバッグできます。 以下を実行して、AKS クラスターの kubeconfig.json を取得できます

適用対象:Azure CLI ML 拡張機能 v1

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

クラスターをデタッチした後、クラスターにアクティブなサービスがない場合は、 azureml-fe 関連リソースを削除してから、もう一度アタッチします。

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

ロード バランサーにパブリック IP を含めることはできません

AKS クラスターを作成またはアタッチしようとすると、"Load Balancer はパブリック IP を持つべきではない" という理由で要求が拒否されたことを示すメッセージが表示されることがあります。このメッセージは、管理者がパブリック IP アドレスを持つ AKS クラスターの使用を禁止するポリシーを適用したときに返されます。

この問題を解決するには、load_balancer_typeload_balancer_subnet パラメーターを使って、クラスターを作成またはアタッチします。 詳細については、「内部ロード バランサー (プライベート IP)」を参照してください。

次のステップ