使用 Google 虚拟 NIC


Google 虚拟 NIC (gVNIC) 是专为 Compute Engine 设计的虚拟网络接口。gVNIC 是基于 virtIO 的以太网驱动程序的替代方案。

作为成功使用 VirtIO 的下一代网络接口,gVNIC 会将 VirtIO-Net 替换成 Compute Engine 中为所有新机器类型(第 3 代及更高版本)唯一支持的网络接口。较新的机器系列和网络功能需要使用 gVNIC 而不是 VirtIO。通过将 gVNIC 用作 Compute Engine 虚拟机的现代 I/O 接口,我们可以:

  • 提供更好的性能。
  • 通过减少相邻用户争用问题来提高一致性。
  • 引入了超出 VirtIO 能力的新网络功能。

所有机器系列、机器类型和世代都支持 gVNIC,建议使用。

如需支持以下功能,必须使用 gVNIC:

准备工作

  • 如果您将 gVNIC 与 Windows Server 2022 或 Windows 11 虚拟机搭配使用,请将 gVNIC 驱动程序更新为 GooGet 软件包版本 1.0.0@45 或更高版本,以提高网络吞吐量。如需了解详情,请参阅已知问题
  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

价格

如需查看 Tier_1 网络的最新价格,请参阅虚拟机实例价格页面

如需查看可用于查找价格信息的其他方法的列表,请参阅 Compute Engine 价格

操作系统支持

在 Compute Engine 上,您可以选择在任何受支持的公共操作系统 (OS) 映像上使用 gVNIC。您可以在以下操作系统上手动安装 gVNIC 驱动程序

  • 不支持的操作系统
  • 没有最新 gVNIC 驱动程序版本的操作系统

如需了解支持的操作系统,请查看操作系统 Supported interfaces(支持的接口)标签页。另请查看 Networking features(网络功能)标签页以获得网络功能支持。

在不支持的操作系统上使用

对于支持 gVNIC 但不包含最新版本 gVNIC 驱动程序的操作系统映像,您可以从 GitHub 下载最新的驱动程序版本。

您可以在 Linux 或 Windows 虚拟机上手动配置并安装最新版本的 gVNIC 驱动程序。

将虚拟机中的操作系统更新为使用 gVNIC 后,请基于该操作系统映像创建自定义操作系统映像。然后,您可以使用自定义操作系统映像在该操作系统上创建使用 gVNIC 的其他虚拟机。如需详细了解如何使用自定义操作系统映像创建虚拟机,请参阅本页面上的创建支持 gVNIC 的自定义操作系统映像

按照以下步骤手动配置和安装最新版本的 gVNIC 驱动程序:

限制

  • 不支持大型接收分流 (LRO)。对于使用 gVNIC 的虚拟机,系统会默认启用通用接收分流 (GRO)。
  • Windows 11 或 Windows Server 2022 虚拟机不支持大型发送分流版本 2 (LSOV2)。gVNIC 驱动程序版本 1.0.0@45 及更高版本会停用 LSOV2。如需了解如何在 Microsoft Windows 上检查和更新虚拟机的 gVNIC 驱动程序,请参阅已知问题

将 gVNIC 与 Compute Engine 虚拟机搭配使用的概览

如需创建使用 gVNIC 的虚拟机,请完成以下步骤:

  1. 选择支持 gVNIC 的公共操作系统映像,或创建一个标记为使用 gVNIC 的自定义操作系统映像。
  2. 使用公共操作系统映像或自定义操作系统映像创建虚拟机。在创建虚拟机期间,将网络接口配置为使用 gVNIC。
  3. 验证是否已启用 gVNIC。

如果您遇到任何问题,请参阅为 Google 虚拟 NIC 进行问题排查

创建支持 gVNIC 的自定义操作系统映像

您可以使用 Google Cloud CLIREST 创建操作系统映像。如需了解创建自定义操作系统映像的详细信息和最佳实践,请参阅创建自定义操作系统映像

