将 Kubernetes 群集附加到 Azure 机器学习工作区

适用于:Azure CLI ml 扩展 v2(当前版本)Python SDK azure-ai-ml v2(当前版本)

在 AKS 群集上部署 Azure 机器学习扩展后,可以将 Kubernetes 群集附加到 Azure 机器学习工作区,并创建要供 ML 专业人员使用的计算目标。

先决条件

将 Kubernetes 群集附加到 Azure 机器学习工作区可以灵活地支持许多不同的方案。 例如,具有多个附件的共享方案、访问 Azure 资源的模型训练脚本以及工作区的身份验证配置。

多次附加和工作负载隔离

一个群集到一个工作区,创建多个计算目标

  • 对于同一 Kubernetes 群集,可以多次将其附加到同一工作区,并为不同项目/团队/工作负载创建多个计算目标。

一个群集到多个工作区

  • 对于同一 Kubernetes 群集,还可以将其附加到多个工作区,并且多个工作区可以共享同一 Kubernetes 群集。

如果计划针对不同的项目/团队设置不同的计算目标,可以在群集中为计算目标指定现有的 Kubernetes 命名空间,以在不同的团队/项目之间隔离工作负载。

重要

应事先在群集中创建计划在将群集附加到 Azure 机器学习工作区时指定的命名空间。

从训练脚本安全访问 Azure 资源

如果需要从训练脚本安全访问 Azure 资源,可以在执行附加操作期间为 Kubernetes 计算目标指定托管标识

附加到具有用户分配的托管标识的工作区

Azure 机器学习工作区默认使用系统分配的托管标识来访问 Azure 机器学习资源。 如果系统分配的默认设置已打开,则这些步骤已完成。

否则,如果在创建 Azure 机器学习工作区时指定了用户分配的托管标识,则需要在附加计算之前手动将以下角色分配授予该托管标识。

Azure 资源名称 要分配的角色 说明
Kubernetes - Azure Kubernetes 服务 读取器 适用于 AKS 群集。

以下命令演示如何附加 AKS 群集,并将其用作启用了托管标识的计算目标。

AKS 群集

az ml compute attach --resource-group <resource-group-name> --workspace-name <workspace-name> --type Kubernetes --name k8s-compute --resource-id "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ContainerService/managedclusters/<cluster-name>" --identity-type SystemAssigned --namespace <Kubernetes namespace to run Azure Machine Learning workloads> --no-wait

Arc Kubernetes 群集

az ml compute attach --resource-group <resource-group-name> --workspace-name <workspace-name> --type Kubernetes --name amlarc-compute --resource-id "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Kubernetes/connectedClusters/<cluster-name>" --user-assigned-identities "subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>" --no-wait

--type 参数设置为 Kubernetes。 使用 identity_type 参数启用 SystemAssignedUserAssigned 托管标识。

重要

UserAssigned 托管标识需要 --user-assigned-identities。 虽然可以提供以逗号分隔的用户托管的标识列表,但在附加群集时仅使用第一个标识。

计算附加不会自动创建 Kubernetes 命名空间,也不会验证 kubernetes 命名空间是否存在。 你需要验证群集中是否存在指定的命名空间,否则提交到此计算的任何 Azure 机器学习工作负载都将失败。

将托管标识分配给计算目标

开发人员面临的一个共同挑战是如何管理密码和凭据,以确保解决方案的不同组件之间的通信安全。 托管标识使开发人员无需管理凭据。

若要访问用于 Docker 映像的 Azure 容器注册表 (ACR),以及用于训练数据的存储帐户,请在启用系统分配或用户分配的托管标识的情况下附加 Kubernetes 计算。

分配托管标识

  • 可以在计算附加步骤中将托管标识分配给计算。

  • 如果已附加计算,则可以更新设置以在 Azure 机器学习工作室中使用托管标识。

    • 转到 Azure 机器学习工作室。 选择“计算”、“附加的计算”,然后选择附加的计算。
    • 选择铅笔图标以编辑托管标识。

    Screenshot of updating identity of the Kubernetes compute from Azure portal.

    Screenshot of selecting identity of the Kubernetes compute from Azure portal.

向托管标识分配 Azure 角色

Azure 提供了几种向托管标识分配角色的方法。

如果使用 Azure 门户分配角色并具有系统分配的托管标识请选择“用户”、“组主体”或“服务主体”,可以通过选择“选择成员”来搜索标识名称。 标识名称的格式需要设置为 <workspace name>/computes/<compute target name>

如果具有用户分配的托管标识,请选择“托管标识”以查找目标标识。

可使用托管标识从 Azure 容器注册表拉取映像。 向计算托管标识授予 AcrPull 角色。 有关详细信息,请参阅 Azure 容器注册表角色和权限

可使用托管标识访问 Azure Blob:

  • 出于只读目的,应向计算托管标识授予“存储 Blob 数据读取者”角色。
  • 出于读写目的,应向计算托管标识授予“存储 Blob 数据参与者”角色。

后续步骤