使用 Azure CLI 创建具有加速网络的 Linux 虚拟机

在门户中创建

尽管本文提供了使用 Azure CLI 创建具有加速网络的虚拟机的步骤,但也可以使用 Azure 门户创建具有加速网络的虚拟机。 在门户中创建虚拟机时,在“创建虚拟机”边栏选项卡中,选择“网络”选项卡。在此选项卡中,有一个用于“加速网络”的选项。 如果已选择支持的操作系统VM 大小,此选项将自动填充为“打开”。如果没有选择,它将填充加速网络的“关闭”选项,并为用户提供未启用它的原因。
你还可以在创建 VM 后通过门户启用或禁用加速网络,方法是:导航到网络接口,然后单击“概述”边栏选项卡顶部的按钮。

注意

只有受支持的操作系统才能通过门户启用。 如果你使用的是自定义映像,并且该映像支持加速网络,请使用 CLI 或 PowerShell 创建 VM。

创建 VM 后,可以按照确认说明确认已启用加速网络。

CLI 创建

创建虚拟网络

安装最新的 Azure CLI 并使用 az login 登录到 Azure 帐户。 在以下示例中,请将示例参数名称替换成自己的值。 参数名称示例包括 myResourceGroup、myNic 和 myVm。

使用 az group create 创建资源组。 以下示例在“chinaeast”位置创建名为“myResourceGroup”的资源组:

az group create --name myResourceGroup --location chinaeast

使用 az network vnet create 创建虚拟网络。 以下示例创建名为 myVnet 且具有一个子网的虚拟网络:

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

创建网络安全组

使用 az network nsg create 创建网络安全组。 以下示例创建名为“myNetworkSecurityGroup”的网络安全组:

az network nsg create \
    --resource-group myResourceGroup \
    --name myNetworkSecurityGroup

网络安全组包含多个默认规则,其中一个规则禁用了来自 Internet 的所有入站访问。 打开端口,以允许使用 az network nsg rule create 对虚拟机进行 SSH 访问:

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNetworkSecurityGroup \
  --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

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

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

az network public-ip create \
    --name myPublicIp \
    --resource-group myResourceGroup

使用 az network nic create 创建启用加速网络的网络接口。 以下示例在 myVnet 虚拟网络的 mySubnet 子网中创建名为 myNic 的网络接口,并将 myNetworkSecurityGroup 网络安全组关联到该网络接口:

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

创建 VM 并附加 NIC

创建 VM 时,指定使用 --nics 创建的 NIC。 选择 Linux 加速网络中列出的大小和分发版本。

使用 az vm create 创建 VM。 以下示例创建名为 myVM 的 VM,其具有 UbuntuLTS 映像,并且大小支持加速网络 (Standard_DS4_v2) :

az vm create \
    --resource-group myResourceGroup \
    --name myVM \
    --image UbuntuLTS \
    --size Standard_DS4_v2 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --nics myNic

若要获取所有 VM 大小和特性列表,请参阅 Linux VM 大小

创建 VM 后,将返回以下类似输出。 记下 publicIpAddress。 在后续步骤中,将使用此地址访问 VM。

{
  "fqdns": "",
  "id": "/subscriptions/<ID>/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"
}

确认已启用加速网络

使用以下命令来与 VM 建立 SSH 会话。 将 <your-public-ip-address> 替换为分配给所创建虚拟机的公共 IP 地址,并替换 azureuser(如果在创建 VM 时对 --admin-username 使用了不同的值)。

ssh azureuser@<your-public-ip-address>

从 Bash shell 中,输入 uname -r 并确认内核版本为以下版本之一或更高版本:

  • Ubuntu 16.04:4.11.0-1013

  • SLES SP3:4.4.92-6.18

  • CentOS:3.10.0-693

使用 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]

使用 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 启用加速网络。

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

应用程序必须通过 VM 中公开的合成 NIC 运行。 如果应用程序直接通过 VF NIC 运行,它不会收到发往 VM 的所有包,因为一些包通过合成接口显示。 如果通过合成 NIC 运行应用程序,它保证应用程序收到发往它的所有数据包。 它还可以确保应用程序持续运行,即使在主机提供服务时撤销了 VF,也不例外。 对于利用加速网络的所有应用程序,绑定到合成 NIC 的应用程序是强制性要求。

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

在现有 VM 上启用加速网络

如果创建的 VM 没有加速网络,可以在现有 VM 上启用此功能。 VM 必须支持加速网络,前提是满足以下先决条件(上文亦有列出):

  • VM 必须是加速网络支持的大小
  • VM 必须是受支持的 Azure 库映像(以及适用于 Linux 的内核版本)
  • 在任何 NIC 上启用加速网络前,必须停止/解除分配可用性集或 VMSS 中的所有 VM

单个 VM 与可用性集中的 VM

首先停止/解除分配 VM,或集合中的所有 VM(如果是可用性集):

az vm deallocate \
    --resource-group myResourceGroup \
    --name myVM

如果 VM 是单独创建的并且没有可用性集,则只需停止/解除分配单个 VM 即可启用加速网络。 如果 VM 是随可用性集创建的,则在任何 NIC 上启用加速网络前,必须停止/解除分配可用性集中包含的所有 VM。

一旦停止,即可在 VM 的 NIC 上启用加速网络:

az network nic update \
    --name myNic \
    --resource-group myResourceGroup \
    --accelerated-networking true

重启 VM,或集合中的所有 VM(如果在可用性集中),并确认已启用加速网络:

az vm start --resource-group myResourceGroup \
    --name myVM

VMSS

VMSS 略有不同,但遵循相同的工作流。 首先,停止 VM:

az vmss deallocate \
    --name myvmss \
    --resource-group myrg

VM 停止后,更新网络接口下的加速网络属性:

az vmss update --name myvmss \
    --resource-group myrg \
    --set virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].enableAcceleratedNetworking=true

注意

VMSS 具有 VM 升级功能,可使用三种不同的设置(自动、滚动和手动)应用更新。 在这些说明中,策略设置为自动,因此 VMSS 会在重启后立即应用更改。 若要将其设置为自动以便立即收到更改,请执行以下操作:

az vmss update \
    --name myvmss \
    --resource-group myrg \
    --set upgradePolicy.mode="automatic"

最后,重启 VMSS:

az vmss start \
    --name myvmss \
    --resource-group myrg

请在重启后等待升级完成,但一旦完成,VF 将在 VM 内部出现。 (确保使用的是支持的 OS 和 VM 大小。)

调整具有加速网络的现有 VM 的大小

启用加速网络的 VM 只能调整为支持加速网络的 VM 的大小。

启用加速网络的 VM 不能使用调整大小操作调整为不支持加速网络的 VM 实例的大小。 相反,若要调整其中一个 VM 的大小,请执行以下操作:

  • 停止/解除分配 VM,或如果在可用性集/VMSS 中,则停止/解除分配集合/VMSS 中的所有 VM。
  • 必须在 VM 的 NIC 上禁用加速网络,或者如果在可用性集/VMSS 中,则必须在集合/​​VMSS 中的所有 VM 上禁用。
  • 一旦加速网络被禁用,VM/可用性集/VMSS 即可调整为不支持加速网络的新大小并重启。

后续步骤