7.9. 导出虚拟机
您可以导出虚拟机 (VM) 及其关联的磁盘,以将虚拟机导入到另一个集群或分析卷以备备目的。
				您可以使用命令行界面创建一个 VirtualMachineExport 自定义资源 (CR)。
			
				另外,您可以使用 virtctl vmexport 命令创建一个 VirtualMachineExport CR 并下载导出的卷。
			
您可以使用 Migration Toolkit for Virtualization 在 OpenShift Virtualization 集群间迁移虚拟机。
7.9.1. 创建 VirtualMachineExport 自定义资源
					您可以创建一个 VirtualMachineExport 自定义资源 (CR) 来导出以下对象:
				
- 虚拟机 (VM):导出指定虚拟机的持久性卷声明 (PVC)。
- 
							VM 快照:导出 VirtualMachineSnapshotCR 中包含的 PVC。
- 
							PVC :导出 PVC。如果 PVC 被另一个 pod (如 virt-launcherpod)使用,则导出会一直处于Pending状态,直到 PVC 不再使用为止。
					VirtualMachineExport CR 为导出的卷创建内部和外部链接。内部链接在集群中有效。可以使用 Ingress 或 Route 访问外部链接。
				
导出服务器支持以下文件格式:
- 
							raw: 原始磁盘镜像文件。
- 
							gzip:压缩的磁盘镜像文件.
- 
							dir:PVC 目录和文件。
- 
							tar.gz:压缩的 PVC 文件。
先决条件
- 必须为虚拟机导出关闭虚拟机。
流程
- 创建一个 - VirtualMachineExport清单,根据以下示例从- VirtualMachine、- VirtualMachineSnapshot或- PersistentVolumeClaimCR 导出卷,并将其保存为- example-export.yaml:- VirtualMachineExport示例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建 - VirtualMachineExportCR:- oc create -f example-export.yaml - $ oc create -f example-export.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 获取 - VirtualMachineExportCR:- oc get vmexport example-export -o yaml - $ oc get vmexport example-export -o yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 导出的卷的内部和外部链接显示在 - status小节中:- 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
7.9.2. 访问导出的虚拟机清单
					导出虚拟机 (VM) 或快照后,您可以从导出服务器获取 VirtualMachine 清单和相关信息。
				
先决条件
- 您可以通过创建一个 - VirtualMachineExport自定义资源 (CR) 来导出虚拟机或虚拟机快照。注意- 具有 - spec.source.kind: PersistentVolumeClaim参数的- VirtualMachineExport对象不会生成虚拟机清单。
流程
- 要访问清单,您必须首先将证书从源集群复制到目标集群。 - 登录到源集群。
- 运行以下命令,将证书保存到 - cacert.crt文件中:- oc get vmexport <export_name> -o jsonpath={.status.links.external.cert} > cacert.crt- $ oc get vmexport <export_name> -o jsonpath={.status.links.external.cert} > cacert.crt- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 使用VirtualMachineExport对象中的metadata.name值替换<export_name>。
 
- 
									将 cacert.crt文件复制到目标集群。
 
- 运行以下命令,解码源集群中的令牌并将其保存到 - token_decode文件中:- oc get secret export-token-<export_name> -o jsonpath={.data.token} | base64 --decode > token_decode- $ oc get secret export-token-<export_name> -o jsonpath={.data.token} | base64 --decode > token_decode- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 使用VirtualMachineExport对象中的metadata.name值替换<export_name>。
 
- 
							将 token_decode文件复制到目标集群。
- 运行以下命令来获取 - VirtualMachineExport自定义资源:- oc get vmexport <export_name> -o yaml - $ oc get vmexport <export_name> -o yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 查看 - status.links小节,该小节被分为- external和- internal部分。请注意每个部分中的- manifests.url字段:- 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 登录到目标集群。
- 运行以下命令来获取 - Secret清单:- curl --cacert cacert.crt <secret_manifest_url> -H \ "x-kubevirt-export-token:token_decode" -H \ "Accept:application/yaml" - $ curl --cacert cacert.crt <secret_manifest_url> -H \- 1 - "x-kubevirt-export-token:token_decode" -H \- 2 - "Accept:application/yaml"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 例如: - curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/external/manifests/secret -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml" - $ curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/external/manifests/secret -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,获取 - type: all清单,如- ConfigMap和- VirtualMachine清单:- curl --cacert cacert.crt <all_manifest_url> -H \ "x-kubevirt-export-token:token_decode" -H \ "Accept:application/yaml" - $ curl --cacert cacert.crt <all_manifest_url> -H \- 1 - "x-kubevirt-export-token:token_decode" -H \- 2 - "Accept:application/yaml"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 例如: - curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/external/manifests/all -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml" - $ curl --cacert cacert.crt https://vmexport-proxy.test.net/api/export.kubevirt.io/v1alpha1/namespaces/example/virtualmachineexports/example-export/external/manifests/all -H "x-kubevirt-export-token:token_decode" -H "Accept:application/yaml"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
后续步骤
- 
							现在,您可以使用导出的清单在目标集群中创建 ConfigMap和VirtualMachine对象。