gcloud

  1. 选择支持 gVNIC 的操作系统映像或映像系列。如需了解详情,请参阅操作系统详细信息

  2. 使用上一步中所选操作系统映像或映像系列创建自定义操作系统映像并使用 GVNIC 标记此操作系统映像。如需创建自定义操作系统映像,请使用 gcloud compute images create 命令。例如,以下命令会创建支持 gVNIC 且基于特定操作系统映像的自定义操作系统映像。

    gcloud compute images create IMAGE_NAME \
        --source-image=SOURCE_IMAGE \
        --source-image-project=SOURCE_IMAGE_PROJECT \
        --guest-os-features=GVNIC
    

    替换以下内容:

    • IMAGE_NAME:您要创建的映像的名称。
    • SOURCE_IMAGE:支持 gVNIC 的特定操作系统映像,例如 rocky-linux-8-optimized-gcp-v20220719

      如果要使用映像系列中的最新操作系统映像,请将 --source-image 标志替换为 --source-image-family 标志,并将其值设置为支持 gVNIC 的映像系列。例如:--source-image-family=rocky-linux-8-optimized-gcp

    • SOURCE_IMAGE_PROJECT:包含来源操作系统映像或映像系列的项目的名称。

    示例

    如需使用 Compute Engine rocky-linux-8-optimized-gcp 映像系列中的最新操作系统映像创建 Rocky Linux 8 Optimized for Google Cloud 操作系统映像,请运行以下命令:

    gcloud compute images create IMAGE_NAME \
        --source-image-family=rocky-linux-8-optimized-gcp \
        --source-image-project=rocky-linux-cloud \
        --guest-os-features=GVNIC
    

    如需详细了解何时使用映像系列,请参阅映像系列最佳实践

REST

  1. 选择支持 gVNIC 的操作系统映像或映像系列。如需了解详情,请参阅操作系统详细信息

  2. 使用上一步中所选操作系统映像或映像系列创建操作系统映像并使用 GVNIC 标记此操作系统映像。如需创建操作系统映像,请使用 images.insert 方法

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images
    {
      "name":"IMAGE_NAME",
      "sourceImage":"SOURCE_IMAGE_URI",
      "guestOsFeatures":[
        {
          "type":"GVNIC"
        }
      ]
    }
    

    替换以下内容:

    • IMAGE_NAME:您要创建的操作系统映像的名称。
    • SOURCE_IMAGE_URI:您要使用的特定操作系统映像或映像系列的 URI。

      例如:

      • 特定操作系统映像:"sourceImage": "projects/rocky-linux-cloud/global/images/rocky-linux-8-optimized-gcp-v20220719"
      • 映像系列:"sourceImage": "projects/rocky-linux-cloud/global/images/family/rocky-linux-8-optimized-gcp"

      指定映像系列时,Compute Engine 会根据该系列中最新的未弃用操作系统映像创建虚拟机。如需详细了解何时使用映像系列,请参阅映像系列最佳实践

创建支持 gVNIC 的虚拟机

您可以使用其中一个支持的公共操作系统映像或使用您按照创建支持 gVNIC 的自定义操作系统映像中的步骤创建的自定义操作系统映像来创建虚拟机。

(可选)您可以在虚拟机上启用 DPDK,以加快网络数据包处理、缩短延迟时间并确保一致的性能。

使用公共操作系统映像创建虚拟机

如需使用支持 gVNIC 的公共操作系统映像创建虚拟机,请按照创建具有高带宽配置的虚拟机和容器中的说明操作。

使用自定义操作系统映像创建虚拟机

如果您没有使用支持 gVNIC 的公共操作系统映像,则必须先创建支持 gVNIC 的自定义操作系统映像。然后,您将使用该自定义操作系统映像通过 Google Cloud CLIREST 创建虚拟机。

