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

如果您需要虚拟机尽快启动,请按照本页中的说明尽可能缩短虚拟机 (VM) 启动时间。最大限度地缩短启动时间会牺牲资源效率,即您的项目会消耗更多资源,并增加安全风险。

本文档面向平台管理员或应用运维人员群组中的开发者,他们需要在 Distributed Cloud 环境中配置虚拟机实例启动时间。如需了解详情,请参阅 GDC 气隙环境受众群体文档

准备工作

如需使用 gdcloud 命令行界面 (CLI) 命令,请确保您已下载、安装并配置 gdcloud CLI。Distributed Cloud 的所有命令都使用 gdcloudkubectl 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) 角色。

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

保持磁盘连接有效

当虚拟机启动时,从虚拟机的节点到虚拟机的磁盘建立连接需要几秒钟的时间。为了使虚拟机更快启动,必须在虚拟机关机时保持磁盘连接处于活动状态,这样磁盘连接就不会在后续虚拟机启动时重新初始化。为此,当您运行命令以启用磁盘连接 keep-alive 时,系统会自动创建一个虚拟 Pod,该 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 项目。

启用磁盘连接 keep-alive 后,系统会在与虚拟机相同的项目中创建一个名为 disk-connection-keep-alive-VM_NAME 的 Pod。由于 pod 会保持虚拟机的磁盘连接处于活动状态,因此下次重启虚拟机时速度会更快,后续启动时间也会缩短。

设置磁盘连接 keep-alive 亲和性

虚拟机重新启动时,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 和内存量微乎其微。
  • 安全接口会增加,因为即使在虚拟机关闭时,存在 keep-alive 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 或更大的启动磁盘挂接到虚拟机。