9.12. 导出虚拟机


导出虚拟机(VM)及其关联的磁盘,将其导入到另一个集群中,或针对另一个用例,如 forensic 卷分析。

您可以使用命令行界面创建一个 VirtualMachineExport 自定义资源 (CR)。

另外,您可以使用 virtctl vmexport 命令创建一个 VirtualMachineExport CR 并下载导出的卷。

注意

您可以使用 Migration Toolkit for Virtualization 在 OpenShift Virtualization 集群间迁移虚拟机。

9.12.1. 创建 VirtualMachineExport 自定义资源

您可以创建一个 VirtualMachineExport 自定义资源 (CR) 从 VirtualMachine,VirtualMachineSnapshot, 或 PersistentVolumeClaim CR 导出持久性卷声明 (PVC)。

您可以导出以下对象:

  • VM:导出指定虚拟机的持久性卷声明。
  • VM 快照:导出 VirtualMachineSnapshot CR 中包含的 PVC。
  • PVC :导出 PVC。如果 PVC 被另一个 pod (如 virt-launcher pod)使用,则导出会一直处于 Pending 状态,直到 PVC 不再使用为止。

VirtualMachineExport CR 为导出的卷创建内部和外部链接。内部链接在集群中有效。可以使用 IngressRoute 访问外部链接。

导出服务器支持以下文件格式:

  • raw: 原始磁盘镜像文件。
  • gzip :压缩的磁盘镜像文件.
  • dir :PVC 目录和文件。
  • tar.gz :压缩的 PVC 文件。

先决条件

  • 必须为虚拟机导出关闭虚拟机。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 创建一个 VirtualMachineExport 清单,根据以下示例从 VirtualMachineVirtualMachineSnapshotPersistentVolumeClaim CR 导出卷,并将它保存为 example-export.yaml

    VirtualMachineExport 示例:

    apiVersion: export.kubevirt.io/v1beta1
    kind: VirtualMachineExport
    metadata:
      name: example-export
    spec:
      source:
        apiGroup: "kubevirt.io"
        kind: VirtualMachine
        name: example-vm
      ttlDuration: 1h
    • spec.source.apiGroup 定义您要导出的资源的 API 组:

      • "kubevirt.io" 用于 VirtualMachine
      • 对于 VirtualMachineSnapshot,使用 "snapshot.kubevirt.io "。
      • "" 用于 PersistentVolumeClaim
    • spec.source.kind 定义导出的数据源。此字段有三个主要值:

      • VirtualMachine
      • VirtualMachineSnapshot
      • PersistentVolumeClaim
    • spec.ttlDuration 定义导出资源自动删除前的时间长度。默认值为 2 小时。
  2. 创建 VirtualMachineExport CR:

    $ oc create -f example-export.yaml
  3. 获取 VirtualMachineExport CR:

    $ oc get vmexport example-export -o yaml

    导出的卷的内部和外部链接显示在 status 小节中:

    输出示例:

    apiVersion: export.kubevirt.io/v1beta1
    kind: VirtualMachineExport
    metadata:
      name: example-export
      namespace: example
    spec:
      source:
        apiGroup: ""
        kind: PersistentVolumeClaim
        name: example-pvc
      tokenSecretRef: example-token
    status:
      conditions:
      - lastProbeTime: null
        lastTransitionTime: "2022-06-21T14:10:09Z"
        reason: podReady
        status: "True"
        type: Ready
      - lastProbeTime: null
        lastTransitionTime: "2022-06-21T14:09:02Z"
        reason: pvcBound
        status: "True"
        type: PVCReady
      links:
        external:
          cert: |-
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
          volumes:
          - formats:
            - format: raw
              url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/volumes/example-disk/disk.img
            - format: gzip
              url: https://vmexport-proxy.test.net/api/export.kubevirt.io/v1beta1/namespaces/example/virtualmachineexports/example-export/volumes/example-disk/disk.img.gz
            name: example-disk
        internal:
          cert: |-
            -----BEGIN CERTIFICATE-----
            ...
            -----END CERTIFICATE-----
          volumes:
          - formats:
            - format: raw
              url: https://virt-export-example-export.example.svc/volumes/example-disk/disk.img
            - format: gzip
              url: https://virt-export-example-export.example.svc/volumes/example-disk/disk.img.gz
            name: example-disk
      phase: Ready
      serviceName: virt-export-example-export
    • status.links.external 定义可使用 IngressRoute 从集群外部访问的外部链接。
    • status.links.internal 定义仅在集群内部有效的内部链接。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部