使用 Azure CLI 创建具有加速网络的 Windows 或 Linux VM

注意

本文引用了 CentOS,这是一个处于生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。

本文介绍如何使用 Azure CLI 命令行接口创建启用了加速网络 (AccelNet) 的 Linux 或 Windows 虚拟机 (VM)。 本文还讨论了如何在现有 VM 上启用和管理加速网络。

也可以使用 Azure 门户创建启用了加速网络的 VM。 有关使用 Azure 门户在 VM 上管理加速网络的详细信息,请参阅通过门户管理加速网络

要使用 Azure PowerShell 创建启用了加速网络的 Windows VM,请参阅使用 Azure PowerShell 创建具有加速网络的 Linux VM

先决条件

创建具有加速网络的 VM

在以下示例中,可以将示例参数(如 <myResourceGroup><myNic><myVm>)替换为自己的值。

创建虚拟网络

  1. 使用 az group create 创建要包含该资源的资源组。 请务必选择 Windows 和 Linux 加速网络中列出的受支持的 Windows 或 Linux 区域。

    az group create --name <myResourceGroup> --location <myAzureRegion>
    
  2. 使用 az network vnet create 在资源组中创建带有一个子网的虚拟网络:

    az network vnet create \
      --resource-group <myResourceGroup> \
      --name <myVnet> \
      --address-prefix 192.168.0.0/16 \
      --subnet-name <mySubnet> \
      --subnet-prefix 192.168.1.0/24
    

创建网络安全组

  1. 使用 az network nsg create 创建网络安全组 (NSG)。

    az network nsg create \
      --resource-group <myResourceGroup> \
      --name <myNsg>
    
  2. NSG 包含多个默认规则,其中一个规则禁用了来自 Internet 的所有入站访问。 使用 az network nsg rule create 打开一个端口,以允许远程桌面协议 (RDP) 或安全 shell (SSH) 访问 VM。

    az network nsg rule create \
      --resource-group <myResourceGroup> \
      --nsg-name <myNsg> \
      --name Allow-SSH-Internet \
      --access Allow \
      --protocol Tcp \
      --direction Inbound \
      --priority 100 \
      --source-address-prefix Internet \
      --source-port-range "*" \
      --destination-address-prefix "*" \
      --destination-port-range 22
    

创建启用加速网络的网络接口

  1. 使用 az network public-ip create 创建公共 IP 地址。 如果不从 Internet 访问 VM,则 VM 不需要公共 IP 地址,但你需要公共 IP 才能完成本文的步骤。

    az network public-ip create \
      --name <myPublicIp> \
      --resource-group <myResourceGroup>
    
  2. 使用 az network nic create 创建启用了加速网络的网络接口 (NIC)。 以下示例将在虚拟网络的子网中创建一个 NIC,并将 NSG 关联到 NIC。

    az network nic create \
     --resource-group <myResourceGroup> \
      --name <myNic> \
      --vnet-name <myVnet> \
      --subnet <mySubnet> \
      --accelerated-networking true \
      --public-ip-address <myPublicIp> \
      --network-security-group <myNsg>
    

创建 VM 并附加 NIC

使用 az vm create 创建 VM,并使用 --nics 选项附加创建的 NIC。 确保选择 Windows 和 Linux 加速网络中列出的 VM 大小和分发。 有关所有 VM 大小和特征的列表,请参阅 Azure 中虚拟机的大小

以下示例将创建大小支持加速网络的 VM Standard_DS4_v2。

az vm create \
  --resource-group <myResourceGroup> \
  --name <myVm> \
  --image Ubuntu2204 \
  --size Standard_DS4_v2 \
  --admin-username <myAdminUser> \
  --generate-ssh-keys \
  --nics <myNic>

创建 VM 后,将获取与以下示例类似的输出。 对于 Linux 计算机,请记下 publicIpAddress,你将在下一步中输入它来访问 VM。

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVm",
  "location": "chinaeast",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "192.168.0.4",
  "publicIpAddress": "40.68.254.142",
  "resourceGroup": "myResourceGroup"
}

