5.3. 迁移虚拟机


您可以通过创建 MTV 自定义资源(CR)从命令行(CLI)迁移虚拟机。

重要

您必须为集群范围的 CR 指定一个名称。

您必须为命名空间范围 CR 指定名称和命名空间。

使用一个或多个开放虚拟设备(OVA)文件作为源提供程序进行迁移是一个技术预览。

重要

使用一个或多个开放虚拟设备(OVA)文件作为源提供程序进行迁移只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的详情,请参考 https://access.redhat.com/support/offerings/techpreview/

注意

使用 OpenStack 源提供程序进行迁移只支持仅使用 Cinder 卷的虚拟机。

先决条件

  • 仅 VMware:在所有集群可以访问的安全 registry 中必须有 VMware Virtual Disk Development Kit(VDDK)镜像。
  • 仅 Red Hat Virtualization (RHV):如果您要迁移带有直接 LUN 磁盘的虚拟机,请确保虚拟机应该运行的节点可以访问后端存储。
注意
  • 与从源供应商 复制到目标 供应商的磁盘镜像不同,LUN会从 源供应商中的 虚拟机分离,然后附加到目标供应商中创建的虚拟机(VM)。
  • 如果需要回退到源供应商,则 LUN 不会在迁移过程中从源供应商中删除。但是,在将 LUN 重新附加到源供应商中的虚拟机之前,请确保目标环境中的虚拟机不会同时使用 LUN,这可能会导致数据崩溃。
  • 不支持迁移光纤通道 LUN。

