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

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

在 Azure Kubernetes 服务 (AKS) 或 Arc Kubernetes 群集上部署Azure 机器学习扩展后,可以将 Kubernetes 群集附加到Azure 机器学习工作区。 还可以创建数据科学家要使用的计算目标。

先决条件

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

多重连接和工作负荷隔离

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

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

一个集群扩展到多个工作区

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

如果计划为不同的项目或团队使用不同的计算目标,可以在群集中为计算目标指定现有的 Kubernetes 命名空间 ,以隔离不同团队或项目之间的 工作负荷

重要

必须先在群集中创建命名空间,然后才能将群集附加到Azure 机器学习工作区。

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

如果您需要从训练脚本中安全地访问 Azure 资源,可以在附加操作期间为 Kubernetes 计算目标指定一个托管身份。

连接到分配用户托管标识的工作区

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

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

Azure资源名称 要分配的角色 说明
Azure 中继 Azure 中继所有者 仅适用于启用了 Arc 的 Kubernetes 群集。 未连接 Arc 的 AKS 群集无法创建 Azure 中继。
Kubernetes - Azure Arc或Azure Kubernetes 服务 读者
Kubernetes 扩展参与者
Azure Kubernetes 服务群集管理员
适用于已启用 Arc 的 Kubernetes 群集和 AKS 群集。
Azure Kubernetes 服务 贡献者 仅对于使用受信任访问功能的 AKS 群集是必需的。 该工作区使用用户分配的托管标识。 有关详细信息,请参阅Azure 机器学习对具有特殊配置的 AKS 群集的访问权限
Azure Kubernetes 服务 参与者 仅对于使用受信任访问功能的 AKS 群集是必需的。 该工作区使用用户分配的托管标识。 有关详细信息,请参阅 使用受信任的访问获取 AKS 中Azure资源的安全访问

小窍门

可以在扩展部署期间创建Azure 中继资源,该资源组与已启用 Arc 的 Kubernetes 群集相同。

注释

  • 如果“Kubernetes 扩展参与者”角色权限不可用,群集附件将失败,并显示“未安装扩展”错误。
  • 如果“Azure Kubernetes 服务群集管理员”角色权限不可用,群集附件将失败,并出现“内部服务器”错误。

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

可以使用 Azure CLI、工作室 UI 或 Python SDK 将 Kubernetes 群集附加到Azure 机器学习工作区。

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

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 托管标识。

重要

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

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

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

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

若要访问 Docker 映像的Azure 容器注册表(ACR)和用于训练数据的存储帐户,请将 Kubernetes 计算与已启用系统分配的或用户分配的托管标识一起附加。

分配托管标识

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

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

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

    Azure 门户中更新 Kubernetes 计算标识的截图。

    从 Azure portal 选择 Kubernetes 计算的标识截图。

将 Azure 角色 分配给托管标识

Azure提供了几种将角色分配给托管标识的方法:

如果使用Azure门户分配角色并具有系统分配的托管标识Select UserGroup PrincipalService Principal,选择Select 成员以搜索标识名称。 将标识名称的格式设置为:<workspace name>/computes/<compute target name>

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

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

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

  • 若要获得只读访问权限,请向计算托管标识授予 存储 Blob 数据读取者 角色。
  • 若要进行读写访问,请向计算托管标识授予 存储 Blob 数据参与者 角色。

后续步骤