使用 Google 虚拟 NIC


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

作为接替 VirtIO 的下一代网络接口,gVNIC 取代了 VirtIO-Net,成为所有新机器类型(第 3 代及更高版本)在 Compute Engine 中唯一支持的网络接口。较新的机器系列和网络功能需要使用 gVNIC 而不是 VirtIO。将 gVNIC 作为新型 I/O 接口与 Compute Engine 虚拟机搭配使用具有以下优势:

  • 提供更好的性能。
  • 通过减少“相邻用户争用”问题来提高一致性。
  • 引入 VirtIO 无法提供的新网络功能。

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

需要使用 gVNIC 才能实现以下最大带宽速度:

对于机密虚拟机实例、第三代或更高版本的机器系列虚拟机以及在 Arm CPU 平台上运行的虚拟机,您必须使用 gVNIC 作为网络接口。

准备工作

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

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

价格

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

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

操作系统支持

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

  • 操作系统映像不包含 gVNIC 驱动程序
  • 操作系统映像没有最新 gVNIC 驱动程序版本

如需了解支持的操作系统,请查看操作系统接口标签页。另请查看 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"
        }
      ]
    }
    

    请替换以下内容:

    • PROJECT_ID:要在其中创建新映像的项目的 ID
    • 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,以加快网络数据包处理、缩短延迟时间并确保一致的性能。

对于支持多个网络接口 (NIC) 的虚拟机,您可以将不同类型的 NIC 挂接到虚拟机,因为接口支持是按 NIC 配置的。虽然支持此功能,但我们不建议采用此设置。对于支持多个 NIC 的虚拟机,请确保在创建虚拟机时为每个网络接口指定 nic-type=GVNIC

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

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

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

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

控制台

  1. 在 Google Cloud 控制台中,转到创建实例页面。

    转到“创建实例”

  2. 输入虚拟机实例的名称

  3. 选择要在其中创建虚拟机的可用区

  4. 启动磁盘部分,点击更改

  5. 启动磁盘面板的自定义映像标签页上,完成以下操作:

    1. 选择包含您之前创建的操作系统映像的源项目
    2. 映像下拉菜单中选择相应映像。
    3. 点击选择
  6. 如需将 gVNIC 设置为网络接口,请展开高级选项部分,然后执行以下操作:

    1. 展开网络部分。
    2. 对于网络接口卡,选择 gVNIC
  7. 根据需要进行其他虚拟机自定义。

  8. 点击创建以创建虚拟机实例。

gcloud

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

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

    请替换以下内容:

    • VM_NAME:新虚拟机的名称。
    • ZONE:要在其中创建虚拟机的可用区。
    • MACHINE_TYPE:创建虚拟机实例时要使用的机器类型。如果未指定机器类型,则默认值为 n1-standard-1
    • 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 中创建具有 n1-standard-1 机器类型的 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 问题

后续步骤