确认已启用加速网络

  1. 使用以下命令来与 VM 建立 SSH 会话。 将 <myPublicIp> 替换为分配给所创建虚拟机的公共 IP 地址,并将 <myAdminUser> 替换为创建 VM 时指定的 --admin-username

    ssh <myAdminUser>@<myPublicIp>
    
  2. 从远程 VM 的 shell 输入 uname -r,并确认内核版本为以下版本之一或更高版本:

    • Ubuntu 16.04:4.11.0-1013。
    • SLES SP3:4.4.92-6.18。
    • RHEL:3.10.0-693、2.6.32-573。 如果在 Linux Integration Services 4.3+ 之前安装了 Mellanox VF 版本 4.5+,则支持 RHEL 6.7-6.10。
    • CentOS:3.10.0-693。

    备注

    可能支持其他内核版本。 有关更新后的列表,请参阅 Hyper-V 支持的 Linux 和 FreeBSD 虚拟机中每个分发版的兼容性表,并确认支持 SR-IOV。 可以在适用于 Hyper-V 和 Azure 的 Linux Integration Services 的发行说明中查找更多详细信息。 *

  3. 使用 lspci 命令确认已向 VM 公开 Mellanox VF 设备。 返回的输出应类似于以下示例:

    0000:00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled) (rev 03)
    0000:00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 01)
    0000:00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
    0000:00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 02)
    0000:00:08.0 VGA compatible controller: Microsoft Corporation Hyper-V virtual VGA
    0001:00:02.0 Ethernet controller: Mellanox Technologies MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]
    
  4. 使用 ethtool -S eth0 | grep vf_ 命令检查虚拟函数 (VF) 的活动。 如果加速网络已启用并处于活动状态,则会收到与以下示例类似的输出:

    vf_rx_packets: 992956
    vf_rx_bytes: 2749784180
    vf_tx_packets: 2656684
    vf_tx_bytes: 1099443970
    vf_tx_dropped: 0
    

处理虚拟函数的动态绑定和吊销

对于利用加速网络的所有应用程序,绑定到在 VM 中公开的合成 NIC 是一项强制性要求。 如果应用程序直接通过 VF NIC 运行,它不会收到发往 VM 的所有包,因为一些包会通过合成接口显示。

必须通过合成 NIC 运行应用程序,以保证应用程序收到发往它的所有数据包。 绑定到合成 NIC 还可以确保应用程序持续运行,即使在主机提供服务时撤销了 VF 也是如此。

有关应用程序绑定要求的详细信息,请参阅加速网络在 Linux 和 FreeBSD VM 中的工作方式

为了确保自定义映像或应用程序正确支持动态绑定和吊销虚拟函数,可以在任何 Windows Hyper-V 服务器上测试该功能。 在以下配置中使用运行 Hyper-V 的本地 Windows Server:

  • 确保有支持 SR-IOV 的物理网络适配器。
  • 在选中“启用单根 I/O 虚拟化 (SR-IOV)”的 SR-IOV 适配器的基础上创建外部虚拟交换机。
  • 创建/部署运行操作系统映像或应用程序的虚拟机。
  • 此虚拟机的网络适配器在“硬件加速”下选择了“启用 SR-IOV”。

验证虚拟机和应用程序正在通过 SR-IOV 使用网络适配器后,可以修改以下示例命令以切换 SR-IOV 开/关,从而撤销和添加虚拟函数以模拟 Azure 主机服务期间发生的情况:

# Get the virtual network adapter to test
$vmNic = Get-VMNetworkAdapter -VMName "myvm" | where {$_.MacAddress -eq "001122334455"}

# Enable SR-IOV on a virtual network adapter
Set-VMNetworkAdapter $vmNic -IovWeight 100 -IovQueuePairsRequested 1

# Disable SR-IOV on a virtual network adapter
Set-VMNetworkAdapter $vmNic -IovWeight 0

在现有 VM 上管理加速网络

可以在现有虚拟机上启用加速网络。 VM 必须满足以下要求才能支持加速网络:

  • 加速网络支持的大小。

  • Linux 支持的 Azure 市场映像和内核版本。

  • 在任何 NIC 上可以启用加速网络之前,已停止或已解除分配。 此要求适用于所有单个 VM 或可用性集或 Azure 虚拟机规模集中的 VM。

