You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure ML v2 SDK部署K8s在线端点遇RefreshExtensionIdentityNotSet错误

解决Azure ML v2 SDK部署到AKS时的RefreshExtensionIdentityNotSet错误

问题背景

使用Azure Machine Learning v2 SDK将模型部署到附加至AML工作区的Kubernetes计算资源时,本地测试部署正常,但执行KubernetesOnlineDeployment在线部署时触发以下错误:

DeploymentIdentityError: Failed to create Kubernetes deployment identity, Reason:RefreshExtensionIdentityNotSet Details:Managed identity of AzureML extension is not assigned to the node pool of 'aks-default-XXXXXXXX-vmss000000'. The identity is used to give access for user container, such as pull image from ACR.

用户通过Terraform创建AKS集群,参考官方教程附加集群时添加了identity配置(类型为SystemAssigned),已尝试重新安装AzureML扩展但问题未解决。

相关代码

附加集群的代码:

compute = "testfooamlXXXX-c"

from azure.ai.ml import load_compute

compute_params = [
    {"name": compute},
    {"type": "kubernetes"},
    {
        "resource_id": "/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/test-foo-aml/providers/Microsoft.ContainerService/managedClusters/testfooamlXXXX",
    },
    {"identity": {"type":"SystemAssigned"}},
]
k8s_compute = load_compute(source=None, params_override=compute_params)

创建端点与部署的代码:

# 创建端点
endpoint = KubernetesOnlineEndpoint(
    name=endpoint_name,
    compute=compute,
    description="this is a sample online endpoint",
    auth_mode="key",
    tags={"foo": "bar"},
)
ml_client.begin_create_or_update(endpoint).result()

# 创建部署对象
blue_deployment = KubernetesOnlineDeployment(
    name="blue",
    endpoint_name=endpoint_name,
    model=Model(path=str(model_path)),
    environment=Environment(name=env_name, version=env_version),
    code_configuration=CodeConfiguration(
        code=str(model_script_path.parent), scoring_script=model_script_path.name
    ),
    instance_count=1,
)

# 触发错误的执行代码
ml_client.begin_create_or_update(blue_deployment).result()

排查方向

  • 确认AKS节点池的托管标识是否已正确配置,且拥有访问镜像仓库(如ACR)的权限
  • 检查AzureML扩展的托管标识是否与AKS节点池的VMSS关联
  • 验证附加集群时的identity配置是否生效,对应的标识是否具备AML工作区相关操作权限

解决方案

1. 配置AKS节点池的托管标识权限

  • 如果节点池使用系统分配托管标识:为该标识分配ACR的ACR Pull角色,确保其能够拉取部署所需的镜像
  • 如果使用用户分配托管标识:确认创建AKS集群时已指定该标识,且该标识同样拥有ACR访问权限

2. 重新安装AzureML扩展并指定正确标识

先卸载现有扩展:

az k8s-extension delete --name azureml-fe --cluster-type managedClusters --cluster-name <你的AKS集群名> --resource-group <资源组名>

重新安装扩展,根据标识类型选择对应命令:

  • 系统分配标识:
az k8s-extension create --name azureml-fe --cluster-type managedClusters --cluster-name <你的AKS集群名> --resource-group <资源组名> --extension-type Microsoft.AzureML.Kubernetes --scope cluster --configuration-settings enableInference=true --identity-type SystemAssigned
  • 用户分配标识:
az k8s-extension create --name azureml-fe --cluster-type managedClusters --cluster-name <你的AKS集群名> --resource-group <资源组名> --extension-type Microsoft.AzureML.Kubernetes --scope cluster --configuration-settings enableInference=true --identity-type UserAssigned --identity-resource-id <用户分配标识的资源ID>

3. 重新附加AKS集群到AML工作区

  • 删除已附加的Kubernetes计算资源:
ml_client.compute.begin_delete(compute).result()
  • 等待扩展安装完成后,重新执行附加集群的代码,确保identity配置正确

4. 验证部署资源的访问权限

  • 确认部署使用的环境镜像所在ACR允许AKS节点池的标识访问
  • 如果模型存储在Blob存储等位置,确保该标识拥有读取模型文件的权限

内容的提问来源于stack exchange,提问作者Rishabh Prajapati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:53:10