导入虚拟磁盘

本文档介绍了将虚拟机 (VM) 磁盘映像导入 Google Distributed Cloud (GDC) 气隙环境的步骤。

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

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

准备工作

在继续之前,请确保您已具备以下条件:

准备环境

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

请求 IAM 角色

请与您的项目 IAM 管理员联系,以请求对您的项目使用以下角色:

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

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

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

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

导入虚拟磁盘

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

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

gdcloud

import 命令会检查磁盘是否具有必要的软件包,以配置凭据,以便使用安全 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
    

    执行以下变量替换操作:

    • 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,则无论命令是否成功,都会在命令完成后清理对象。如果命令中断,或者您使用 API 执行映像导入,则虚拟磁盘文件可能会保留在名为 vm-images-bucket 的对象存储桶中,直到您手动删除该文件为止。

后续步骤