虚拟机镜像导出
该功能用于导出虚拟机的系统镜像,并将其上传到对象存储中,以便将对象存储中的文件作为源添加到平台的虚拟机镜像中。
操作步骤
注意:下述所有操作需在虚拟机所在集群的 master 节点上执行。
停止虚拟机
-
在左侧导航栏中,单击 虚拟化管理 > 虚拟机。
-
单击需要导出系统镜像的虚拟机名称,页面跳转至 Container Platform 的虚拟机详情页面。
-
单击 停止。
创建 vmexport 资源
-
打开 CLI 工具。
-
执行下述命令设置变量。
NAMESPACE=<namespace> VM_NAME=<vm_name> TTL_DURATION=2h参数说明:
- NAMESPAC:虚拟机所在的命名空间名称,使用此名称替换 <namespace> 部分。
- VM_NAME:需导出系统镜像的虚拟机的名称,使用此名称替换 <vm_name> 部分。
- TTL_DURATION:导出任务生命期,默认为 2 小时,可根据需求增大。
-
执行下述命令创建 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 -
执行下述命令查看 vmexport 资源状态。
kubectl -n $NAMESPACE get vmexport export-$VM_NAME -w回显信息:
NAME SOURCEKIND SOURCENAME PHASE export-k1 VirtualMachine k1 Ready -
待上述回显信息中的 PHASE 字段变为 Ready 状态,则键入 ctrl(control) + c,停止 watch 操作。
-
执行下述命令获取 TOKEN。
TOKEN=$(kubectl -n $NAMESPACE get secret export-token-export-$VM_NAME -o jsonpath={.data.token} | base64 -d)
下载虚拟机镜像文件
-
执行下述命令获取指定命名空间下的虚拟机导出 Pod IP 地址,并将其存储在 EXPORT_SERVER_IP 环境变量中。
EXPORT_SERVER_IP=$(kubectl -n $NAMESPACE get po virt-export-export-$VM_NAME -o jsonpath='{.status.podIP}') -
执行下述命令设置 URL 环境变量,该 URL 指向虚拟机的磁盘镜像文件。
URL=https://$EXPORT_SERVER_IP:8443/volumes/$VM_NAME-rootfs/disk.img.gz -
执行下述命令下载镜像文件,下载后的文件名称为 disk.img.gz。
curl -k -O -H "x-kubevirt-export-token: $TOKEN" $URL
将虚拟机镜像文件上传至对象存储
将下载的镜像文件上传至对象存储,可以使用任意 S3 工具进行上传,本文档以 mc(minio-client)工具为例进行介绍。
-
执行如下命令配置 mc 工具,并连接到指定的 S3 存储服务。
mc alias set minio <ENDPOINNT> <ACCESSKEY> <SECRETKEY>参数说明:
- ENDPOINT:S3 存储服务的地址,使用此地址替换
部分。 - ACCESSKEY、SECRETKEY:S3 存储服务的用户 ak、sk,用于身份验证,相关说明请参考 MinIO对象存储 。
- ENDPOINT:S3 存储服务的地址,使用此地址替换
-
执行下述命令创建用于存放虚拟机镜像文件的存储桶。
mc mb minio/vmdisks -
执行下述命令将导出的虚拟机镜像文件 disk.img.gz 上传到创建的存储桶中。
mc put disk.img.gz minio/vmdisks
创建虚拟机镜像
-
在左侧导航栏中,单击 虚拟化管理 > 虚拟机镜像。
-
单击 添加虚拟机镜像。
-
镜像地址填写为 <ENDPOINT>/vmdisks/disk.img.gz,需使用 S3 存储服务的地址替换 <ENDPOINT> 部分。其他参数说明请参考 添加虚拟机镜像 。
-
单击 添加。
相关操作
使用新的虚拟机镜像创建虚拟机
具体操作请参考 Container Platform > 虚拟化 > 创建虚拟机/虚拟机组 相关文档。