gcloud

  1. 使用 gcloud compute instances create 命令创建虚拟机。对于启动磁盘,请指定您之前创建的自定义操作系统映像。 对于网络接口,请将 nic-type 标志的值设置为 GVNIC

    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image=IMAGE_NAME \
        --image-project=YOUR_IMAGE_PROJECT \
        --network-interface=nic-type=GVNIC
    

    请替换以下内容:

    • VM_NAME:新虚拟机的名称。
    • ZONE:要在其中创建虚拟机的可用区。
    • IMAGE_NAME:上一步中创建的操作系统映像。
    • YOUR_IMAGE_PROJECT:包含操作系统映像的项目的名称。
  2. 可选:验证 Compute Engine 是否已创建虚拟机,并将 nicType 设置为 GVNIC

    gcloud compute instances describe VM_NAME \
       --zone=ZONE
    

    替换以下内容:

    • VM_NAME:虚拟机的名称。
    • ZONE:您在其中创建虚拟机的可用区。

    示例

    如需使用项目 my-project-12345 中名为 my-gvnic-rocky8 的操作系统映像在可用区 us-west1-b 中创建 Rocky Linux 8 虚拟机,请运行以下命令:

    gcloud compute instances create my-rocky-linux-vm \
        --zone=us-west1-b \
        --image=my-gvnic-rocky8 \
        --image-project=my-project-12345 \
        --network-interface=nic-type=GVNIC
    

    需要考虑的事项

    --network-interface 标志具有如下所示的子级标志:

    • --address:为虚拟机分配 IP 地址
    • --network:接口将属于的网络
    • --network-tier:接口的网络层级
    • --subnet:接口将属于的子网。如果还指定了 --network,则子网必须是指定网络的一部分。
    • --private-network-ip:指定要分配给虚拟机的 RFC 1918 IP。

    如需查看完整列表,请参阅 --network-interface 标志

REST

使用 instances.insert 方法创建虚拟机。

  • 对于启动磁盘,请指定您之前创建的自定义操作系统映像。
  • 对于网络接口,请将 nicType 字段的值设置为 GVNIC
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
  "name":"VM_NAME",
  "networkInterfaces":[
    {
      "network":"NETWORK",
      "nicType":"GVNIC",
      "subnet":"SUBNET_NAME"
    }
  ],
  "disks":[
    {
      "initializeParams":{
        "sourceImage":"projects/YOUR_IMAGE_PROJECT/global/images/IMAGE_NAME"
      },
      "boot":true
    }
  ]
}

请替换以下内容:

  • PROJECT_ID:要在其中创建虚拟机的项目的 ID。
  • ZONE:要在其中创建虚拟机的可用区。
  • VM_NAME:新虚拟机的名称。
  • NETWORK:此虚拟机的网络资源网址。如果网络或子网都未指定,则使用默认网络 global/networks/default
  • SUBNET_NAME:子网的名称。网络是根据指定的子网推断出来的。这是一个可选字段。
  • YOUR_IMAGE_PROJECT:包含操作系统映像的项目的名称。
  • IMAGE_NAME:上一步中创建的操作系统映像。

验证是否已启用 gVNIC

Linux

您可以使用 lshw 工具提取有关虚拟机硬件配置的详细信息。

如需在 Linux 虚拟机实例上安装 lshw 工具,请打开与虚拟机的 SSH 连接,然后运行以下命令:

sudo apt-get install lshw -y

如需确定虚拟机是否在使用 gVNIC 网络接口,请运行以下命令:

sudo lshw -class network

输出类似以下内容:

*-network
   description: Ethernet interface
   product: Compute Engine Virtual Ethernet [gVNIC]
   vendor: Google, Inc.
   physical id: 3
   bus info: pci@0000:00:03.0
   logical name: ens3
   version: 00
   serial: 42:01:0a:80:00:6f
   width: 32 bits
   clock: 33MHz
   capabilities: msix bus_master cap_list ethernet physical
   configuration: autonegotiation=off broadcast=yes driver=gve driverversion=1.0.0
    duplex=full ip=10.128.0.111 latency=0 link=yes multicast=yes port=twisted pair
   resources: irq:11 memory:c0203000-c0203fff memory:c0200000-c02000ff memory:c0100000-c01fffff

Windows

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

问题排查

如需排查 gVNIC 问题,请参阅排查 Google 虚拟 NIC 问题

后续步骤