使用 Azure CLI 创建具有加速网络的 Linux 虚拟机
在门户中创建
尽管本文提供了使用 Azure CLI 创建具有加速网络的虚拟机的步骤,但也可以使用 Azure 门户创建具有加速网络的虚拟机。 在门户中创建虚拟机时,在“创建虚拟机”边栏选项卡中,选择“网络”选项卡。在此选项卡中,有一个用于“加速网络”的选项。 如果已选择支持的操作系统和 VM 大小,此选项将自动填充为“打开”。如果没有选择,它将填充加速网络的“关闭”选项,并为用户提供未启用它的原因。
你还可以在创建 VM 后通过门户启用或禁用加速网络,方法是:导航到网络接口,然后单击“概述”边栏选项卡顶部的按钮。
注意
门户中的“加速网络”设置反映了用户选择的状态。 即使 VM 大小需要 AccelNet,AccelNet 也允许选择“已禁用”。 对于这些 AccelNet 所需的 VM 大小,无论门户中所示的用户设置如何,AccelNet 都将在运行时启用。
只有受支持的操作系统才能通过门户启用。 如果你使用的是自定义映像,并且该映像支持加速网络,请使用 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 即可调整为不支持加速网络的新大小并重启。
后续步骤
- 了解加速网络的工作原理
- 了解如何在 PowerShell 中创建具有加速网络的 VM
- 使用 Azure 邻近放置组改善延迟