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

使用邻近放置组来降低 Azure Kubernetes 服务 (AKS) 群集的延迟

注意

在 AKS 上使用邻近放置组时,归置仅适用于代理节点。 节点到节点延迟以及相应的托管 Pod 到 Pod 延迟得到改善。 归置不会影响群集的控制平面的放置。

在 Azure 中部署应用程序时,可通过跨区域或可用性区域分布虚拟机 (VM) 实例来创建网络延迟,这可能会影响应用程序的总体性能。 邻近放置组是一种逻辑分组,用于确保 Azure 计算资源的物理位置彼此接近。 一些应用程序(例如游戏、工程模拟和高频交易 [HFT])需要低延迟和可快速完成的任务。 对于类似的高性能计算 (HPC) 场景,请考虑为群集的节点池使用邻近放置组 (PPG)。

开始之前

本文需要 Azure CLI 2.14 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

限制

  • 邻近放置组只能映射到一个可用性区域。
  • 节点池必须使用虚拟机规模集来关联邻近放置组。
  • 节点池只能在节点池创建时关联邻近放置组。

节点池和邻近放置组

使用邻近放置组部署的第一个资源会附加到特定的数据中心。 使用同一邻近放置组部署的任何额外资源都归置在同一数据中心。 停止(解除分配)或删除使用邻近放置组的所有资源后,将不再附加该邻近放置组。

  • 可以将多个节点池与单个邻近放置组相关联。
  • 只能将一个节点池与单个邻近放置组相关联。

通过可用性区域配置邻近放置组

注意

尽管邻近放置组要求一个节点池只能使用一个可用性区域,但是对于单个区域中的 VM,99.9% 的基线 Azure VM SLA 仍然有效。

邻近放置组是一个节点池概念,与每个单独的节点池相关联。 使用 PPG 资源不会影响 AKS 控制平面的可用性,而该可用性可能会影响使用区域设计群集的方式。 为了确保群集跨多个区域分布,建议采用以下设计:

  • 使用三个区域预配具有第一个系统池的群集,并且不关联任何邻近放置组,以确保系统 Pod 位于跨多个区域分布的专用节点池中。
  • 添加额外的具有唯一区域的用户节点池,每个池都关联有邻近放置组。 例如区域 1 中的 nodepool1 和 PPG1、区域 2 中的 nodepool2 和 PPG2、区域 3 中的 nodepool3 和 PPG3。 这种配置可确保节点在群集级别跨多个区域分布,而每个单独的节点池归置于指定的区域中,具有专用的 PPG 资源。

使用邻近放置组创建新的 AKS 群集

加速网络可极大地提高虚拟机的网络性能。 理想情况是将邻近放置组与加速网络一起使用。 默认情况下,AKS 在支持的虚拟机实例上使用加速网络,其中包括具有两个或多个 vCPU 的大多数 Azure 虚拟机。

  1. 使用 az group create 命令创建 Azure 资源组。

    az group create --name myResourceGroup --location centralus
    
  2. 使用 az ppg create 命令创建邻近放置组。 请确保记下输出中的 ID 值。

    az ppg create --name myPPG --resource-group myResourceGroup --location centralus --type standard
    

    该命令会生成类似于以下示例输出的输出,其中包括后续 CLI 命令所需的 ID 值。

    {
      "availabilitySets": null,
      "colocationStatus": null,
      "id": "/subscriptions/yourSubscriptionID/resourceGroups/myResourceGroup/providers/Microsoft.Compute/proximityPlacementGroups/myPPG",
      "location": "centralus",
      "name": "myPPG",
      "proximityPlacementGroupType": "Standard",
      "resourceGroup": "myResourceGroup",
      "tags": {},
      "type": "Microsoft.Compute/proximityPlacementGroups",
      "virtualMachineScaleSets": null,
      "virtualMachines": null
    }
    
  3. 使用 az aks create 命令创建 AKS 群集,并将 myPPGResourceID 值替换为上一步中的邻近放置组资源 ID。

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --ppg myPPGResourceID
        --generate-ssh-keys
    

向现有群集添加邻近放置组

可通过创建一个新节点池来向现有群集添加邻近放置组。 然后,可选择将现有工作负载迁移到新的节点池,并删除原始节点池。

使用之前创建的同一邻近放置组来确保 AKS 群集的两个节点池中的代理节点在物理上位于同一数据中心。

  • 使用 az aks nodepool add 命令创建新的节点池,并将 myPPGResourceID 值替换为邻近放置组资源 ID。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name mynodepool \
        --node-count 1 \
        --ppg myPPGResourceID
    

清理

  • 使用 az group delete 命令删除 Azure 资源组及其所有资源。

    az group delete --name myResourceGroup --yes --no-wait
    

后续步骤

详细了解邻近放置组