你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Stack Edge Pro GPU 设备的 Kubernetes 群集上启用 Azure Arc

适用于:对于 Pro GPU SKU 是必需的Azure Stack Edge Pro - GPU对于 Pro 2 SKU 是必需的Azure Stack Edge Pro 2对于 Pro R SKU 是必需的Azure Stack Edge Pro R对于 Mini R SKU 是必需的Azure Stack Edge Mini R

本文介绍如何在 Azure Stack Edge Pro 设备的现有 Kubernetes 群集上启用 Azure Arc。

此过程假定你已阅读并理解以下文章:

先决条件

确保已在 Azure Stack Edge Pro 设备和用于访问该设备的客户端上满足了以下先决条件:

对于设备

  1. 你有单节点 Azure Stack Edge Pro 设备的登录凭据。

    1. 设备已激活。 请参阅激活设备
    2. 已通过 Azure 门户配置了设备的计算角色,并且设备具有 Kubernetes 群集。 请参阅配置计算
  2. 你对订阅具有所有者访问权限。 你在服务主体的角色分配步骤中需要此访问权限。

对于访问设备的客户端

  1. 你有一个用于访问 Azure Stack Edge Pro 设备的 Windows 客户端系统。

    • 客户端运行 Windows PowerShell 5.0 或更高版本。 若要下载最新版 Windows PowerShell,请转到安装 Windows PowerShell

    • 也可使用任何其他客户端,只要安装了受支持的操作系统即可。 本文介绍使用 Windows 客户端时的过程。

  2. 你已完成在 Azure Stack Edge Pro 设备上访问 Kubernetes 群集中所述的过程。 你已:

    • 在客户端上安装 kubectl
    • 确保 kubectl 客户端版本与 Azure Stack Edge Pro 设备上运行的 Kubernetes 主版本相差不超过一个版本。
      • 使用 kubectl version 检查在客户端上运行的 kubectl 的版本。 记下完整版本。

      • 在 Azure Stack Edge Pro 设备的本地 UI 中,转到“软件更新”,并记下 Kubernetes 服务器版本号。

        验证 Kubernetes 服务器版本号

      • 验证这两个版本是否兼容。

注册 Kubernetes 资源提供程序

在 Kubernetes 群集上启用 Azure Arc 之前,需要针对你的订阅启用并注册 Microsoft.KubernetesMicrosoft.KubernetesConfiguration

  1. 若要启用资源提供程序,请在 Azure 门户中转到计划用于部署的订阅。 转到“资源提供程序”

  2. 在右窗格中,搜索要添加的提供程序, 在此示例中为 Microsoft.KubernetesMicrosoft.KubernetesConfiguration

    注册 Kubernetes 资源提供程序

  3. 选择资源提供程序,然后在命令栏顶部选择“注册”。 注册需要几分钟。

    注册 Kubernetes 资源提供程序 2

  4. 刷新 UI,直到看到资源提供程序已注册。 对两个资源提供程序重复此过程。

    注册 Kubernetes 资源提供程序 3

还可以通过 az cli 注册资源提供程序。 有关详细信息,请参阅为已启用 Azure Arc 的 Kubernetes 注册两个提供程序

