导入虚拟磁盘

如果您在本地环境中拥有包含所需软件和配置的虚拟磁盘(有时称为金磁盘金映像),则可以将这些虚拟磁盘导入 GDC 气隙设备,并使用生成的映像创建虚拟机,从而节省时间。导入工具支持 Linux 的 RAW 和 QCOW 映像格式,以及 Windows 的 ISO 映像格式。

准备工作

在继续之前,请确保您已准备好以下内容:

  • 已下载、安装并配置 gdcloud CLI。GDC 的所有 CLI 命令都使用 gdcloudkubectl CLI,并且需要 Linux 环境。
  • 对管理 API 服务器的访问权限。按照登录中的 CLI 步骤登录 Management API 服务器。

请求权限和访问权限

如需执行本页面中列出的任务,您必须拥有 Project VirtualMachine Admin 和 Project VirtualMachine Image Admin 角色。请按照相关步骤验证或让项目 IAM 管理员在虚拟机所在项目的命名空间中为您分配项目 VirtualMachine 管理员 (project-vm-admin) 和项目 VirtualMachine 映像管理员 (project-vm-image-admin) 角色。

对于使用 GDC 控制台或 gdcloud CLI 进行的虚拟机操作,请让您的项目 IAM 管理员为您分配上段中列出的角色以及项目查看者 (project-viewer) 角色。

支持的操作系统

本部分详细介绍了 GDC 虚拟机支持的操作系统。

Linux 操作系统支持

您只能从可启动的磁盘导入 Linux 映像。如需在 GDC 中启动虚拟磁盘,磁盘必须运行以下受支持的操作系统之一:

  • Ubuntu 20.04
  • Ubuntu 22.04
  • RHEL 8

Windows 操作系统支持

GDC 还支持 Windows 10 和 Windows Server 2019 Datacenter 版操作系统。

您可以从 ISO 安装介质导入 Windows 映像。 GDC 会安装 Windows 并通过生成的磁盘创建可启动映像。

映像导入要求 ISO 在通过统一可扩展固件接口 (UEFI) 启动时不会提示输入。如需创建无提示 ISO,请从现有 ISO 文件开始。请完成以下步骤:

  1. 使用 7Zip 归档管理工具提取 ISO 内容:

    7z x windows-installation.iso -oiso-unpack
    
  2. 使用 mkisofs 从提取的 ISO 创建新的 ISO,并替换 EFI“无提示”二进制文件:

    mkisofs -b boot/etfsboot.com -no-emul-boot -c BOOT.CAT -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -v -V "Custom" -udf -boot-info-table -eltorito-alt-boot -eltorito-boot efi/microsoft/boot/efisys_noprompt.bin -no-emul-boot -o ISO_NAME.iso -allow-limited-size iso-unpack
    

    ISO_NAME 替换为无提示 ISO 的名称。例如 noprompt-install

导入虚拟磁盘

您可以使用 gdcloud CLI 或 Virtual Machine Manager API 导入虚拟磁盘。

如需获得导入映像所需的权限,请让您的组织 IAM 管理员为您授予项目的 Project VirtualMachine Image Admin (project-vm-image-admin) 角色。

gdcloud

使用 gdcloud compute images import 命令创建可启动的映像。

import 命令可确保磁盘具备所需的软件包,包括访客环境,而访客环境是配置凭据的必要条件,可用于通过 Linux 上的安全 Shell (SSH) 和 Windows 上的远程桌面协议 (RDP) 连接到实例。

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

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

gdcloud compute images import IMAGE_NAME \
  --source-file=SOURCE_FILE \
  --os=IMAGE_OS \
  --timeout=TIMEOUT

执行以下变量替换操作:

  • IMAGE_NAME:目标映像的名称。名称不得超过 35 个字符。
  • SOURCE_FILE:您的虚拟磁盘文件。此文件是工作站上的本地文件。您可以提供绝对路径或相对路径。
  • IMAGE_OS:要导入的磁盘上的操作系统。您必须将操作系统输入为 ubuntu-2004ubuntu-2204rhel-8windows-10windows-2019
  • TIMEOUT:导入在因“TIMEOUT”而失败之前可以持续的时间。例如,如果您指定 2h,则该进程会在 2 小时后失败。 默认超时为 1h

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

以下示例会导入存储在工作站主目录中名为 ubuntu_server.img 的虚拟磁盘:

gdcloud compute images import imported-image \
  --source-file=~/ubuntu_server.img \
  --os=ubuntu-2004

API

在通过 API 开始导入流程之前,您需要将虚拟磁盘上传到名为 vm-images-bucket 的对象存储桶。如需创建对象存储桶,请参阅为项目创建存储桶

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

  1. 在 Management API 服务器中创建一个 VirtualMachineImageImport 对象,以启动映像导入流程:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
      apply -n PROJECT_ID -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: OPERATING_SYSTEM
        minimumDiskSize: DISK_SIZE
    EOF
    

    执行以下变量替换操作:

    变量 说明
    IMAGE_NAME 要导入的映像的名称。名称不得超过 35 个字符。
    PROJECT_ID 要将映像导入到的项目的项目 ID。
    SOURCE_FILE 包含将虚拟磁盘上传到对象存储空间的源文件的名称。此值是对象存储路径中 vm-images-bucket/ 之后的部分。
    OPERATING_SYSTEM 要导入的磁盘上的操作系统。此值必须为 ubuntu-2004ubuntu-2204rhel-8windows-10windows-2019
    DISK_SIZE 使用此映像创建磁盘时,磁盘必须具有的最小大小。我们建议在原始映像的文件系统大小的基础上至少增加 20% 的缓冲区。例如:对于原始文件系统大小为 10 GiB 的虚拟磁盘,请至少使用 12 GiB。
  2. 通过查询 VirtualMachineImageImport 对象的状态来监控导入进度:

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG \
      get virtualmachineimageimport --namespace PROJECT_ID \
      IMAGE_NAME -o jsonpath='{.status}'
    

清理资源

导入过程涉及将虚拟磁盘文件上传到对象存储空间。如果您使用 gdcloud CLI,则无论命令是否成功完成,都会在命令完成时清理对象。如果命令中断,或者通过 API 完成映像导入,则虚拟磁盘文件可能会保留在名为 vm-images-bucket 的对象存储桶中,直到您手动删除该文件。

后续步骤

创建并启动虚拟机页面中,创建一个使用您的映像的新虚拟机实例。