首页 / 平台管理 / 虚拟化管理 / 虚拟机镜像导出

虚拟机镜像导出

该功能用于导出虚拟机的系统镜像,并将其上传到对象存储中,以便将对象存储中的文件作为源添加到平台的虚拟机镜像中。

操作步骤

注意:下述所有操作需在虚拟机所在集群的 master 节点上执行。

停止虚拟机

  1. 在左侧导航栏中,单击 虚拟化管理 > 虚拟机

  2. 单击需要导出系统镜像的虚拟机名称,页面跳转至 Container Platform 的虚拟机详情页面。

  3. 单击 停止

创建 vmexport 资源

  1. 打开 CLI 工具。

  2. 执行下述命令设置变量。

    NAMESPACE=<namespace> 
    VM_NAME=<vm_name>
    TTL_DURATION=2h

    参数说明:

    • NAMESPAC:虚拟机所在的命名空间名称,使用此名称替换 <namespace> 部分。
    • VM_NAME:需导出系统镜像的虚拟机的名称,使用此名称替换 <vm_name> 部分。
    • TTL_DURATION:导出任务生命期,默认为 2 小时,可根据需求增大。
  3. 执行下述命令创建 vmexport 资源。

    cat <<EOF | kubectl create -f -
    apiVersion: export.kubevirt.io/v1alpha1
    kind: VirtualMachineExport
    metadata:
      name: export-$VM_NAME
      namespace: $NAMESPACE
    spec:
      ttlDuration: $TTL_DURATION
      source:
        apiGroup: "kubevirt.io"
        kind: VirtualMachine
        name: $VM_NAME
    EOF

    若出现类似下述回显信息,则表示创建成功。

    virtualmachineexport.export.kubevirt.io/export-k1 created
  4. 执行下述命令查看 vmexport 资源状态。

    kubectl -n $NAMESPACE get vmexport export-$VM_NAME -w

    回显信息:

    NAME        SOURCEKIND       SOURCENAME   PHASE
    export-k1   VirtualMachine   k1           Ready
  5. 待上述回显信息中的 PHASE 字段变为 Ready 状态,则键入 ctrl(control) + c,停止 watch 操作。

  6. 执行下述命令获取 TOKEN。

    TOKEN=$(kubectl -n $NAMESPACE get secret export-token-export-$VM_NAME -o jsonpath={.data.token} | base64 -d)

下载虚拟机镜像文件

  1. 执行下述命令获取指定命名空间下的虚拟机导出 Pod IP 地址,并将其存储在 EXPORT_SERVER_IP 环境变量中。

    EXPORT_SERVER_IP=$(kubectl -n $NAMESPACE get po virt-export-export-$VM_NAME -o jsonpath='{.status.podIP}')
  2. 执行下述命令设置 URL 环境变量,该 URL 指向虚拟机的磁盘镜像文件。

    URL=https://$EXPORT_SERVER_IP:8443/volumes/$VM_NAME-rootfs/disk.img.gz
  3. 执行下述命令下载镜像文件,下载后的文件名称为 disk.img.gz。

    curl -k -O -H "x-kubevirt-export-token: $TOKEN" $URL

将虚拟机镜像文件上传至对象存储

将下载的镜像文件上传至对象存储,可以使用任意 S3 工具进行上传,本文档以 mc(minio-client)工具为例进行介绍。

  1. 执行如下命令配置 mc 工具,并连接到指定的 S3 存储服务。

    mc alias set minio <ENDPOINNT> <ACCESSKEY> <SECRETKEY>

    参数说明:

    • ENDPOINT:S3 存储服务的地址,使用此地址替换 部分。
    • ACCESSKEY、SECRETKEY:S3 存储服务的用户 ak、sk,用于身份验证,相关说明请参考 MinIO对象存储
  2. 执行下述命令创建用于存放虚拟机镜像文件的存储桶。

    mc mb minio/vmdisks
  3. 执行下述命令将导出的虚拟机镜像文件 disk.img.gz 上传到创建的存储桶中。

    mc put disk.img.gz minio/vmdisks

创建虚拟机镜像

  1. 在左侧导航栏中,单击 虚拟化管理 > 虚拟机镜像

  2. 单击 添加虚拟机镜像

  3. 镜像地址填写为 <ENDPOINT>/vmdisks/disk.img.gz,需使用 S3 存储服务的地址替换 <ENDPOINT> 部分。其他参数说明请参考 添加虚拟机镜像

  4. 单击 添加

相关操作

使用新的虚拟机镜像创建虚拟机

具体操作请参考 Container Platform > 虚拟化 > 创建虚拟机/虚拟机组 相关文档。