流程

  1. 为源供应商凭证创建 Secret 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret>
      namespace: <namespace>
      ownerReferences: 
    1
    
        - apiVersion: forklift.konveyor.io/v1beta1
          kind: Provider
          name: <provider_name>
          uid: <provider_uid>
      labels:
        createdForProviderType: <provider_type> 
    2
    
        createdForResourceType: providers
    type: Opaque
    stringData: 
    3
    
      user: <user> 
    4
    
      password: <password> 
    5
    
      insecureSkipVerify: <true/false> 
    6
    
      domainName: <domain_name> 
    7
    
      projectName: <project_name> 
    8
    
      regionName: <region name> 
    9
    
      cacert: | 
    10
    
        <ca_certificate>
      url: <api_end_point> 
    11
    
      thumbprint: <vcenter_fingerprint> 
    12
    
      token: <service_account_bearer_token> 
    13
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    ownerReferences 部分是可选的。
    2
    指定源供应商的类型。允许的值有 ovirt,vsphere,openstack,ova, 和 openshift。当远程系统可以访问时,需要该标签来验证凭证是否正确,并且 RHV 在指定第三方证书时检索 Manager CA 证书。
    3
    OVA 的 stringData 部分有所不同,请注意 Secret 清单的描述信息。
    4
    指定 vCenter 用户、RHV Manager 用户或 OpenStack 用户。
    5
    指定用户密码。
    6
    指定 <true > 来跳过证书验证,这会进行不安全的迁移,然后不需要证书。不安全的迁移意味着传输的数据通过不安全的连接发送,并可能会公开敏感数据。指定 & lt;false& gt; 验证证书。
    7
    仅 OpenStack only:指定域名。
    8
    仅限 OpenStack:指定项目名称。
    9
    仅限 OpenStack:指定 OpenStack 区域的名称。
    10
    仅 RHV 和 OpenStack:对于 RHV,请输入 Manager CA 证书,除非它被第三方证书替代,在这种情况下,请输入 Manager Apache CA 证书。您可以在 https://<engine_host>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA 中检索 Manager CA 证书。对于 OpenStack,请输入用于连接源环境的 CA 证书。当 insecureSkipVerify 被设置为 < true> 时,不使用该证书
    11
    指定 API 端点 URL,例如 https://<vCenter_host>/sdk 用于 vSphere,https://<engine_host>/ovirt-engine/api 用于 RHV,或者 https://<identity_service>/v3 用于 OpenStack。
    12
    仅 VMware:指定 vCenter SHA-1 指纹。
    13
    仅 OpenShift:具有 cluster-admin 特权的服务帐户的令牌。
    注意

    OVA Secret 清单的 stringData 部分如下:

    stringData:
      url: <nfs_server:/nfs_path>
    Copy to Clipboard Toggle word wrap

    其中:
    nfs_server: 创建共享的服务器的 IP 或主机名。
    nfs_path : 存储 OVA 文件的服务器上的路径。

  2. 为源供应商创建 Provider 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: <provider_type> 
    1
    
      url: <api_end_point> 
    2
    
      settings:
        vddkInitImage: <registry_route_or_server_path>/vddk:<tag> 
    3
    
      secret:
        name: <secret> 
    4
    
        namespace: <namespace>
    EOF
    Copy to Clipboard Toggle word wrap
    1
    指定源供应商的类型。允许的值有 ovirt,vsphere,openstack,ova, 和 openshift
    2
    指定 API 端点 URL,例如 https://<vCenter_host>/sdk 用于 vSphere,https://<engine_host>/ovirt-engine/api 用于 RHV,或者 https://<identity_service>/v3 用于 OpenStack。
    3
    仅 VMware:指定您创建的 VDDK 镜像。
    4
    指定供应商 Secret CR 的名称。
  3. 仅限 VMware:创建一个 Host 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Host
    metadata:
      name: <vmware_host>
      namespace: <namespace>
    spec:
      provider:
        namespace: <namespace>
        name: <source_provider> 
    1
    
      id: <source_host_mor> 
    2
    
      ipAddress: <source_network_ip> 
    3
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    指定 VMware Provider CR 的名称。
    2
    指定 VMware 主机的受管对象引用(moRef)。要检索 moRef,请参阅 检索 VMware vSphere moRef
    3
    指定 VMware 迁移网络的 IP 地址。
  4. 创建 NetworkMap 清单来映射源和目标网络:

    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: NetworkMap
    metadata:
      name: <network_map>
      namespace: <namespace>
    spec:
      map:
        - destination:
            name: <network_name>
            type: pod 
    1
    
          source: 
    2
    
            id: <source_network_id> 
    3
    
            name: <source_network_name>
        - destination:
            name: <network_attachment_definition> 
    4
    
            namespace: <network_attachment_definition_namespace> 
    5
    
            type: multus
          source:
            name: <network_attachment_definition> 
    6
    
            namespace: <network_attachment_definition_namespace> 
    7
    
            type: multus 
    8
    
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    Copy to Clipboard Toggle word wrap
    1
    允许的值是 podmultus
    2
    您可以使用 id name 参数来指定源网络。
    3
    指定 VMware 网络 moRef、RHV 网络 UUID 或 OpenStack 网络 UUID。要检索 moRef,请参阅 检索 VMware vSphere moRef
    4
    为每个额外 OpenShift Virtualization 网络指定网络附加定义。
    5
    仅在 类型为 multus 时才需要。指定 OpenShift Virtualization 网络附加定义的命名空间。
    6
    为每个额外 OpenShift Virtualization 网络指定网络附加定义。
    7
    仅在 类型为 multus 时才需要。在这里,命名空间可以使用 namespace 属性指定,或使用构建的名称如下: < network_namespace>/<network_name >。
    8
    仅 OpenShift。
  5. 创建 StorageMap 清单来映射源和目标存储:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: StorageMap
    metadata:
      name: <storage_map>
      namespace: <namespace>
    spec:
      map:
        - destination:
            storageClass: <storage_class>
            accessMode: <access_mode> 
    1
    
          source:
            id: <source_datastore> 
    2
    
        - destination:
            storageClass: <storage_class>
            accessMode: <access_mode>
          source:
            id: <source_datastore>
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    Copy to Clipboard Toggle word wrap
    1
    允许的值有 ReadWriteOnceReadWriteMany
    2
    指定 VMware datastore moRef、RHV 存储域 UUID 或 OpenStack volume_type UUID。例如,f2737930-b567-451a-9ceb-2887f6207009。要检索 moRef,请参阅 检索 VMware vSphere moRef
    注意

    对于 OVA,StorageMap 只能将单个存储(来自 OVA 的所有磁盘都与之关联)映射到目的地上的存储类。因此,存储在 UI 中被称为 "Dummy storage for source provider <provider_name>"。

  6. 可选:在 Plan CR 中指定的阶段创建一个 Hook 清单以在虚拟机中运行自定义代码:

    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Hook
    metadata:
      name: <hook>
      namespace: <namespace>
    spec:
      image: quay.io/konveyor/hook-runner 
    1
    
      playbook: | 
    2
    
        LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv
        YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s
        IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh
        cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr
        bG9hZAoK
    EOF
    Copy to Clipboard Toggle word wrap
    1
    您可以使用默认 hook-runner 镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。
    2
    可选: Base64 编码的 Ansible Playbook。如果指定 playbook,image 必须是 hook-runner
  7. 为迁移创建 Plan 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
    metadata:
      name: <plan> 
    1
    
      namespace: <namespace>
    spec:
      warm: true 
    2
    
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
      map: 
    3
    
        network: 
    4
    
          name: <network_map> 
    5
    
          namespace: <namespace>
        storage: 
    6
    
          name: <storage_map> 
    7
    
          namespace: <namespace>
      targetNamespace: <target_namespace>
      vms: 
    8
    
        - id: <source_vm> 
    9
    
        - name: <source_vm>
          namespace: <namespace> 
    10
    
          hooks: 
    11
    
            - hook:
                namespace: <namespace>
                name: <hook> 
    12
    
              step: <step> 
    13
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    指定 Plan CR 的名称。
    2
    指定迁移是温迁移还是冷迁移。如果您指定了 warm 迁移,且没有为 Migration 清单中的 cutover 参数指定一个值,则只有 precopy 阶段将运行。
    3
    每个计划仅指定一个网络映射和一个存储映射。
    4
    指定网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    5
    指定 NetworkMap CR 的名称。
    6
    即使要迁移的虚拟机没有使用磁盘镜像分配,请指定存储映射。在这种情况下,映射可以为空。
    7
    指定 StorageMap CR 的名称。
    8
    对于 OpenShift Virtualization 以外的所有源供应商,您可以使用 id name 参数来指定源虚拟机。
    仅 OpenShift Virtualization 源供应商:您只能使用 name 参数,而不使用 id. 参数来指定源虚拟机。
    9
    指定 VMware VM moRef、RHV VM UUID 或 OpenStack VM UUID。要检索 moRef,请参阅 检索 VMware vSphere moRef
    10
    仅限 OpenShift Virtualization 源供应商。
    11
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    12
    指定 Hook CR 的名称。
    13
    迁移完成后,允许的值是 PreHook,在迁移计划启动或 PostHook 之前。
  8. 创建运行 Plan CR 的 Migration 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <migration> 
    1
    
      namespace: <namespace>
    spec:
      plan:
        name: <plan> 
    2
    
        namespace: <namespace>
      cutover: <cutover_time> 
    3
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    指定 Migration CR 的名称。
    2
    指定正在运行的 Plan CR 的名称。Migration CR 为每个迁移的虚拟机创建一个 VirtualMachine CR。
    3
    可选:指定 ISO 8601 格式的大约带有 UTC 时间偏移的时间,例如 2021-04-04T01:23:45.678+09:00

    您可以将多个 Migration CR 与一个 Plan CR 关联。如果迁移没有完成,您可以在不更改 Plan CR 的情况下创建新的 Migration CR,以迁移剩余的虚拟机。

  9. 检索 Migration CR 以监控迁移的进度:

    $ oc get migration/<migration> -n <namespace> -o yaml
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat