创建使用 Compute Engine 虚拟网络接口的实例


Compute Engine 虚拟网络接口(也称为 gVNIC)是专为在 Compute Engine 上使用而设计的,通过提供更高效的分发网络来从/向虚拟机实例发送流量。之前,在 Compute Engine 上运行的虚拟机 (VM) 实例使用的是基于 virtIO 规范的虚拟网络接口。

必须使用 Compute Engine 虚拟网络接口才能支持更高的网络带宽,如 50-100 Gbps 的速度(可用于挂接了 GPU 的实例上的分布式工作负载)。

要创建使用 Compute Engine 虚拟网络接口的虚拟机实例,您可以完成以下任一步骤:

准备工作

限制

使用内存优化机器类型的虚拟机实例不支持 Compute Engine 虚拟网络接口。

操作系统支持

如需了解哪些映像属于 gvnic-vm-image-prod 映像项目并且配置为使用 Compute Engine 虚拟网络接口,请参阅操作系统详细信息

您可以使用上述任一映像创建默认使用 Compute Engine 虚拟网络接口的虚拟机实例

使用预先配置的映像创建虚拟机实例

如需使用 gvnic-vm-image-prod 映像项目中的映像创建虚拟机实例,请按照相应步骤创建虚拟机实例并提供映像项目和映像系列。

Debian

如需创建 Debian 实例,请运行以下命令:

gcloud beta compute instances create instance-name \
      --image-project=gvnic-vm-image-prod \
      --image-family=debian-9-gvnic

请将 instance-name 替换为您的实例

Windows

  • 如需创建 Windows 2019 实例,请运行以下命令:

    gcloud beta compute instances create instance-name \
            --image-project=gvnic-vm-image-prod \
            --image-family=windows-2019-gvnic
    
  • 如需创建 Windows 2016 实例,请运行以下命令:

    gcloud beta compute instances create instance-name \
              --image-project=gvnic-vm-image-prod \
              --image-family=windows-2016-gvnic
    
  • 如需创建 Windows 2012-r2 实例,请运行以下命令:

    gcloud beta compute instances create instance-name \
              --image-project=gvnic-vm-image-prod \
              --image-family=windows-2012-r2-gvnic
    

    请将 instance-name 替换为您的实例

手动安装 Compute Engine 虚拟网络驱动程序

要基于未安装 Compute Engine 虚拟网络驱动程序的映像创建虚拟机实例,您需要:

  1. 在映像上安装 Compute Engine 虚拟网络驱动程序。
  2. 使用现已安装了 Compute Engine 虚拟网络驱动程序的映像来创建虚拟机实例。

Linux

在安装 Compute Engine 虚拟网络驱动程序之前,您必须先为操作系统安装最新版本的内核驱动程序和标头。如果实例使用的 Compute Engine 虚拟网络接口没有内核驱动程序,则该实例将不具备内部或外部网络连接,包括 SSH 和 RDP。

要基于源代码构建和安装内核驱动程序,您必须安装受支持的内核与标头。Compute Engine 虚拟网络驱动程序支持针对版本 3.10 及更高版本的主线和主要分发内核进行构建。

  1. 安装 3.10 版或更高版本的内核与标头,或更新为适当版本。如需完成此步骤,请查看与您的操作系统对应的文档。您可以从 GitHub 获取源代码和驱动程序软件包,请参阅 GoogleCloudPlatform/compute-virtual-ethernet-linux

  2. 使用映像创建并启动虚拟机实例

  3. 在此虚拟机实例上,加载内核驱动程序。如需加载驱动程序,请运行以下命令:

    modprobe gve

    在您重新启动系统或使用 rmmod 命令移除驱动程序之前,此命令会加载驱动程序。

  4. (可选)如需确保驱动程序在系统启动时自动加载,请运行以下某个命令:

    • 对于使用 systemd 的操作系统,请运行以下命令:

      echo gve > /etc/modules-load.d/gve.conf
    • 对于 Debian 系统,请运行以下命令:

      echo gve >> /etc/modules
  5. 停止虚拟机实例。

  6. 根据挂接到您刚刚停止的虚拟机实例的磁盘创建映像。

    gcloud beta compute images create image-name\
            --source-disk disk-name \
            --guest-os-features=GVNIC
    

    替换以下内容:

    • image-name:您要创建的映像的名称。此映像已安装 Compute Engine 虚拟网络驱动程序。
    • disk-name:您刚刚停止的虚拟机实例上的启动磁盘的名称。
  7. 使用安装了 Compute Engine 虚拟网络驱动程序的映像创建并启动虚拟机实例

