排查验证测试问题

为验证自定义虚拟机映像是否能正确启动并满足配置要求,Image Builder 会在临时测试虚拟机上执行自动化验证测试。如果其中一项测试失败,流水线会停止,Image Builder 不会发布最终映像。

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

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

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。

  • 设置默认区域和可用区。
  • REST

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

      安装 Google Cloud CLI。

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。

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

概览

如果自定义步骤成功完成,编排器会将虚拟机启动磁盘导出为临时测试映像(在 image-builder-test-images 系列中命名为 image-builder-test-image-BUILD_ID)。

编排器会从此映像启动测试虚拟机,并运行一套系统测试。Image Builder 以标准 JUnit XML 格式将测试结果直接输出到 Cloud Build 日志。

排查特定验证测试

查看每项验证测试的常见失败情况和诊断步骤:

Intel IDPF 驱动程序验证

此测试验证受支持的虚拟机实例是否在物理网络接口上加载高性能 Intel Infrastructure Data Path Function (idpf) 驱动程序。

  • 失败条件:如果虚拟机恢复为通用网络适配器软件包,或者访客内核缺少有效的 idpf 驱动程序模块,则虚拟机验证失败。
  • 分辨率:
    • 确保您的基础操作系统具有与 IDPF 兼容的内核版本。
    • 确认标准网络实用程序未剥离或屏蔽驱动程序。
    • 对于自定义内核 build,请验证是否已配置 CONFIG_IDPF。

网络和客户代理验证

此测试会断言实例具有可正常运行的 guest 通信和标准化的网络接口配置。

  • 失败条件:在以下任一条件下,测试都会失败:
    • 客户代理服务管理器 SubState 不显示 running 状态。
    • 没有非环回网络接口处于在线状态。
    • 接口名称与预期标准模式(例如 eth* 或 en*)不匹配。
  • 解决方法:

    • 验证客机代理是否已安装并配置为在启动时启动:

      systemctl is-active google-guest-agent
      
    • 确保您的网络配置(例如 netplan 或 ifupdown 模板)不会停用主虚拟接口。

安全启动验证

此测试断言 UEFI 安全启动处于有效状态,并且系统对映像强制执行客机操作系统内核签名验证。

  • 失败条件:如果 Compute Engine UEFI 变量报告 SecureBoot 不是 1 或 SetupMode 不是 0,则测试失败。
  • 解决方法:

    • 确认您的映像包含有效的签名密钥。
    • 在 imagebuilder.yaml 文件中,验证 guestOsFeatures 是否在目的地代码块下包含 UEFI_COMPATIBLE:

      destinations:
        - diskImage:
            guestOsFeatures:
              - UEFI_COMPATIBLE
      

暂停或恢复验证

此测试使用 Compute Engine API 暂停测试虚拟机,并断言在虚拟机执行恢复后,连接会恢复,而不会触发完整的 guest 重启。

  • 失败条件:如果实例在唤醒时重启、在挂起期间挂起或无法恢复网络 ping,则测试失败。
  • 分辨率:
    • 验证客机操作系统上的 ACPI 服务和电源政策是否已启用并配置为响应 ACPI 事件。
    • 检查客户机系统日志(/var/log/syslog 或 /var/log/messages),以查看自定义守护程序是否会阻止系统休眠请求。

跳过验证测试

虽然我们建议您验证生产映像,但您可以在测试期间通过在 imagebuilder.yaml 文件中的 spec.config 块下设置 skipSystemTests: true 来跳过验证测试:

spec:
  config:
    skipSystemTests: true