在单个 VM 或可用性集中的 VM 上启用加速网络

  1. 首先,停止/解除分配 VM 或可用性集中的所有 VM。

    az vm deallocate \
      --resource-group <myResourceGroup> \
      --name <myVm>
    

    如果 VM 是单独创建的并且没有可用性集,则只需停止/解除分配单个 VM 即可启用加速网络。 如果使用可用性集创建了 VM,则必须停止或解除分配该集中的所有 VM,然后才能在任何 NIC 上启用加速网络。

  2. 停止 VM 后,即可在 VM 的 NIC 上启用加速网络。

    az network nic update \
      --name <myNic> \
      --resource-group <myResourceGroup> \
      --accelerated-networking true
    
  3. 重启 VM 或可用性集中的所有 VM,并确认已启用加速网络

    az vm start --resource-group <myResourceGroup> \
      --name <myVm>
    

在虚拟机规模集上启用加速网络

Azure 虚拟机规模集略有不同,但遵循相同的工作流。

  1. 首先,停止 VM:

    az vmss deallocate \
      --name <myVmss> \
      --resource-group <myResourceGroup>
    
  2. VM 停止后,请更新网络接口下的加速网络属性。

    az vmss update --name <myVmss> \
      --resource-group <myResourceGroup> \
      --set virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].enableAcceleratedNetworking=true
    
  3. 虚拟机规模集具有升级策略,可通过使用自动、滚动或手动设置应用更新。 以下说明将策略设置为自动,以便虚拟机规模集可在重启后立即获取更改。

    az vmss update \
      --name <myVmss> \
      --resource-group <myResourceGroup> \
      --set upgradePolicy.mode="automatic"
    
  4. 最后,重启虚拟机规模集。

    az vmss start \
      --name <myVmss> \
      --resource-group <myResourceGroup>
    

重启并完成升级后,VF 将显示在使用支持的 OS 和 VM 大小的 VM 中。

重设具有加速网络的现有 VM 的大小

可以只将已启用加速网络的 VM 的大小重设为同时支持加速网络的大小。 通过使用重设大小操作,无法将具有加速网络的 VM 的大小重设为不支持加速网络的 VM 实例。 请改用以下过程调整这些 VM 的大小:

  1. 停止并解除分配 VM,或可用性集或虚拟机规模集中的所有 VM。

  2. 在 VM 或可用性集或虚拟机规模集中的所有 VM 的 NIC 上禁用加速网络。

  3. 将 VM 移动到不支持加速网络的新大小,然后重启它们。

通过门户管理加速网络

Azure 门户中创建 VM 时,可以在“创建虚拟机”屏幕的“网络”选项卡上选中“启用加速网络”复选框。

如果 VM 使用适用于加速网络的受支持的操作系统VM 大小,则会自动选中“创建虚拟机”屏幕的“网络”选项卡上的“启用加速网络”复选框。 如果不支持加速网络,则不会选中该复选框,并显示一条消息解释原因。

备注

  • 对于 Azure 市场支持的操作系统,只能在门户 VM 创建期间启用加速网络。 要为具有自定义 OS 映像的 VM 创建和启用加速网络,必须使用 Azure CLI 或 PowerShell。

  • 门户中的“加速网络”设置显示了用户选择的状态。 使用加速网络,可以在门户中选择“已禁用”,即使 VM 大小需要加速网络也是如此。 无论门户中的用户设置如何,需要加速网络的 VM 大小都会在运行时启用加速网络。

要通过Azure 门户为现有 VM 启用或禁用加速网络,请执行以下操作:

  1. 在 VM 的“Azure 门户”页中,选择左侧菜单中的“网络”。

  2. 在“网络”页中,选择“网络接口”。

  3. 在 NIC“概述”页顶部,选择“编辑加速网络”。

  4. 选择“自动”、“已启用”或“已禁用”,然后选择“保存”。

要确认是否已为现有 VM 启用加速网络,请执行以下操作:

  1. 在 VM 的门户页中,选择左侧菜单中的“网络”。

  2. 在“网络”页中,选择“网络接口”。

  3. 在网络接口“概述”页的“概要”下,注意已将“加速网络”设置为“已启用”还是“已禁用”。

后续步骤