导入虚拟磁盘

本文档介绍了将虚拟机 (VM) 磁盘映像导入 Google Distributed Cloud (GDC) 网闸隔离配置的步骤。

将现有虚拟磁盘(通常称为黄金磁盘或黄金映像)导入 GDC,以节省时间并使用生成的映像创建虚拟机。导入工具支持 RAW 和 QCOW 映像格式。

本文档适用于平台管理员或应用运维人员群组中创建虚拟机映像的开发者。如需了解详情,请参阅适用于 GDC 网闸隔离配置文档的受众群体。

准备工作

在继续操作之前,请确保您满足以下条件:

准备环境

  • 已下载、安装和配置 gdcloud CLI。GDC 的所有 CLI 命令都使用 gdcloud CLI 或 kubectl CLI,并且需要操作系统 (OS) 环境。

申请 IAM 角色

如需获得导入虚拟磁盘所需的权限,请让您的 IAM 项目管理员为您授予项目的以下角色:

  • Virtual Machine Project Admin (project-vm-admin):在项目命名空间中创建、修改、列出和删除虚拟机。

  • Project Viewer (project-viewer):查看项目命名空间中的所有资源。

  • 虚拟机映像项目管理员 (project-vm-image-admin):在项目命名空间中创建、列出和删除虚拟机映像。

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

导入虚拟磁盘

您可以直接从工作站导入虚拟磁盘文件。导入工具会自动将文件上传到项目中的对象存储区存储桶。

如需导入虚拟磁盘,请使用 gdcloud CLI 或 虚拟机管理器 API。

gdcloud

import 命令会检查 GDC 提供的映像是否具有所需的软件包,以便配置使用安全 shell (SSH) 和远程桌面协议 (RDP) 连接到实例所需的凭据。其中包括客机环境的软件包。

该命令还会安装网络时间协议 (NTP) 和 cloud-init 的软件包,以便实例在 GDC 中正常运行。

  • 如需创建可启动映像,请使用 gdcloud compute images import 命令:
gdcloud compute images import IMAGE_NAME \
  --source-file=SOURCE_FILE \
  --os=IMAGE_OS \
  --timeout=TIMEOUT

执行以下变量替换操作:

  • IMAGE_NAME:目标映像的名称。名称长度不得超过 35 个字符。
  • SOURCE_FILE:您的虚拟磁盘文件。此文件是工作站上的本地文件。您可以提供绝对路径或相对路径。
  • IMAGE_OS:要导入的磁盘上的操作系统。
  • TIMEOUT:导入在失败并显示“TIMEOUT”之前可以持续的时间。例如,如果您指定 2h,则该过程会在 2 小时后失败。默认超时为 1h。

上传操作可能需要较长时间,具体取决于虚拟磁盘的大小和网络连接的速度。根据磁盘大小,导入操作可能需要运行几十分钟。

API

如需通过 API 导入虚拟磁盘,请执行以下操作:

  1. 在 Management API 服务器中创建 VirtualMachineImageImport 自定义资源,以启动映像导入过程:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_ID \
      apply -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineImageImport
    metadata:
      name: IMAGE_NAME
      namespace: PROJECT_ID
    spec:
      source:
        objectStorage:
          bucketRef:
            name: vm-images-bucket
          objectName: SOURCE_FILE
      imageMetadata:
        name: IMAGE_NAME
        operatingSystem: IMAGE_OS
        minimumDiskSize: DISK_SIZE
    EOF
    

    执行以下变量替换操作:

    • MANAGEMENT_API_SERVER:Management API 服务器的 kubeconfig 文件。
    • IMAGE_NAME:要导入的映像的名称。名称不得超过 35 个字符。
    • PROJECT_ID:要向其中导入映像的项目的 ID。
    • SOURCE_FILE:包含上传到对象存储区中的虚拟磁盘的源文件的名称。此值是对象存储路径中 vm-images-bucket/ 之后的部分。
    • IMAGE_OS:要导入的磁盘上的操作系统。
    • DISK_SIZE:通过此映像创建的磁盘的最小大小。在原始映像的文件系统大小基础上,至少留出 20% 的缓冲空间。例如,对于原始文件系统大小为 10G 的虚拟磁盘,请至少使用 12G。
  2. 通过查询 VirtualMachineImageImport 自定义资源的状态来监控导入进度:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_ID \
      get virtualmachineimageimport.virtualmachine.gdc.goog IMAGE_NAME \
      -o jsonpath='{.status}'
    

清理资源

导入过程涉及将虚拟磁盘文件上传到对象存储区。如果您使用 gdcloud CLI,则即使导入失败,CLI 也会在命令完成时删除对象。如果您中断该命令,或者使用 API 导入映像,则虚拟磁盘文件可能会保留在名为 vm-images-bucket 的对象存储区存储桶中,直到您手动删除该文件。

后续步骤