Windows

  1. 使用映像创建并启动虚拟机实例

  2. 在此虚拟机实例上,安装 GooGet。如需安装 GooGet,请参阅下载并安装 GooGet

  3. 安装 gVNIC 驱动程序。如需安装驱动程序,请在提升权限的 PowerShell 提示符下运行以下命令:

    googet install google-compute-engine-driver-gvnic
  4. 停止虚拟机实例。

  5. 根据挂接到您刚刚停止的虚拟机实例的磁盘创建映像。

    gcloud beta compute images create image-name\
            --source-disk disk-name \
            --guest-os-features=GVNIC
    

    替换以下内容:

    • image-name:您要创建的映像的名称。此映像现已安装了 Compute Engine 虚拟网络驱动程序。
    • disk-name:您刚刚停止的虚拟机实例上的启动磁盘的名称。
  6. 使用安装了 Compute Engine 虚拟网络驱动程序的映像创建并启动虚拟机实例

验证 Compute Engine 虚拟网络接口是否已启用

Linux

方法 1

  1. 在 Linux 虚拟机实例上,运行以下命令:

    sudo apt install pciutils
    lspci
    

    输出应类似于以下内容:

    00:04.0 Ethernet controller: Google, XXX. Device 0042

方法 2

  1. 按照操作系统的说明操作,下载 ethtool 网络实用程序工具。

  2. 运行以下命令:

    sudo ethtool -i network-interface

    network-interface 替换为您的网络接口的名称。例如 eth0

    输出应类似于以下内容:

    driver: gve
    version: 1.0.0
    firmware-version:
    expansion-rom-version:
    bus-info: 0000:00:04.0
    supports-statistics: yes
    supports-test: no
    supports-eeprom-access: no
    supports-register-dump: no
    supports-priv-flags: no

Windows

  1. 在 Windows 虚拟机实例上,打开设备管理器。
  2. 在网络适配器下,您应该会看到:"Google Ethernet Adapter"

问题排查

虚拟机实例未启动

  • 原因:映像未启用 Compute Engine 虚拟网络驱动程序。

  • 诊断:检查映像是否启用了 Compute Engine 虚拟网络接口。要进行验证,请运行以下命令:

    gcloud beta compute images describe image-name

    image-name 替换为映像

    命令的输出应在 guestOsFeatures 下显示“GVNIC”。

  • 解决办法:确保您使用的是受支持的映像,或者您已在自定义映像上正确设置 gVNIC 驱动程序

虚拟机实例已启动,但无法通过网络访问

  • 原因:未成功安装和加载 Compute Engine 虚拟网络驱动程序。

  • 诊断:如需检查驱动程序是否已安装和加载,请完成以下步骤:

    Linux

    1. 检查驱动程序是否已安装。

      modinfo gve

      输出应类似于以下内容:

      filename:       /lib/modules/4.15.0-1036-gcp/updates/dkms/gve.ko
      version:        1.0.0
      license:        Dual MIT/GPL
      description:    gVNIC Driver
      author:         Google, XXX.
      srcversion:     5FEFB9DD945EB2DEC94EE09
      alias:          pci:v00001AE0d00000042sv*sd*bc*sc*i*
      depends:
      retpoline:      Y
      name:           gve
      vermagic:       4.15.0-1036-gcp SMP mod_unload
      
    2. 检查驱动程序是否已加载。

      lsmod | grep gve

      输出应类似于以下内容:

      gve                    49152  0

    Windows

    1. 通过 SAC 连接到实例。
    2. 使用您的用户名和密码登录。
    3. 在命令提示符下,运行以下命令:

      dism /online /get-drivers | findstr gvnic
    4. 查看结果。

      • 如果驱动程序已安装,您应该会在输出中看到文本 Original File Name : gvnic.inf
      • 如果驱动程序未安装,则不会返回任何消息。
  • 解决办法:如果 Compute Engine 虚拟网络驱动程序不可用,请确保您使用的是受支持的映像,或者您已在自定义映像上正确设置了 Compute Engine 虚拟网络驱动程序

后续步骤