创建服务主体并分配角色

  1. 确保你有 Subscription ID 和用于 Azure Stack Edge 服务资源部署的资源组的名称。 若要获取订阅 ID,请转到 Azure 门户中的 Azure Stack Edge 资源。 导航到“概述”>“基本信息”。

    获取订阅 ID

    若要获取资源组名称,请转到“属性”

    获取资源组名称

  2. 若要创建服务主体,请通过 az cli 使用以下命令。

    az ad sp create-for-rbac --name "<Informative name for service principal>"

    若要了解如何登录到 az cli,请在 Azure 门户中启动 Cloud Shell。 如果在本地客户端上使用 az cli 来创建服务主体,请确保运行 2.25 或更高版本。

    下面是一个示例。

    PS /home/user> az ad sp create-for-rbac --name "https://azure-arc-for-ase-k8s"
    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "azure-arc-for-ase-k8s",
      "name": "https://azure-arc-for-ase-k8s",
      "password": "<password>",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    PS /home/user>
    
  3. 记下 appIDnamepasswordtenantID,因为你要将这些值用作下一命令的输入。

  4. 创建新服务主体后,将“Kubernetes Cluster - Azure Arc Onboarding”角色分配给新创建的主体。 这是权限有限的内置 Azure 角色(在命令中使用角色 ID)。 使用以下命令:

    az role assignment create --role 34e09817-6cbe-4d01-b1a2-e0eac5743d41 --assignee <appId-from-service-principal> --scope /subscriptions/<SubscriptionID>/resourceGroups/<Resource-group-name>

    下面是一个示例。

    PS /home/user> az role assignment create --role 34e09817-6cbe-4d01-b1a2-e0eac5743d41 --assignee xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx --scope /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myaserg1
    {
      "canDelegate": null,
      "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myaserg1/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000",
      "name": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "principalType": "ServicePrincipal",
      "resourceGroup": "myaserg1",
      "roleDefinitionId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/providers/Microsoft.Authorization/roleDefinitions/34e09817-6cbe-4d01-b1a2-e0eac5743d41",
      "scope": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myaserg1",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    PS /home/user>
    

在 Kubernetes 群集上启用 Arc

按照以下步骤配置用于 Azure Arc 管理的 Kubernetes 群集:

  1. 连接到设备的 PowerShell 界面

  2. 类型:

    Set-HcsKubernetesAzureArcAgent -SubscriptionId "<Your Azure Subscription Id>" -ResourceGroupName "<Resource Group Name>" -ResourceName "<Azure Arc resource name (shouldn't exist already)>" -Location "<Region associated with resource group>" -TenantId "<Tenant Id of service principal>" -ClientId "<App id of service principal>"

    运行此命令时,会有一个后续提示,要求你输入 ClientSecret。 提供服务主体密码。

    如果使用的云不是 Azure 公有云,请添加 CloudEnvironment 参数。 可以将此参数设置为 AZUREPUBLICCLOUDAZURECHINACLOUDAZUREGERMANCLOUDAZUREUSGOVERNMENTCLOUD

    注意

    • 若要在设备上部署 Azure Arc,请确保使用受支持的 Azure Arc 区域
    • 使用 az account list-locations 命令找出要传入到 Set-HcsKubernetesAzureArcAgent cmdlet 的确切位置名称。 位置名称的格式通常不含任何空格。
    • ClientIdClientSecret 是必需的。

    下面是一个示例:

    [10.100.10.10]: PS>Set-HcsKubernetesAzureArcAgent -SubscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -ResourceGroupName "myaserg1" -ResourceName "myasetestresarc" -Location "westeurope" -TenantId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -ClientId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    
    WARNING: A script or application on the remote computer 10.126.76.0 is sending a prompt request. When you are prompted,
    enter sensitive information, such as credentials or passwords, only if you trust the remote computer and the
    application or script that is requesting the data.
    
    cmdlet Set-HcsKubernetesAzureArcAgent at command pipeline position 1
    
    Supply values for the following parameters:
    ClientSecret: **********************************
    [10.100.10.10]: PS>
    

    在 Azure 门户中,带有在前一个命令中提供的名称的资源应已创建。

    转到 Azure Arc 资源

  3. 若要验证 Azure Arc 是否已成功启用,请从 PowerShell 界面运行以下命令:

    kubectl get deployments,pods -n azure-arc

    下面是一个示例输出,显示了已在 Kubernetes 群集上的 azure-arc 命名空间中部署的 Azure Arc 代理。

    [10.128.44.240]: PS>kubectl get deployments,pods -n azure-arc
    NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/cluster-metadata-operator   1/1     1            1           13d
    deployment.apps/clusterconnect-agent        1/1     1            1           13d
    deployment.apps/clusteridentityoperator     1/1     1            1           13d
    deployment.apps/config-agent                1/1     1            1           13d
    deployment.apps/controller-manager          1/1     1            1           13d
    deployment.apps/extension-manager           1/1     1            1           13d
    deployment.apps/flux-logs-agent             1/1     1            1           13d
    deployment.apps/kube-aad-proxy              1/1     1            1           13d
    deployment.apps/metrics-agent               1/1     1            1           13d
    deployment.apps/resource-sync-agent         1/1     1            1           13d
    
    NAME                                            READY   STATUS    RESTARTS   AGE
    pod/cluster-metadata-operator-9568b899c-2stjn   2/2     Running   0          13d
    pod/clusterconnect-agent-576758886d-vggmv       3/3     Running   0          13d
    pod/clusteridentityoperator-6f59466c87-mm96j    2/2     Running   0          13d
    pod/config-agent-7cbd6cb89f-9fdnt               2/2     Running   0          13d
    pod/controller-manager-df6d56db5-kxmfj          2/2     Running   0          13d
    pod/extension-manager-58c94c5b89-c6q72          2/2     Running   0          13d
    pod/flux-logs-agent-6db9687fcb-rmxww            1/1     Running   0          13d
    pod/kube-aad-proxy-67b87b9f55-bthqv             2/2     Running   0          13d
    pod/metrics-agent-575c565fd9-k5j2t              2/2     Running   0          13d
    pod/resource-sync-agent-6bbd8bcd86-x5bk5        2/2     Running   0          13d
    [10.128.44.240]: PS>
    

此处提供了这些代理的概念性概述。

从 Kubernetes 群集中删除 Arc

若要删除 Azure Arc 管理,请执行以下步骤:

    1. 连接到设备的 PowerShell 界面
  1. 类型:

    Remove-HcsKubernetesAzureArcAgent

注意

默认情况下,从 Git 存储库中删除资源 yamls 时,不会从 Kubernetes 群集中删除相应的资源。 需要在 Arc OperatorParams 中设置 --sync-garbage-collection,这样,当你从 git 存储库中删除资源时,就能够删除资源。 有关详细信息,请参阅删除配置

后续步骤

若要了解如何运行 Azure Arc 部署,请参阅在 Azure Stack Edge Pro 设备上通过 GitOps 使用 Redis 部署无状态 PHP Guestbook 应用程序