10.9. 导出虚拟机
您可以导出虚拟机 (VM) 及其关联的磁盘,以将虚拟机导入到另一个集群或分析卷以备备目的。
您可以使用命令行界面创建一个 VirtualMachineExport
自定义资源 (CR)。
另外,您可以使用 virtctl vmexport
命令创建一个 VirtualMachineExport
CR 并下载导出的卷。
您可以使用 Migration Toolkit for Virtualization 在 OpenShift Virtualization 集群间迁移虚拟机。
10.9.1. 创建 VirtualMachineExport 自定义资源 复制链接链接已复制到粘贴板!
您可以创建一个 VirtualMachineExport
自定义资源 (CR) 来导出以下对象:
- 虚拟机 (VM):导出指定虚拟机的持久性卷声明 (PVC)。
-
VM 快照:导出
VirtualMachineSnapshot
CR 中包含的 PVC。 -
PVC :导出 PVC。如果 PVC 被另一个 pod (如
virt-launcher
pod)使用,则导出会一直处于Pending
状态,直到 PVC 不再使用为止。
VirtualMachineExport
CR 为导出的卷创建内部和外部链接。内部链接在集群中有效。可以使用 Ingress
或 Route
访问外部链接。
导出服务器支持以下文件格式:
-
raw
: 原始磁盘镜像文件。 -
gzip
:压缩的磁盘镜像文件. -
dir
:PVC 目录和文件。 -
tar.gz
:压缩的 PVC 文件。
先决条件
- 必须为虚拟机导出关闭虚拟机。
-
已安装 OpenShift CLI(
oc
)。
流程
创建一个
VirtualMachineExport
清单,根据以下示例从VirtualMachine
、VirtualMachineSnapshot
或PersistentVolumeClaim
CR 导出卷,并将其保存为example-export.yaml
:VirtualMachineExport
示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
VirtualMachineExport
CR:oc create -f example-export.yaml
$ oc create -f example-export.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取
VirtualMachineExport
CR: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
10.9.2. 访问导出的虚拟机清单 复制链接链接已复制到粘贴板!
导出虚拟机 (VM) 或快照后,您可以从导出服务器获取 VirtualMachine
清单和相关信息。
先决条件
-
已安装 OpenShift CLI(
oc
)。 您可以通过创建一个
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/v1beta1/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/v1beta1/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/v1beta1/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/v1beta1/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
对象。