最大限度地缩短虚拟机启动时间

如果您需要虚拟机尽快启动,请按照本页面上的说明最大限度地缩短虚拟机 (VM) 启动时间。最大限度地缩短开始时间会牺牲资源效率,因为您的项目会消耗额外的资源,并且会增加安全途径。

本文档适用于在 Distributed Cloud 环境中配置虚拟机实例开始时间的平台管理员或应用操作员群组中的开发者。如需了解详情,请参阅适用于 GDC 网闸隔离配置文档的受众群体。

准备工作

如需使用 gdcloud 命令行界面 (CLI) 命令,请确保您已下载、安装并配置 gdcloud CLI。Distributed Cloud 的所有命令都使用 gdcloud 或 kubectl CLI,并且需要操作系统 (OS) 环境。

获取 kubeconfig 文件路径

如需针对 Management API 服务器运行命令,请确保您拥有以下资源:

  1. 如果您没有 Management API 服务器的 kubeconfig 文件,请登录并生成该文件。

  2. 在这些说明中,请使用 Management API 服务器的 kubeconfig 文件的路径替换 MANAGEMENT_API_SERVER。

申请 IAM 角色

如需最大限度地缩短虚拟机的开始时间,请与您的 IAM 项目管理员联系,申请 Virtual Machine Project Admin (project-vm-admin) 角色。

所有虚拟机角色都必须绑定到虚拟机所在项目的命名空间。 按照相关步骤验证您的访问权限。

保持磁盘连接处于活跃状态

虚拟机启动时,从虚拟机的节点到虚拟机的磁盘发起连接需要几秒钟的时间。为了使虚拟机启动速度更快,必须在虚拟机关停时保持磁盘连接处于活跃状态,以便在后续虚拟机启动时不会重新启动磁盘连接。为此,当您运行命令以启用磁盘连接保持连接时,系统会自动创建一个虚拟 Pod,用于装载虚拟机的所有磁盘。

启用磁盘连接保持连接

如需为项目 PROJECT 中名为 VM_NAME 的虚拟机保持磁盘连接,请运行以下命令。执行此操作后,系统会自动创建虚拟 Pod:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  patch virtualmachines.virtualmachine.gdc.goog VM_NAME \
  --type merge --patch $'
metadata:
  annotations:
    disk.virtualmachine.gdc.goog/enable-connection-keep-alive: "true"
'

请根据以下定义替换这些说明中的变量。

变量定义
MANAGEMENT_API_SERVER Management API 服务器 kubeconfig 文件。
VM_NAME 虚拟机的名称。
PROJECT 虚拟机所在的 GDC 项目。

启用磁盘连接保持连接后,系统会在虚拟机所在的项目中创建一个名为 disk-connection-keep-alive-VM_NAME 的 Pod。下一次虚拟机重启速度更快,后续开始时间也更快,因为虚拟机的磁盘连接由 Pod 保持活跃状态。

设置磁盘连接保持连接亲和性

Kubernetes 调度器可能会在虚拟机重启时为其选择其他节点。为降低发生这种情况的可能性,请在虚拟机和 keep-alive Pod 之间配置虚拟机间亲和性规则。如需配置为自动执行此操作,请执行以下操作:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  patch virtualmachines.virtualmachine.gdc.goog VM_NAME \
  --type merge --patch $'
metadata:
  annotations:
    disk.virtualmachine.gdc.goog/add-connection-keep-alive-affinity: "true"
'

这会在虚拟机上为 keep-alive pod 添加首选亲和性设置。

注意事项

保持磁盘连接处于活跃状态时,需要注意以下两点:

  • keep-alive pod 会产生额外的资源用量:
    • 它会计入每个节点的 Pod 数量上限。
    • 它使用由 Kubernetes 分配的额外 IP 地址。
    • 它使用的额外 CPU 和内存量可以忽略不计。
  • 安全风险面会增加,因为即使虚拟机已关停,保活 Pod 所在的节点也始终挂接了虚拟机的磁盘。

使用 BIOS 固件

在 GDC 中,启动具有统一可扩展固件接口 (UEFI) 固件的虚拟机比启动具有 BIOS 固件的虚拟机慢。

  1. 为确保启动时间最短,请将虚拟机的固件类型设置为 BIOS:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      patch virtualmachines.virtualmachine.gdc.goog VM_NAME \
      -type merge --patch $'
    spec:
      firmware:
        type: bios
        enableSecureBoot:
    '
    
  2. 如果虚拟机正在运行,请按照重启虚拟机的说明重启虚拟机。

注意事项

使用 BIOS 固件的注意事项是,它不支持安全启动。

使用大型启动磁盘

如需最大限度地缩短虚拟机启动时间,请将大小为 500 GB 或更大的启动磁盘挂接到虚拟机。