导入虚拟磁盘

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

准备工作

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

  • 已下载、安装并配置 gdcloud CLI。GDC 的所有 CLI 命令都使用 gdcloudkubectl CLI,并且需要操作系统 (OS) 环境。
  • 对 Kubernetes 集群的登录访问权限。按照登录中的 CLI 步骤登录 Kubernetes 集群。

请求权限和访问权限

如需执行本页面中列出的任务,您必须具有 Project VirtualMachine Admin 角色。按照相关步骤验证您是否在虚拟机所在项目的命名空间中拥有 Project VirtualMachine Admin (project-vm-admin) 角色。

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

导入虚拟磁盘

您可以使用 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:要导入的磁盘上的操作系统。
  • TIMEOUT:导入在因“TIMEOUT”而失败之前可以持续的时间。例如,如果您指定 2h,则该进程会在 2 小时后失败。 默认超时为 1h

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

API

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

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

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

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      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 要导入的磁盘上的操作系统。
    DISK_SIZE 使用此映像创建磁盘时,磁盘必须具有的最小大小。我们建议在原始映像的文件系统大小的基础上至少增加 20% 的缓冲区。例如:对于原始文件系统大小为 10Gi 的虚拟磁盘,至少使用 12Gi
  2. 通过查询 VirtualMachineImageImport 对象的状态来监控导入进度:

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

清理资源

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

后续步骤

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