安装并使用 Migration Toolkit for Virtualization


Migration Toolkit for Virtualization 2.8

从 VMware vSphere 或 Red Hat Virtualization 迁移到 Red Hat OpenShift Virtualization

Red Hat Modernization and Migration Documentation Team

摘要

Migration Toolkit for Virtualization (MTV)可让您将虚拟机从 VMware vSphere、Red Hat Virtualization 或 OpenStack 迁移到在 Red Hat OpenShift 上运行的 OpenShift Virtualization。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息

第 1 章 关于 Migration Toolkit for Virtualization

您可以使用 Migration Toolkit for Virtualization (MTV)将虚拟机从以下源供应商迁移到 OpenShift Virtualization 目的地供应商:

  • VMware vSphere
  • Red Hat Virtualization(RHV)
  • OpenStack
  • 由 VMware vSphere 创建的开放虚拟设备(OVAs)
  • 远程 OpenShift Virtualization 集群

第 2 章 MTV 冷迁移和温迁移简介

冷迁移是将 已关闭 的虚拟机(VM)迁移到单独的主机。虚拟机已关闭,不需要常见的共享存储。

温迁移是将 开启 的虚拟机迁移到单独的主机。源主机状态克隆到目标主机。

温迁移预复制阶段

  1. 创建正在运行的虚拟机磁盘的初始快照。
  2. 将第一个快照复制到目标:全磁盘传输,复制的数据量。需要更长的时间来完成。
  3. Copy deltas:更改的数据,仅复制自上次快照后更改的数据。完成需要较少的时间。

    1. 创建新快照。
    2. 在上一个快照和新快照之间复制 delta。
    3. 在上一次快照完成后,调度下一个快照,默认可配置快照。
  4. 可以复制任意数量的 deltas。

温迁移 cutover 阶段

  1. 计划完成温迁移的时间
  2. 关闭源虚拟机。
  3. 将最终快照 delta 复制到目标。
  4. 继续的方式与冷迁移相同

    1. 客户机转换
    2. 启动目标虚拟机(可选)

2.1. 迁移速度比较

  • 观察到的温迁移单磁盘传输和磁盘转换速度与冷迁移大约相同。
  • 温迁移的好处是,在虚拟机 开机 时在后台进行快照传输。
  • 默认快照时间每 60 分钟进行一次。如果虚拟机发生很大变化,则需要在虚拟机关闭时传输的数据超过冷迁移。
  • 截止时间,意味着 VM 和最后一个快照传输的关闭取决于虚拟机自上次快照起发生了多少变化。

2.2. 关于冷迁移和温迁移

MTV 支持从以下位置进行冷迁移:

  • VMware vSphere
  • Red Hat Virtualization(RHV)
  • OpenStack
  • 远程 OpenShift Virtualization 集群

MTV 支持从 VMware vSphere 和 RHV 进行温迁移。

2.2.1. 冷迁移

冷迁移是默认的迁移类型。源虚拟机会在复制数据期间被关闭。

注意

仅 VMware:在冷迁移中,在迁移期间无法使用软件包管理器的情况,MTV 不会在迁移的虚拟机上安装 qemu-guest-agent 守护进程。这对迁移的虚拟机的功能有一定影响,但总体上仍可以正常工作。

要启用 MTV 在迁移的虚拟机上自动安装 qemu-guest-agent,请确保您的软件包管理器可在迁移后首次引导虚拟机期间安装守护进程。

如果无法安装它,请使用您首选的自动或手动过程来手动安装 qemu-guest-agent

2.2.2. 温迁移

在源虚拟机 (VM) 正在运行时,大多数数据都会在 precopy 阶段复制。

然后,虚拟机将关闭,并在 cutover 阶段复制剩余的数据。

复制前(Precopy)阶段

在 precopy 阶段不会关闭虚拟机。

VM 磁盘通过更改 的块跟踪(CBT) 快照逐步复制。默认情况下,快照以一小时的间隔创建。您可以通过更新 forklift-controller 部署来更改快照间隔。

重要

您必须为每个源虚拟机和每个虚拟机磁盘启用 CBT。

虚拟机可以最多支持 28 CBT 快照。如果源虚拟机有太多 CBT 快照,且 Migration Controller 服务无法创建新快照,则温迁移可能会失败。当不再需要快照时,Migration Controller 服务会删除每个快照。

precopy 阶段会运行,直到手动启动了或通过调度启动了 cutover 阶段为止。

cutover 阶段

虚拟机在 cutover 阶段关闭,剩余的数据被迁移。存储在 RAM 中的数据不会迁移。

您可以使用 MTV 控制台手动启动 cutover 阶段,或者在 Migration 清单中调度剪切时间。

2.2.3. 冷迁移和温迁移的优点和缺陷

下表对冷迁移和温迁移的优点和缺点提供了更详细的描述。它假设您已在安装了 MTV 的 Red Hat OpenShift 平台上安装了 Red Hat Enterprise Linux (RHEL) 9:

表 2.1. 冷迁移和温迁移的优点和缺陷
 冷迁移温迁移

Duration

与磁盘上的数据数量相关联。每个块都会被复制一次。

与磁盘和虚拟机利用率上的数据数量相关联。块可以多次复制。

快速故障

转换,然后传输。每个虚拟机都会转换为与 OpenShift 兼容,如果转换成功,则传输虚拟机。如果无法转换虚拟机,迁移会立即失败。

转让,然后转换。对于每个虚拟机,MTV 都会创建一个快照并将其传送到 Red Hat OpenShift。当您启动 cutover 时,MTV 会创建最后一个快照,传输它,然后转换虚拟机。

工具

virt-v2v (Red Hat Enterprise Linux 9),用于将虚拟机从外部管理程序转换为在基于内核的虚拟机(KVM)上运行。

容器化数据导入器(CDI)、持久性存储管理附加组件和 virt-v2v (Red Hat Enterprise Linux 9)

传输的数据

所有磁盘的大约总和

所有磁盘和虚拟机利用率的大约总和

VM 停机时间

High:虚拟机关闭,磁盘传输。

Low :在后台传输磁盘。虚拟机在 cutover 阶段关闭,剩余的数据被迁移。存储在 RAM 中的数据不会迁移。

parallelism

每个虚拟机按顺序传输磁盘。对于远程迁移,磁盘会并行传输。 [a]

磁盘由不同的 pod 并行传输。

连接使用

仅在磁盘传输过程中保持与 Source 的连接。

在磁盘传输过程中保留与 Source 的连接,但连接会在快照之间释放。

工具

仅 MTV。

来自 OpenShift Virtualization 的 MTV 和 CDI。

[a] 远程迁移:没有安装 MTV 的目标环境。使用 CDI 迁移到远程环境。
注意

前面的表描述了因为 warm 迁移的主要优点而运行的虚拟机的情况会减少,且对虚拟机的启动温迁移没有原因。但是,为停机的虚拟机执行温迁移与冷迁移不同,即使 MTV 使用 virt-v2v 和 RHEL 9。对于停机的虚拟机,MTV 使用 CDI 传输磁盘,这与冷迁移不同。

注意

从 VMware 导入时,还有额外的因素会影响迁移速度,如与 ESXi、vSphere. 或 VDDK 相关的限制。

2.2.3.1. 结论

根据前面的信息,我们可以对冷迁移和温迁移进行以下总结:

  • 可以使用 warm 迁移来实现虚拟机最短的停机时间。
  • 使用冷迁移可以实现在单个磁盘上具有大量数据的虚拟机最短持续时间。
  • 使用 warm 迁移可以实现在多个磁盘间平均分布的虚拟机的最短持续时间。

第 3 章 先决条件

查看以下先决条件,以确保您的环境为迁移准备。

3.1. 软件要求

Migration Toolkit for Virtualization (MTV)需要对所有供应商的软件要求以及每个供应商的特定软件要求。

3.1.1. 所有提供商的软件要求

您必须安装 兼容版本的 Red Hat OpenShift 和 OpenShift Virtualization。

3.2. 存储支持和默认模式

Migration Toolkit for Virtualization (MTV)对支持的存储使用以下默认卷和访问模式。

表 3.1. 默认卷和访问模式
Provisioner卷模式访问模式

kubernetes.io/aws-ebs

Block

ReadWriteOnce

kubernetes.io/azure-disk

Block

ReadWriteOnce

kubernetes.io/azure-file

Filesystem

ReadWriteMany

kubernetes.io/cinder

Block

ReadWriteOnce

kubernetes.io/gce-pd

Block

ReadWriteOnce

kubernetes.io/hostpath-provisioner

Filesystem

ReadWriteOnce

manila.csi.openstack.org

Filesystem

ReadWriteMany

openshift-storage.cephfs.csi.ceph.com

Filesystem

ReadWriteMany

openshift-storage.rbd.csi.ceph.com

Block

ReadWriteOnce

kubernetes.io/rbd

Block

ReadWriteOnce

kubernetes.io/vsphere-volume

Block

ReadWriteOnce

注意

如果 OpenShift Virtualization 存储不支持 动态置备,您必须应用以下设置:

  • 文件系统卷模式

    文件系统卷模式比 Block 卷模式慢。

  • ReadWriteOnce 访问模式

    ReadWriteOnce 访问模式不支持实时迁移。

有关编辑存储配置集的详情,请参阅启用静态置备的存储类

注意

如果您的迁移使用块存储和持久性卷,使用 EXT4 文件系统创建的持久性卷,请将 CDI 中的文件系统开销增加到大于 10%。CDI 假设的默认开销不会完全包括 root 分区保留的位置。如果您没有增加 CDI 中的文件系统开销,您的迁移可能会失败。

注意

从 OpenStack 迁移时,或者运行从 Red Hat Virtualization 迁移到部署 MTV 的 Red Hat OpenShift 集群时,迁移会在没有 CDI 的情况下分配持久性卷。在这些情况下,您可能需要调整文件系统开销。

如果配置的文件系统开销(默认值为 10% )太低,则磁盘传输会因为缺少空间而失败。在这种情况下,您要提高文件系统开销。

然而,在某些情况下,您可能需要降低文件系统开销来减少存储消耗。

您可以通过更改 forklift-controller CR 的 spec 部分中的 controller_filesystem_overhead 的值来更改文件系统开销,如 配置 MTV Operator 所述。

3.3. 网络先决条件

以下先决条件适用于所有迁移:

  • 在迁移之前或期间不得更改 IP 地址、VLAN 和其他网络配置设置。在迁移过程中保留虚拟机的 MAC 地址。
  • 源环境、OpenShift Virtualization 集群和复制存储库之间的网络连接必须可靠且不会中断。
  • 如果要映射多个源和目标网络,您必须为每个额外目标网络创建一个 网络附加定义

3.3.1. 端口

防火墙必须启用以下端口的流量:

表 3.2. 从 VMware vSphere 迁移所需的网络端口
端口协议目的地目的

443

TCP

OpenShift 节点

VMware vCenter

VMware 供应商清单

磁盘传输身份验证

443

TCP

OpenShift 节点

VMware ESXi 主机

磁盘传输身份验证

902

TCP

OpenShift 节点

VMware ESXi 主机

磁盘传输数据复制

表 3.3. 从 Red Hat Virtualization 迁移所需的网络端口
端口协议目的地目的

443

TCP

OpenShift 节点

RHV Engine

RHV 供应商清单

磁盘传输身份验证

54322

TCP

OpenShift 节点

RHV 主机

磁盘传输数据复制

3.4. 源虚拟机先决条件

以下先决条件适用于所有迁移:

  • ISO 镜像和 CD-ROM 已被卸载。
  • 每个 NIC 均包含 IPv4 地址或 IPv6 地址,但 NIC 可能同时使用两者。
  • 每个虚拟机的操作系统都经过认证,并作为客户机操作系统进行转换。
注意

您可以使用 virt-v2v 来引用将虚拟机从其他 hypervisor 转换到 KVM 中的表, 以检查操作系统是否被支持。请参阅 RHEL 8 主机和 RHEL 9 主机的表列。

  • 要使用 MTV 2.6.z 迁移的虚拟机在 RHEL 8 上运行。
  • 要使用 MTV 2.7.z 迁移的虚拟机在 RHEL 9 中运行。
  • 虚拟机的名称不得包含句点(.)。Migration Toolkit for Virtualization (MTV)将虚拟机名称中的任何句点改为短划线(-)。
  • 虚拟机的名称不能与 OpenShift Virtualization 环境中的任何其他虚拟机相同。

    警告

    MTV 对双引导操作系统虚拟机迁移的支持有限。

    对于双引导操作系统虚拟机,MTV 将尝试转换它找到的第一个引导磁盘。或者,也可以在 MTV UI 中指定 root 设备。

    警告

    对于运行 Microsoft Windows 的虚拟机(VM),使用客户机虚拟机中的 Volume Shadow Copy Service (VSS)来静止文件系统和应用程序。 

    从 VMware 执行 Microsoft Windows 虚拟机的温迁移时,您必须在 Windows 客户机操作系统上启动 VSS,以便快照和 Quiesce guest 文件系统 才能成功。

    如果您没有在 Windows 客户机操作系统上启动 VSS,则 Warm 迁移期间的快照创建会失败并显示以下错误:

    Copy to Clipboard Toggle word wrap
    An error occurred while taking a snapshot: Failed to restart the virtual machine

    如果将 VSS 服务设为 Manual,并使用 Quiesce guest 文件系统 = yes 来启动快照创建。在后台,VMware Snapshot 提供者服务请求 VSS 启动影子副本。

    注意

    Migration Toolkit for Virtualization 会自动为不遵循规则的虚拟机分配新名称。

    Migration Toolkit for Virtualization 在自动生成新虚拟机名称时进行以下更改:

    • 排除的字符被删除。
    • 大写字母切换到小写字母。
    • 所有下划线 (_) 都被更改为短划线 (-)。

    此功能允许迁移平稳进行,即使某人输入了未遵循规则的虚拟机名称。

启用安全引导的虚拟机可能无法自动迁移

启用安全引导的虚拟机(VM)目前可能无法自动迁移。这是因为安全引导(Secure Boot)是由 PC 行业成员开发的安全标准,以确保设备仅使用原始 Equipment Manufacturer (OEM)信任的软件引导,可防止虚拟机在目的地提供程序上启动。 

临时解决方案:当前的解决方法是禁用目的地上的安全引导。如需了解更多详细信息,请参阅禁用安全引导(MTV-1548)

无法迁移使用 测量引导的 Windows 虚拟机

使用 测量引导 功能的 Microsoft Windows 虚拟机(VM)无法迁移,因为测量引导是通过检查每个启动组件(包括固件)来阻止任何类型的设备更改的机制,包括固件。

迁移的替代方案是在 OpenShift Virtualization 上直接重新创建 Windows 虚拟机。

3.5. Red Hat Virtualization 的先决条件

以下先决条件适用于 Red Hat Virtualization 迁移:

  • 要创建源供应商,必须至少分配 UserRoleReadOnlyAdmin 角色。这些是最低所需的权限,但任何其他管理员或超级用户权限也会正常工作。
重要

您必须保留 UserRoleReadOnlyAdmin 角色,直到源提供程序的虚拟机被迁移为止。否则,迁移将失败。

  • 迁移虚拟机:

    • 您必须有以下之一:

      • RHV admin 权限。这些权限允许您迁移系统中的任何虚拟机。
      • 在您要迁移的每个虚拟机上的 DiskCreatorUserVmManager 权限。
    • 您必须使用兼容版本的 Red Hat Virtualization。
    • 您必须有 Manager CA 证书,除非被第三方证书替代,在这种情况下,指定 Manager Apache CA 证书。

      您可以在浏览器中进入到 https://<engine_host>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA 来获取 Manager CA 证书。

    • 如果您要迁移使用直接 LUN 磁盘的虚拟机,请确保虚拟机应在 OpenShift Virtualization 目标集群中运行的节点可以访问后端存储。
注意
  • 与从源提供程序 复制到目标 提供程序的磁盘镜像不同,LUN会从 源提供程序中的 虚拟机分离,然后附加到目标提供程序中创建的虚拟机(VM)。
  • 在迁移过程中,当需要回退到源供应商时,不会从源供应商中删除 LUN。但是,在将 LUN 重新附加到源供应商中的虚拟机之前,请确保目标环境中的虚拟机不会同时使用 LUN,这可能会导致数据崩溃。

3.6. OpenStack 先决条件

以下先决条件适用于 OpenStack 迁移:

3.6.1. 使用 OpenStack 源提供程序迁移的其他验证方法

MTV 版本 2.6 及之后的版本除了标准用户名和密码凭证集外,还支持使用 OpenStack 源供应商的以下验证方法进行迁移:

  • 令牌身份验证
  • 应用程序凭证身份验证

除了准备 Secret 清单外,您可以使用这些方法,以与迁移其他虚拟机相同的方式,使用 OpenStack 源提供程序迁移虚拟机。

3.6.1.1. 将令牌身份验证与 OpenStack 源提供程序搭配使用

在创建 OpenStack 源提供程序时,您可以使用令牌身份验证而不是用户名和密码身份验证。

MTV 支持以下令牌身份验证类型:

  • 带有用户 ID 的令牌
  • 使用用户名的令牌

对于每种令牌身份验证,您需要使用 OpenStack 中的数据来创建 Secret 清单。

先决条件

具有 OpenStack 帐户。

流程

  1. 在 OpenStack web 控制台的仪表板中,点 Project > API Access
  2. 展开 Download OpenStack RC 文件,然后点 OpenStack RC 文件

    下载的文件(这里称为 < openstack_rc_file > )包括用于令牌身份验证的以下字段:

    Copy to Clipboard Toggle word wrap
    OS_AUTH_URL
    OS_PROJECT_ID
    OS_PROJECT_NAME
    OS_DOMAIN_NAME
    OS_USERNAME
  3. 要获取令牌身份验证所需的数据,请运行以下命令:

    Copy to Clipboard Toggle word wrap
    $ openstack token issue

    此处的输出称为 < openstack_token_output >,其中包含了使用带有用户 ID 的令牌 进行身份验证所需的令牌、userID 和 projectID

  4. 创建类似如下的 Secret 清单:

    • 使用带有用户 ID 的令牌进行身份验证:

      Copy to Clipboard Toggle word wrap
      cat << EOF | oc apply -f -
      apiVersion: v1
      kind: Secret
      metadata:
        name: openstack-secret-tokenid
        namespace: openshift-mtv
        labels:
          createdForProviderType: openstack
      type: Opaque
      stringData:
        authType: token
        token: <token_from_openstack_token_output>
        projectID: <projectID_from_openstack_token_output>
        userID: <userID_from_openstack_token_output>
        url: <OS_AUTH_URL_from_openstack_rc_file>
      EOF
    • 使用令牌及用户名进行身份验证:

      Copy to Clipboard Toggle word wrap
      cat << EOF | oc apply -f -
      apiVersion: v1
      kind: Secret
      metadata:
        name: openstack-secret-tokenname
        namespace: openshift-mtv
        labels:
          createdForProviderType: openstack
      type: Opaque
      stringData:
        authType: token
        token: <token_from_openstack_token_output>
        domainName: <OS_DOMAIN_NAME_from_openstack_rc_file>
        projectName: <OS_PROJECT_NAME_from_openstack_rc_file>
        username: <OS_USERNAME_from_openstack_rc_file>
        url: <OS_AUTH_URL_from_openstack_rc_file>
      EOF
3.6.1.2. 将应用凭证身份验证与 OpenStack 源提供程序搭配使用

在创建 OpenStack 源提供程序时,您可以使用应用凭据身份验证而不是用户名和密码身份验证。

MTV 支持以下应用程序凭证身份验证类型:

  • 应用程序凭证 ID
  • 应用程序凭证名称

对于每种类型的应用程序凭证身份验证,您需要使用 OpenStack 中的数据来创建 Secret 清单。

先决条件

您有一个 OpenStack 帐户。

流程

  1. 在 OpenStack web 控制台的仪表板中,点 Project > API Access
  2. 展开 Download OpenStack RC 文件,然后点 OpenStack RC 文件

    下载的文件(这里称为 < openstack_rc_file& gt; )包括用于应用程序凭证身份验证的以下字段:

    Copy to Clipboard Toggle word wrap
    OS_AUTH_URL
    OS_PROJECT_ID
    OS_PROJECT_NAME
    OS_DOMAIN_NAME
    OS_USERNAME
  3. 要获取应用程序凭证身份验证所需的数据,请运行以下命令:

    Copy to Clipboard Toggle word wrap
    $ openstack application credential create --role member --role reader --secret redhat forklift

    此处的输出称为 < openstack_credential_output >,其中包括:

    • 使用应用程序凭证 ID 进行身份验证所需的 idsecret
    • 使用应用程序凭证 名称 进行身份验证所需的名称和 secret
  4. 创建类似如下的 Secret 清单:

    • 使用应用程序凭证 ID 进行身份验证:

      Copy to Clipboard Toggle word wrap
      cat << EOF | oc apply -f -
      apiVersion: v1
      kind: Secret
      metadata:
        name: openstack-secret-appid
        namespace: openshift-mtv
        labels:
          createdForProviderType: openstack
      type: Opaque
      stringData:
        authType: applicationcredential
        applicationCredentialID: <id_from_openstack_credential_output>
        applicationCredentialSecret: <secret_from_openstack_credential_output>
        url: <OS_AUTH_URL_from_openstack_rc_file>
      EOF
    • 使用应用程序凭证名称进行身份验证:

      Copy to Clipboard Toggle word wrap
      cat << EOF | oc apply -f -
      apiVersion: v1
      kind: Secret
      metadata:
        name: openstack-secret-appname
        namespace: openshift-mtv
        labels:
          createdForProviderType: openstack
      type: Opaque
      stringData:
        authType: applicationcredential
        applicationCredentialName: <name_from_openstack_credential_output>
        applicationCredentialSecret: <secret_from_openstack_credential_output>
        domainName: <OS_DOMAIN_NAME_from_openstack_rc_file>
        username: <OS_USERNAME_from_openstack_rc_file>
        url: <OS_AUTH_URL_from_openstack_rc_file>
      EOF

3.7. VMware 的先决条件

强烈建议创建 VDDK 镜像来加快迁移。如需更多信息,请参阅创建 VDDK 镜像

警告

当虚拟机由 VMware vSAN 支持时,虚拟机(VM)迁移在没有 VDDK 的情况下无法正常工作。

以下先决条件适用于 VMware 迁移:

警告

对于运行 Microsoft Windows 的虚拟机(VM),使用客户机虚拟机中的 Volume Shadow Copy Service (VSS)来静止文件系统和应用程序。 

从 VMware 执行 Microsoft Windows 虚拟机的温迁移时,您必须在 Windows 客户机操作系统上启动 VSS,以便快照和 Quiesce guest 文件系统 才能成功。

如果您没有在 Windows 客户机操作系统上启动 VSS,则 Warm 迁移期间的快照创建会失败并显示以下错误:

Copy to Clipboard Toggle word wrap
An error occurred while taking a snapshot: Failed to restart the virtual machine

如果将 VSS 服务设为 Manual,并使用 Quiesce guest 文件系统 = yes 来启动快照创建。在后台,VMware Snapshot 提供者服务请求 VSS 启动影子副本。

重要

如果出现电源中断,则禁用休眠的虚拟机可能会丢失数据。但是,如果没有禁用休眠功能,迁移将失败。

注意

MTV 和 OpenShift Virtualization 都不支持转换 Btrfs,用于从 VMWare 迁移虚拟机。

3.7.1. VMware 权限

要使用 Migration Toolkit for Virtualization (MTV) 将虚拟机迁移到 OpenShift Virtualization 需要以下最小 VMware 权限集合。

表 3.4. VMware 权限
特权描述

Virtual machine.Interaction 权限:

Virtual machine.Interaction.Power Off

允许关闭一个已启动的虚拟机。此操作关闭客户端操作系统。

Virtual machine.Interaction.Power On

允许打开已关闭的虚拟机并恢复暂停的虚拟机。

Virtual machine.Guest operating system management by VIX API

允许通过 VMware VIX API 管理虚拟机。

Virtual machine.Provisioning 权限:

注意

需要所有 Virtual machine.Provisioning 权限。

Virtual machine.Provisioning.Allow disk access

允许在虚拟机上打开磁盘以实现随机读写访问。主要用于远程磁盘挂载。

Virtual machine.Provisioning.Allow file access

允许操作与虚拟机相关的文件,包括 VMX、磁盘、日志和 NVRAM。

Virtual machine.Provisioning.Allow read-only disk access

允许在虚拟机上打开一个磁盘以实现随机读取访问。主要用于远程磁盘挂载。

Virtual machine.Provisioning.Allow virtual machine download

允许对与虚拟机关联的文件读取操作,包括 VMX、磁盘、日志和 NVRAM。

Virtual machine.Provisioning.Allow virtual machine files upload

允许对与虚拟机关联的文件写操作,包括 VMX、磁盘、日志和 NVRAM。

Virtual machine.Provisioning.Clone template

允许克隆模板。

Virtual machine.Provisioning.Clone virtual machine

允许克隆现有虚拟机并分配资源。

Virtual machine.Provisioning.Create template from virtual machine

允许从虚拟机创建新模板。

Virtual machine.Provisioning.Customize guest

允许自定义虚拟机的客户机操作系统,而无需移动虚拟机。

Virtual machine.Provisioning.Deploy template

允许从模板部署虚拟机。

Virtual machine.Provisioning.Mark as template

允许将现有的关机虚拟机标记为模板。

Virtual machine.Provisioning.Mark as virtual machine

允许将现有模板标记为虚拟机。

Virtual machine.Provisioning.Modify customization specification

允许创建、修改或删除自定义规格。

Virtual machine.Provisioning.Promote disks

允许对虚拟机磁盘提升操作。

Virtual machine.Provisioning.Read customization specifications

允许读取自定义规格。

Virtual machine.Snapshot management 权限:

Virtual machine.Snapshot management.Create snapshot

允许从虚拟机当前状态创建快照。

Virtual machine.Snapshot management.Remove Snapshot

允许从快照历史记录中移除快照。

数据存储 权限:

Datastore.Browse datastore

允许探索数据存储内容。

Datastore.Low 级别文件操作

允许执行低级别文件操作 - 数据存储中的读取、写入、删除和重命名 -。

会话 权限:

sessions.Validate session

允许验证会话的有效性。

加密 权限 :

encryption.Decrypt

允许解密加密的虚拟机。

encryption.Direct access

允许访问加密资源。

提示

使用上表中描述的权限在 VMware 中创建一个角色,然后将此角色应用到 Inventory 部分,如 创建 VMware 角色以应用 MTV 权限中所述

3.7.2. 创建 VMware 角色以授予 MTV 权限

您可以在 VMware 中创建角色,为 Migration Toolkit for Virtualization (MTV)授予特权,然后向具有该角色的用户授予这些特权。

以下过程解释了如何一般执行此操作。具体步骤请查看 VMware 文档。

流程

  1. 在 vCenter Server UI 中,创建一个角色,其中包含 VMware 先决条件 中表中描述的权限集。
  2. 在 vSphere 清单 UI 中,在以下级别之一为具有此角色的用户授予权限到适当的 vSphere 逻辑对象:

    1. 在用户或组级别:将特权分配给数据中心中的适当逻辑对象,并使用 Propagate to child objects 选项。
    2. 在对象级别:将相同的角色单独应用到迁移中涉及的所有相关 vSphere 逻辑对象,如主机、vSphere 集群、数据中心或网络。

3.7.3. 创建 VDDK 镜像

强烈建议您在从 VMware vSphere 传输虚拟磁盘时与 VMware Virtual Disk Development Kit (VDDK) SDK 一起使用。

注意

强烈建议创建 VDDK 镜像,虽然是可选的。不建议在没有 VDDK 的情况下使用 MTV,可能会导致迁移速度显著降低。

要使用这个功能,您可以下载 VMware Virtual Disk Development Kit (VDDK),构建 VDDK 镜像,并将 VDDK 镜像推送到您的镜像 registry。

VDDK 软件包包含符号链接,因此必须在保留符号链接(symlinks)的文件系统上执行 VDDK 镜像的步骤。

注意

在公共 registry 中存储 VDDK 镜像可能会违反 VMware 许可证条款。

先决条件

  • Red Hat OpenShift 镜像 registry
  • 已安装 podman
  • 您正在处理保留符号链接(symlinks)的文件系统。
  • 如果使用外部 registry,OpenShift Virtualization 必须能够访问它。

流程

  1. 创建并导航到临时目录:

    Copy to Clipboard Toggle word wrap
    $ mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
  2. 在浏览器中,导航到 VMware VDDK 版本 8 下载页面
  3. 选择版本 8.0.1 并点 Download
注意

要迁移到 OpenShift Virtualization 4.12,请从 VMware VDDK 版本 7 下载页面下载 VDDK 版本 7.0.3.2。

  1. 将 VDDK 归档文件保存到临时目录中。
  2. 提取 VDDK 归档:

    Copy to Clipboard Toggle word wrap
    $ tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
  3. 创建 Dockerfile

    Copy to Clipboard Toggle word wrap
    $ cat > Dockerfile <<EOF
    FROM registry.access.redhat.com/ubi8/ubi-minimal
    USER 1001
    COPY vmware-vix-disklib-distrib /vmware-vix-disklib-distrib
    RUN mkdir -p /opt
    ENTRYPOINT ["cp", "-r", "/vmware-vix-disklib-distrib", "/opt"]
    EOF
  4. 构建 VDDK 镜像:

    Copy to Clipboard Toggle word wrap
    $ podman build . -t <registry_route_or_server_path>/vddk:<tag>
  5. 将 VDDK 镜像推送到 registry:

    Copy to Clipboard Toggle word wrap
    $ podman push <registry_route_or_server_path>/vddk:<tag>
  6. 确保镜像可以被 OpenShift Virtualization 环境访问。

3.7.4. 增加 ESXi 主机的 NFC 服务内存

如果您要从同一迁移计划中的 ESXi 主机迁移超过 10 个虚拟机,您必须增加主机的 NFC 服务内存。否则,迁移将失败,因为 NFC 服务内存限制为 10 个并行连接。

流程

  1. 以 root 用户身份登录 ESXi 主机。
  2. /etc/vmware/hostd/config.xml 中将 maxMemory 改为 1000000000:

    Copy to Clipboard Toggle word wrap
    ...
          <nfcsvc>
             <path>libnfcsvc.so</path>
             <enabled>true</enabled>
             <maxMemory>1000000000</maxMemory>
             <maxStreamMemory>10485760</maxStreamMemory>
          </nfcsvc>
    ...
  3. 重启 hostd

    Copy to Clipboard Toggle word wrap
    # /etc/init.d/hostd restart

    您不需要重启主机。

3.7.5. VDDK 验证器容器需要请求和限值

如果设置了集群或项目资源配额,您必须确保您有足够的配额用于 MTV pod 来执行迁移。 

您可以查看默认值,您可以在 ForkliftController 自定义资源(CR)中覆盖它,如下所示。如果需要,您可以调整这些默认值。 

这些设置高度取决于您的环境。 如果同时存在许多迁移,并且配额不足为迁移设置,则迁移可能会失败。这也可以与 MAX_VM_INFLIGHT 设置关联,该设置决定了一次迁移了多少 VM/disks。

默认值可以在 ForkliftController CR 中覆盖:

  • 这会影响冷迁移和温迁移:

    对于冷迁移,执行磁盘副本时可能会更大资源密集型。对于温迁移,您可以减少请求。

    • virt_v2v_container_limits_cpu: 4000m
    • virt_v2v_container_limits_memory: 8Gi
    • virt_v2v_container_requests_cpu: 1000m
    • virt_v2v_container_requests_memory: 1Gi

      注意

      使用 virt-v2v 的冷和温迁移可以是资源密集型。如需了解更多详细信息,请参阅 计算电源和 RAM

  • 这会影响任何带有 hook 的迁移:

    • hooks_container_limits_cpu: 1000m
    • hooks_container_limits_memory: 1Gi
    • hooks_container_requests_cpu: 100m
    • hooks_container_requests_memory: 150Mi
  • 这会影响任何 OVA 迁移:

    • ova_container_limits_cpu: 1000m
    • ova_container_limits_memory: 1Gi
    • ova_container_requests_cpu: 100m
    • ova_container_requests_memory: 150Mi

3.8. 开放虚拟设备(OVA)先决条件

以下先决条件适用于开放虚拟设备(OVA)文件迁移:

  • 所有 OVA 文件都由 VMware vSphere 创建。
注意

迁移不是由 VMware vSphere 创建的 OVA 文件,但与 vSphere 兼容可能会成功。但是 MTV 不支持这些文件的迁移。MTV 仅支持 VMware vSphere 创建的 OVA 文件。

  • OVA 文件位于以下结构之一 NFS 共享目录下的一个或多个文件夹中:

    • 在保存所有虚拟机信息的一个或多个压缩 Open Virtualization Format (OVF)软件包中。

      每个压缩的软件包的文件名 都必须具有 .ova 扩展名。可以存储多个压缩的软件包。

      当使用此结构时,MTV 会扫描根文件夹和压缩软件包的第一级子文件夹。

      例如,如果 NFS 共享是 /nfs,则:
      文件夹 /nfs 被扫描。
      文件夹 /nfs/subfolder1 被扫描。
      但是,/nfs/subfolder1/subfolder2 不会被扫描。

    • 在提取的 OVF 软件包中。

      当使用此结构时,MTV 会扫描根文件夹、第一级子文件夹,以及用于提取的 OVF 软件包的第二个级子文件夹。但是,文件夹中只能有一个 .ovf 文件。否则,迁移将失败。

      例如,如果 NFS 共享为 /nfs,则:
      OVF 文件 /nfs.ovf 被扫描。
      OVF 文件 /nfs/subfolder1/vm.ovf 被扫描。
      OVF 文件 /nfs/subfolder1/subfolder2/vm.ovf 被扫描。
      但是,OVF 文件 /nfs/subfolder1/subfolder2/subfolder3/vm.ovf 不会被扫描。

3.9. 软件兼容性指南

您必须安装兼容软件版本。

表 3.5. 兼容软件版本
Migration Toolkit for VirtualizationRed Hat OpenShiftOpenShift VirtualizationVMware vSphereRed Hat VirtualizationOpenStack

2.8

4.18, 4.17, 4.16

4.18, 4.17, 4.16

6.5 或更高版本

4.4 SP1 或更高版本

16.1 或更高版本

从 Red Hat Virtualization 4.3 迁移

MTV 只使用 Red Hat Virtualization (RHV) 4.4 SP1 测试。从 Red Hat Virtualization (RHV) 4.3 迁移没有使用 MTV 2.8 测试。虽然不支持,但从 RHV 4.3 进行基本迁移应该可以正常工作。

在迁移到 OpenShift Virtualization 前,通常建议将 Red Hat Virtualization Manager (RHVM)升级到前面提到的支持版本。

因此,建议在迁移到 OpenShift Virtualization 前将 RHV 升级到上述支持版本。

但是,从 RHV 4.3.11 迁移已使用 MTV 2.3 测试,在很多环境中使用 MTV 2.8 的环境中可以正常工作。在这种情况下,我们建议在迁移到 OpenShift Virtualization 前将 Red Hat Virtualization Manager (RHVM)升级到前面提到的支持版本。

3.9.1. OpenShift Operator 生命周期

有关红帽提供的 Operator 的软件维护生命周期分类的更多信息,请参阅 OpenShift Operator 生命周期

第 4 章 安装和配置 MTV Operator

您可以使用 Red Hat OpenShift Web 控制台或命令行界面(CLI)安装 MTV Operator。

在 Migration Toolkit for Virtualization (MTV)版本 2.4 及更高版本中,MTV Operator 包含 Red Hat OpenShift web 控制台的 MTV 插件。

使用 Red Hat OpenShift Web 控制台或 CLI 安装 MTV Operator 后,您可以配置 Operator。

4.1. 使用 Red Hat OpenShift Web 控制台安装 MTV Operator

您可以使用 Red Hat OpenShift Web 控制台安装 MTV Operator。

先决条件

  • 安装了 Red Hat OpenShift 4.18 或更高版本。
  • 在 OpenShift 迁移目标集群上安装的 OpenShift Virtualization Operator。
  • 您必须以具有 cluster-admin 权限的用户身份登录。

流程

  1. 在 Red Hat OpenShift Web 控制台中,点 OperatorsOperatorHub
  2. 使用 Filter by keyword 字段搜索 mtv-operator
  3. Migration Toolkit for Virtualization Operator,然后点 Install
  4. 当按钮变为 active 时,点 Create ForkliftController
  5. Create

    您的 ForkliftController 会出现在显示的列表中。

  6. WorkloadsPods 来验证 MTV pod 是否正在运行。
  7. OperatorsInstalled Operators 来验证 Migration Toolkit for Virtualization Operator 出现在 openshift-mtv 项目中,状态为 Succeeded

    当插件就绪时,系统将提示您重新加载页面。Migration 菜单项会自动添加到导航栏中,在 Red Hat OpenShift Web 控制台左侧显示。

4.2. 使用命令行界面安装 MTV Operator

您可以使用命令行界面(CLI)安装 MTV Operator。

先决条件

  • 安装了 Red Hat OpenShift 4.18 或更高版本。
  • 在 OpenShift 迁移目标集群上安装的 OpenShift Virtualization Operator。
  • 您必须以具有 cluster-admin 权限的用户身份登录。

流程

  1. 创建 openshift-mtv 项目:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: project.openshift.io/v1
    kind: Project
    metadata:
      name: openshift-mtv
    EOF
  2. 创建名为 migrationOperatorGroup CR:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: migration
      namespace: openshift-mtv
    spec:
      targetNamespaces:
        - openshift-mtv
    EOF
  3. 为 Operator 创建 Subscription CR:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: mtv-operator
      namespace: openshift-mtv
    spec:
      channel: release-v2.8
      installPlanApproval: Automatic
      name: mtv-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      startingCSV: "mtv-operator.v2.8.4"
    EOF
  4. 创建一个 ForkliftController CR:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: ForkliftController
    metadata:
      name: forklift-controller
      namespace: openshift-mtv
    spec:
      olm_managed: true
    EOF
  5. 验证 MTV pod 是否正在运行:

    Copy to Clipboard Toggle word wrap
    $ oc get pods -n openshift-mtv

    输出示例

    Copy to Clipboard Toggle word wrap
    NAME                                                    READY   STATUS    RESTARTS   AGE
    forklift-api-bb45b8db4-cpzlg                            1/1     Running   0          6m34s
    forklift-controller-7649db6845-zd25p                    2/2     Running   0          6m38s
    forklift-must-gather-api-78fb4bcdf6-h2r4m               1/1     Running   0          6m28s
    forklift-operator-59c87cfbdc-pmkfc                      1/1     Running   0          28m
    forklift-ui-plugin-5c5564f6d6-zpd85                     1/1     Running   0          6m24s
    forklift-validation-7d84c74c6f-fj9xg                    1/1     Running   0          6m30s
    forklift-volume-populator-controller-85d5cb64b6-mrlmc   1/1     Running   0          6m36s

4.3. 配置 MTV Operator

您可以通过修改 ForkliftController CR 或 Overview 页面的 Settings 部分来配置 MTV Operator 的所有设置,除非另有说明。

  • Migration Toolkit for Virtualization (MTV)可同时迁移的每个计划的最大虚拟机(VM)或磁盘数量。
  • 在自动删除之前,必须保留收集 报告的时间。
  • 分配给主控制器容器的 CPU 限制。
  • 分配给主控制器容器的内存限值。
  • 在启动温迁移前请求新快照的时间间隔。
  • 在温迁移期间系统检查快照创建和删除状态的频率。
  • storageclass文件系统时,持久性卷中的空间百分比被分配为文件系统开销(仅限ForkliftController CR)。
  • 修复了在持久块卷中分配的额外空间量。此设置适用于任何基于块的存储 (仅限ForkliftController CR)。
  • 操作系统映射到 vSphere 源供应商的首选项(仅限ForkliftController CR)。
  • 将操作系统映射到 Red Hat Virtualization (RHV)源供应商(仅限ForkliftController CR)。
  • 是否保留导入程序 pod,以便 Containerized Data Importer (CDI)不会在迁移期间删除它们(仅限ForkliftController CR)。

使用用户界面配置这些设置的步骤请参考 配置 MTV 设置。通过修改 ForkliftController CR 配置这些设置的步骤如下。

流程

  • 通过添加参数和值来更改 ForkliftController CR 的 spec 部分中的参数值,如下所示:

    Copy to Clipboard Toggle word wrap
    spec:
      parameter: value 
    1
    1
    您可以使用 CLI 配置的参数显示在下表中,以及每个参数及其默认值的描述。
表 4.1. MTV Operator 参数
参数描述默认值

controller_max_vm_inflight

与供应商不同,如下所示:

  • 对于 OVA 或 VMware 迁移以外的所有迁移: MTV 可以同时传输的最大磁盘数。
  • 对于 OVA 迁移: MTV 可同时迁移的最大虚拟机数量。
  • 对于 VMware 迁移,该参数有以下含义:

    • 冷迁移:

      • 本地 OpenShift Virtualization:可以同时迁移的每个 ESXi 主机的虚拟机。
      • 远程 OpenShift Virtualization:可同时迁移的每个 ESXi 主机的磁盘。
    • 温迁移:可同时迁移的每个 ESXi 主机的磁盘。

      如需了解这个参数的详细说明 ,请参阅配置 controller_max_vm_inflight 参数。

20

must_gather_api_cleanup_max_age

保留的持续时间(以小时为单位) 必须在自动删除前收集 报告。

-1 (禁用)

controller_container_limits_cpu

分配给主控制器容器的 CPU 限制。

500m

controller_container_limits_memory

分配给主控制器容器的内存限值。

800Mi

controller_precopy_interval

在启动温迁移前请求新快照的时间间隔(以分钟为单位)。

60

controller_snapshot_status_check_rate_seconds

系统在温迁移期间检查快照创建和删除状态的频率(以秒为单位)。

10

controller_filesystem_overhead

storageclass文件系统时,持久性卷中的空间百分比被分配为文件系统开销。

仅限 ForkliftController CR。

10

controller_block_overhead

修复了在持久块卷中分配的额外空间量。此设置适用于任何 基于块的存储 类。它可用于在数据(如加密标头)被写入持久性卷时使用,除了虚拟磁盘的内容之外。

仅限 ForkliftController CR。

0

vsphere_osmap_configmap_name

vSphere 源提供程序的配置映射。此配置映射将传入虚拟机的操作系统映射到 OpenShift Virtualization 首选项名称。此配置映射需要位于部署 MTV Operator 的命名空间中。

要查看 OpenShift Virtualization 环境中的首选项列表,打开 OpenShift Web 控制台并点击 Virtualization > Preferences

当此参数具有默认值 forklift-vsphere-osmap 时,在配置映射中添加值。要覆盖或删除值,请指定与 forklift-vsphere-osmap 不同的配置映射。

仅限 ForkliftController CR。

forklift-vsphere-osmap

ovirt_osmap_configmap_name

RHV 源提供程序的配置映射。此配置映射将传入虚拟机的操作系统映射到 OpenShift Virtualization 首选项名称。此配置映射需要位于部署 MTV Operator 的命名空间中。

要查看 OpenShift Virtualization 环境中的首选项列表,打开 OpenShift Web 控制台并点击 VirtualizationPreferences

当此参数具有默认值 forklift-ovirt-osmap 时,您可以在配置映射中添加值。要覆盖或删除值,请指定与 forklift-ovirt-osmap 不同的配置映射。

仅限 ForkliftController CR。

forklift-ovirt-osmap

controller_retain_precopy_importer_pods

是否保留导入程序 pod,以便 Containerized Data Importer (CDI)不会在迁移过程中删除它们。

仅限 ForkliftController CR。

false

4.3.1. 配置 controller_max_vm_inflight 参数

controller_max_vm_inflight 参数的值(在 UI 中显示的为 Max concurrent 虚拟机迁移 )因迁移的源供应商而异。

  • 对于 OVA 或 VMware 迁移以外的所有迁移,该参数指定 Migration Toolkit for Virtualization (MTV)可同时传输的最大 磁盘 数。在这些迁移中,MTV 会并行迁移磁盘。这意味着,如果要迁移的磁盘组合数量大于设置的值,则额外的磁盘必须等待直到队列可用,而无需对虚拟机完成迁移。

    例如,如果 参数的值为 15,并且 VM A 具有 5 个磁盘,VM B 具有 5 个磁盘,而 VM C 具有 6 个磁盘,除 16 个磁盘开始同时迁移的所有磁盘。一旦迁移了其中任何一个磁盘,就可以迁移 16 个磁盘,即使 VM A 上的所有磁盘也没有 VM B 中的所有磁盘完成迁移。

  • 对于 OVA 迁移,该参数指定 MTV 可以同时迁移的虚拟机的最大数量,这意味着所有其他磁盘必须等到至少一个虚拟机完全迁移为止。

    例如,如果参数的值是 2,并且 VM A 具有 5 个磁盘,VM B 具有 5 个磁盘,而 VM C 上的所有磁盘都必须等待迁移,直到 VM A 或 VM B 完成迁移。

  • 对于 VMware 迁移,该参数有以下含义:

    • 冷迁移:

      • 本地 OpenShift Virtualization:可以同时迁移的每个 ESXi 主机的虚拟机。
      • 远程 OpenShift Virtualization:可同时迁移的每个 ESXi 主机的磁盘。
    • 温迁移:可同时迁移的每个 ESXi 主机的磁盘。

第 5 章 使用 Red Hat OpenShift web 控制台迁移虚拟机

使用 MTV 用户界面迁移虚拟机。它位于 Red Hat OpenShift Web 控制台的 Virtualization 部分。

5.1. MTV 用户界面

Migration Toolkit for Virtualization (MTV)用户界面已集成到 OpenShift web 控制台中。

在左侧面板中,您可以选择与迁移进度组件相关的页面,例如 虚拟化的 Providers,或者如果您是一个管理员,您可以选择 Overview,其中包含迁移的信息,并可让您配置 MTV 设置。

图 5.1. MTV 扩展接口

MTV 用户界面

在与组件相关的页面中,您可以点位于页面左上角的 Projects 列表,并查看允许使用哪些项目(命名空间)。

  • 如果您是管理员,您可以看到所有项目。
  • 如果您是非管理员用户,则只能看到具有使用权限的项目。

5.1.1. MTV Overview 页面

Migration Toolkit for Virtualization (MTV) Overview 页面显示有关迁移的系统范围信息,以及您可以更改的 Settings 列表。

如果您有 Administrator 权限,请点击 Red Hat OpenShift web 控制台中的 MigrationOverview 来访问 Overview 页面。

Overview 页面有 3 个标签页:

  • 概述
  • YAML
  • 指标
5.1.1.1. 概述标签

Overview 选项卡可让您看到:

  • Operator:部署 MTV Operator 的命名空间以及 Operator 的状态
  • Pods:由 MTV Operator 部署的每个 pod 的名称、状态和创建时间
  • Conditions: MTV Operator 的状态:

    • 失败 :最后失败。false 表示自部署以来没有失败。
    • Running :Operator 当前是否正在运行并等待下一个协调。
    • 成功 :最后成功协调。
5.1.1.2. YAML 标签页

定义 MTV Operator 操作的自定义资源 ForkliftController。您可以从此标签页修改自定义资源。

5.1.1.3. Metrics 标签页

Metrics 标签页可让您看到:

  • 迁移 :使用 MTV 进行的迁移数量:

    • 总计
    • Running
    • Failed
    • Succeeded
    • 已取消
  • 虚拟机迁移:使用 MTV 迁移的虚拟机数量:

    • 总计
    • Running
    • Failed
    • Succeeded
    • 已取消
注意

因为单个迁移可能涉及很多虚拟机,使用 MTV 进行的迁移数量可能与使用 MTV 迁移的虚拟机数量有很大不同。

  • Chart 显示最后 7 天使用 MTV 执行的运行、失败和成功迁移的数量
  • Chart 显示最后 7 天使用 MTV 执行的虚拟机迁移数量、失败和成功的虚拟机迁移

5.1.2. 配置 MTV 设置

如果您有 Administrator 权限,您可以访问 Overview 页面并更改其中的以下设置:

表 5.1. MTV 设置
设置描述默认值

最大并发虚拟机迁移

与供应商不同,如下所示:

  • 对于 OVA 或 VMware 迁移以外的所有迁移: MTV 可以同时传输的最大磁盘数。
  • 对于 OVA 迁移: MTV 可同时迁移的最大虚拟机数量。
  • 对于 VMware 迁移,该设置的含义如下:

    • 冷迁移:

      • 本地 OpenShift Virtualization:可以同时迁移的每个 ESXi 主机的虚拟机。
      • 远程 OpenShift Virtualization:可同时迁移的每个 ESXi 主机的磁盘。
    • 温迁移:可同时迁移的每个 ESXi 主机的磁盘。

      如需了解此设置的详细说明 ,请参阅配置 controller_max_vm_inflight 参数

20

必须在之后收集清理(小时)

保留的持续时间 必须收集 报告,然后才能自动删除。

Disabled

控制器主容器 CPU 限制

分配给主控制器容器的 CPU 限制。

500 m

控制器主容器内存限制

分配给主控制器容器的内存限值。

800 Mi

预复制内部(分钟)

在启动温迁移前请求新快照的时间间隔。

60

快照轮询间隔(秒)

系统在温迁移期间检查快照创建和删除状态的频率。

10

流程

  1. 在 Red Hat OpenShift web 控制台中点 Migration > OverviewSettings 列表位于页面右侧。
  2. Settings 列表中,点您要更改的设置的 Edit 图标。
  3. 从列表中选择一个设置。
  4. 点击 Save

5.2. 使用 MTV 用户界面迁移虚拟机

使用 MTV 用户界面从以下供应商迁移虚拟机:

  • VMware vSphere
  • Red Hat Virtualization(RHV)
  • OpenStack
  • 由 VMware vSphere 创建的开放虚拟设备(OVAs)
  • OpenShift Virtualization 集群

对于所有迁移,您可以指定源供应商、目的地供应商和迁移计划。具体流程因供应商而异。

重要

您必须确保 满足所有先决条件

仅 VMware:您必须拥有最少的 VMware 权限集合。

仅 VMware:创建 VMware Virtual Disk Development Kit (VDDK) 镜像将提高迁移速度。

第 6 章 从 VMware vSphere 迁移虚拟机

6.1. 添加 VMware vSphere 源供应商

您可以从 VMware vCenter 或 VMWare ESX/ESXi 服务器迁移 VMware vSphere 虚拟机。在 MTV 版本 2.6 及更高版本中,您可以通过指定 SDK 端点到 ESX/ESXi 服务器来直接从 ESX/ESXi 服务器迁移,而无需通过 vCenter 进行迁移。

重要

为使用 VMware vSphere 源供应商的迁移禁用 EMS 强制,以便启用从 Migration Toolkit for Virtualization 支持的 vSphere 版本迁移,但不符合 2023 FIPS 要求。因此,用户应该考虑从 vSphere 源供应商迁移是否会使用 FIPS 的风险。支持的 vSphere 版本在 软件兼容性指南 中指定。

重要

防病毒软件可能会导致迁移失败。在开始迁移前,强烈建议从源虚拟机中删除这些软件。

重要

MTV 不支持迁移 VMware Non-Volatile Memory Express (NVMe)磁盘。

注意

如果您输入迁移网络中默认值之外的任何最大传输单元(MTU),还必须在您使用的 OpenShift 传输网络中输入相同的值。如需有关 OpenShift 传输网络的更多信息,请参阅创建迁移计划

先决条件

  • 强烈建议在所有集群可以访问的安全 registry 中创建 VMware Virtual Disk Development Kit (VDDK)镜像。VDDK 镜像加快迁移速度,并降低计划失败的风险。如果您不使用 VDDK,且计划失败,请使用安装的 VDDK 重试。如需更多信息,请参阅创建 VDDK 镜像
警告

当虚拟机由 VMware vSAN 支持时,虚拟机(VM)迁移在没有 VDDK 的情况下无法正常工作。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 单击 Create Provider
  3. vSphere
  4. 指定以下字段:

    供应商详情

    • Provider resource name :源提供程序的名称。
    • 端点类型 :选择 vSphere 供应商端点类型。选项: vCenterESXi。您可以从 vCenter 中迁移虚拟机、不是由 vCenter 管理的 ESX/ESXi 服务器,或从由 vCenter 管理的 ESX/ESXi 服务器迁移,但不会通过 vCenter 管理。
    • URL :挂载源虚拟机的 vCenter 的 SDK 端点的 URL。确保 URL 包含 sdk 路径,通常为 /sdk。例如: https://vCenter-host-example.com/sdk。如果指定了 FQDN 的证书,则此字段的值需要与证书中的 FQDN 匹配。
    • VDDK init 镜像VDDKInitImage 路径。强烈建议创建 VDDK init 镜像来加快迁移的速度。如需更多信息,请参阅创建 VDDK 镜像

    供应商凭证

    • 用户名 : vCenter 用户或 ESXi 用户。例如: user@vsphere.local
    • 密码: vCenter 用户密码或 ESXi 用户密码.
  1. 选择以下选项之一来验证 CA 证书:

    • 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
    • 使用系统 CA 证书 :验证系统 CA 证书后迁移。
    • 跳过证书验证 :在不验证 CA 证书的情况下迁移。

      1. 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select
      2. 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
      3. 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
  2. 可选:从供应商的 API 端点 URL 获取自定义 CA 证书。

    1. 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
    2. 如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。

      确认后,CA 证书将用于验证与 API 端点的后续通信。

  3. Create provider 添加并保存该供应商。

    供应商会出现在提供程序列表中。

    注意

    可能需要过几分钟后,提供商才会变为 Ready 状态。

  4. 可选:添加对供应商的 UI 的访问:

    1. Providers 页面上,单击提供程序。

      此时会打开 Provider 详情页面

    2. 单击 External UI Web 链接 下的 Edit 图标。
    3. 输入链接并单击 保存

      注意

      如果没有输入链接,则 MTV 会尝试计算正确的链接。

      • 如果 MTV 成功,字段的超链接会指向计算的链接。
      • 如果 MTV 没有成功,该字段会保持为空。

6.2. 为 VMware 源供应商选择迁移网络

您可以在 Red Hat OpenShift Web 控制台中为源供应商选择迁移网络,以减少源环境的风险并提高性能。

将默认网络用于迁移可能会导致性能降低,因为网络可能没有足够的带宽。这种情形可以对源平台产生负面影响,因为磁盘传输操作可能会使网络饱和。

注意

您还可以使用 vSphere 中的 Network File Copy (NFC)服务控制从主机传输磁盘的网络。

注意

如果您输入迁移网络中默认值之外的任何最大传输单元(MTU),还必须在您使用的 OpenShift 传输网络中输入相同的值。如需有关 OpenShift 传输网络的更多信息,请参阅创建迁移计划

先决条件

  • 迁移网络必须具有足够的吞吐量,最小 10 Gbps 的速度用于磁盘传输。
  • OpenShift Virtualization 节点必须可通过默认网关访问迁移网络。

    注意

    源虚拟磁盘由连接到目标命名空间的 pod 网络的 pod 复制。

  • 迁移网络应该启用巨型帧。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 点供应商旁边的 Hosts 列中的主机编号,以查看主机列表。
  3. 选择一个或多个主机并点击 Select migration network
  4. 指定以下字段:

    • 网络 :网络名称
    • ESXi host admin username: 例如,root
    • ESXi host admin password: Password
  5. 点击 Save
  6. 验证每个主机的状态是否为 Ready

    如果主机状态为 Ready,则在迁移网络上可能无法访问主机,或者凭证可能不正确。您可以修改主机配置并保存更改。

6.3. 添加 OpenShift Virtualization 目的地供应商

您可以使用 Red Hat OpenShift Virtualization 供应商作为源供应商和目的地供应商。

具体来说,自动添加为 OpenShift Virtualization 供应商的主机集群可以用作源供应商和目的地供应商。

除了默认的 OpenShift Virtualization 目的地供应商外,您还可以在 Red Hat OpenShift web 控制台中添加另一个 OpenShift Virtualization 目的地供应商,这是您安装 MTV 的集群。

您可以将虚拟机从 MTV 部署到另一个集群,或者从远程集群迁移到部署 MTV 的集群。

先决条件

  • 您必须具有带有 cluster-admin 权限的 OpenShift Virtualization 服务帐户令牌

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 单击 Create Provider
  3. 点击 OpenShift Virtualization
  4. 指定以下字段:

    • Provider resource name :源供应商的名称
    • URL: API 服务器端点的 URL
    • Service account bearer 令牌 :一个具有 cluster-admin 权限的服务帐户的令牌

      如果 URLService account bearer 令牌 都留空,则会使用本地 OpenShift 集群。

  5. 选择以下选项之一来验证 CA 证书:

    • 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
    • 使用系统 CA 证书 :验证系统 CA 证书后迁移。
    • 跳过证书验证 :在不验证 CA 证书的情况下迁移。

      1. 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select
      2. 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
      3. 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
  6. 可选:从供应商的 API 端点 URL 获取自定义 CA 证书。

    1. 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
    2. 如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。

      确认后,CA 证书将用于验证与 API 端点的后续通信。

  7. Create provider 添加并保存该供应商。

    供应商会出现在提供程序列表中。

6.4. 为 OpenShift Virtualization 供应商选择迁移网络

您可以在 Red Hat OpenShift Web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。

选择转让网络后,将其网络附加定义(NAD)与这个网络使用的网关相关联。

如果您没有选择迁移网络,则默认迁移网络为 pod 网络,这可能不是磁盘传输的最佳选择。

注意

您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Providers for virtualization
  2. 点您要更改迁移网络的 OpenShift Virtualization 供应商。

    Providers 详情页面 打开时:

  3. Networks 标签页。
  4. 单击 Set default transfer network
  5. 从列表中选择默认传输网络,然后单击 Save
  6. 通过完成以下步骤,在网络中配置用于 MTV 迁移的网关:

    1. 在 Red Hat OpenShift Web 控制台中,点 Networking > NetworkAttachmentDefinitions
    2. 选择适当的默认传输网络 NAD。
    3. YAML 标签。
    4. forklift.konveyor.io/route 添加到 YAML 的 metadata:annotations 部分,如下例所示:

      Copy to Clipboard Toggle word wrap
      apiVersion: k8s.cni.cncf.io/v1
      kind: NetworkAttachmentDefinition
      metadata:
        name: localnet-network
        namespace: mtv-test
        annotations:
          forklift.konveyor.io/route: <IP address> 
      1
      1
      需要 NetworkAttachmentDefinition 参数,以便从动态主机配置协议(DHCP)或静态配置接口的 IP 地址。配置 IP 地址可让接口访问配置的网关。
    5. 点击 Save

6.5. 创建迁移计划

使用 Red Hat OpenShift Web 控制台创建迁移计划。指定源供应商、您要迁移的虚拟机(VM)和其他计划详情。

警告

不要包括带有客户机初始化存储连接的虚拟机,如互联网小型计算机系统接口(iSCSI)连接或网络文件系统(NFS)挂载。这需要在迁移前进行额外的规划,或在迁移后进行重新配置。

这可防止客户端指向的存储并发磁盘访问。

重要

计划不能包含 500 多个虚拟机或 500 个磁盘。

流程

  1. 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization,然后单击 Create Plan

    Create migration plan 向导会打开 Select source provider 接口。

  2. 选择您要迁移的虚拟机的源供应商。

    此时会打开 Select virtual machine 界面。

  3. 选择您要迁移的虚拟机,然后点 Next

    Create migration plan 窗格将打开。它显示目标供应商和命名空间、网络映射和存储映射的源供应商名称和建议。

  4. 输入 Plan 名称
  5. 要更改 Target providerTarget namespaceNetwork mapStorage map 的元素,请从相关列表中选择一个项目。
  6. 要添加 网络映射 或存储映射,请单击 + 符号并添加映射。
  7. Create migration plan

    MTV 验证迁移计划,并打开 Plan 详情页面,指示计划是否准备就绪,或包含错误。

    列出计划的详细信息,您可以编辑在上一页上填写的项目。如果您进行任何更改,则 MTV 会再次验证计划。

  8. 检查页面的 Settings 部分中的以下项:

    • 迁移类型 :迁移类型。默认情况下,MTV 将迁移类型设置为 cold

      • 对于温迁移,请执行以下操作:

        • Edit 图标。
        • 切换是否是温迁移 开关。
        • 点击 Save
    • transfer Network: 用于将虚拟机传送到 OpenShift Virtualization 的网络。这是提供程序的默认传输网络。验证传输网络是否在所选目标命名空间中。

      • 要编辑传输网络,请执行以下操作:

        • Edit 图标。
        • 从列表中选择一个不同的传输网络。
        • 点击 Save
      • 可选: 要在 OpenShift Web 控制台中配置 OpenShift 网络,点 Networking > NetworkAttachmentDefinitions

        如需了解更多有关 OpenShift 支持的不同类型的网络的信息,请参阅 OpenShift Container Platform 中的 额外网络。

      • 可选: 要调整 OpenShift 传输网络的最大传输单元(MTU),还必须更改 VMware 迁移网络的 MTU。如需更多信息,请参阅为 VMware 源供应商选择迁移网络
    • 目标命名空间 :所有迁移的虚拟机的目标命名空间。默认情况下,目标命名空间是当前或活跃的命名空间。

      • 要编辑命名空间,请执行以下操作:

        • Edit 图标。
        • 从打开的窗口中的列表中选择不同的目标命名空间。
        • 点击 Save
    • 保留静态 IP :默认情况下,虚拟网络接口控制器(vNIC)会在迁移过程中更改。因此,使用静态 IP 配置给客户虚拟机中的接口名称的 vNIC 会在迁移过程中丢失其 IP。

      • 要保留静态 IP,请执行以下操作:

        • Edit 图标。
        • 切换 是否保留静态 IP 开关。
        • 点击 Save

          然后,MTV 会针对缺少 vNIC 属性的任何虚拟机发出警告消息。要检索任何缺少的 vNIC 属性,请在 vSphere 中运行这些虚拟机。这会导致 vNIC 属性报告为 MTV。

    • 磁盘解密密码短语 :对于使用 Linux 统一密钥设置(LUKS)加密的磁盘。

      • 要为 LUKS 加密设备输入解密密码短语列表,请执行以下操作:

        • Edit 图标。
        • 输入密码短语。
        • 点击 Save

          您不需要以特定顺序输入密码短语。对于每个 LUKS 加密设备,MTV 会尝试每个密码短语,直到一个解锁该设备为止。

    • Root 设备 :仅适用于多引导虚拟机迁移。默认情况下,MTV 使用检测到的第一个可引导设备作为 root 设备。

      • 要指定不同的根设备,请执行以下操作:

        • 单击 Root 设备 旁边的 Edit 图标。
        • 从列表中选择设备,或者在文本框中输入设备。
        • 点击 Save

          MTV 对磁盘位置使用以下格式: /dev/sd<disk_identifier><disk_partition>。例如:如果第二个磁盘是 root 设备,且操作系统位于磁盘的第二个分区中,则格式将是: /dev/sdb2。输入引导设备后,点 Save

          如果因为提供的引导设备不正确而转换失败,可以通过检查转换 pod 日志来获取正确的信息。

    • 共享磁盘 :仅适用于冷迁移。共享磁盘是附加到多个虚拟机的磁盘,并使用多写器选项。这些特性使共享磁盘难以迁移。默认情况下,MTV 不会迁移共享磁盘。

      注意

      迁移共享磁盘可能会减慢迁移过程的速度。

      • 要在迁移计划中迁移共享磁盘,请执行以下操作:

        • Edit 图标。
        • 切换 Migrate shared disk 开关。
        • 点击 Save
    • 可选: PVC 名称模板 :指定计划中虚拟机的持久性卷声明(PVC)名称的模板。

      模板遵循 Go 模板语法,并可访问以下变量:

      • .vmname: 虚拟机的名称
      • .PlanName: 迁移计划的名称
      • .DiskIndex :磁盘的初始卷索引
      • .RootDiskIndex: 根磁盘索引

        例子

      • "{{.vmname}}-disk-{{.DiskIndex}}"
      • "{{if eq .DiskIndex .RootDiskIndex}}root{{else}}data{{end}}-{{.DiskIndex}}"

        变量名称不能超过 63 个字符。

      • 要为计划中所有虚拟机指定 PVC 名称模板,请执行以下操作:

        • Edit 图标。
        • 单击 Enter custom naming template
        • 根据说明输入模板。
        • 点击 Save
      • 要只为特定虚拟机指定 PVC 名称模板,请执行以下操作:

        • Virtual Machines 标签页。
        • 选择所需的虚拟机。
        • 点击虚拟机的 Options 菜单 kebab
        • 选择 Edit PVC name template
        • 根据说明输入模板。
        • 点击 Save

          重要

          您在 Virtual Machines 选项卡中所做的更改会覆盖 Plan 详情页面中的任何更改

    • 可选: 卷名称模板 :指定计划中虚拟机的卷接口名称的模板。

      模板遵循 Go 模板语法,并可访问以下变量:

      • .PVCName: 使用这个卷挂载到虚拟机的 PVC 名称
      • .VolumeIndex: 卷接口(0-based)的 Sequential index

        例子

      • "disk-{{.VolumeIndex}}"
      • "pvc-{{.PVCName}}"

        变量名称不能超过 63 个字符

      • 要为您计划中的所有虚拟机指定卷名称模板,请执行以下操作:

        • Edit 图标。
        • 单击 Enter custom naming template
        • 根据说明输入模板。
        • 点击 Save
      • 要只为特定虚拟机指定不同的卷名称模板,请执行以下操作:

        • Virtual Machines 标签页。
        • 选择所需的虚拟机。
        • 点击虚拟机的 Options 菜单 kebab
        • 选择 Edit Volume name template
        • 根据说明输入模板。
        • 点击 Save

          重要

          您在 Virtual Machines 选项卡中所做的更改会覆盖 Plan 详情页面中的任何更改

    • 可选: Network name template: 指定您计划中虚拟机的网络接口名称模板。

      模板遵循 Go 模板语法,并可访问以下变量:

      • .networkName: 如果目标网络是 multus,请添加 Multus 网络附加定义的名称。否则,将此变量留空。
      • .networkNamespace :如果目标网络是 multus,请添加 Multus 网络附加定义所在的命名空间。
      • .networkType: Network type。选项: multuspod
      • .NetworkIndex :网络接口的序列索引(0-based)。

        例子

      • "net-{{.NetworkIndex}}"
      • {{if eq .NetworkType "pod"}}pod{{else}}multus-{{.NetworkIndex}}{{end}}"

        变量名称不能超过 63 个字符。

      • 要为您计划中的所有虚拟机指定网络名称模板,请执行以下操作:

        • Edit 图标。
        • 单击 Enter custom naming template
        • 根据说明输入模板。
        • 点击 Save
      • 要只为特定虚拟机指定不同的网络名称模板,请执行以下操作:

        • Virtual Machines 标签页。
        • 选择所需的虚拟机。
        • 点击虚拟机的 Options 菜单 kebab
        • 选择 Edit Network name template
        • 根据说明输入模板。
        • 点击 Save

          重要

          您在 Virtual Machines 选项卡中所做的更改会覆盖 Plan 详情页面中的任何更改

  9. 如果计划有效,您可以执行以下操作之一:

    1. 现在,点 Start migration 来运行计划。
    2. 稍后,在 Plans for virtualization 页面上选择计划并遵循 运行迁移计划 中的步骤来运行计划
警告

开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。

重要

当您将 VMware 7 虚拟机迁移到使用 CentOS 7.9 的 OpenShift 4.13+ 平台时,网络接口的名称会改变,虚拟机的静态 IP 配置无法正常工作。

6.6. 运行迁移计划

您可以运行迁移计划,并在 Red Hat OpenShift Web 控制台中查看其进度。

先决条件

  • 有效的迁移计划。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization

    Plans 列表显示源和目标供应商、正在迁移的虚拟机数量、状态、迁移的日期以及每个计划的描述。

  2. 点迁移计划旁边的 Start 来启用迁移。
  3. 在打开的确认窗口中,单击 Start

    计划 的状态更改为 Running,并显示迁移的进度。

    仅限 warm 迁移:

    • precopy 阶段会启动。
    • Cutover 完成迁移。

      警告

      开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。

  4. 可选:点迁移的 Status 中的链接查看其整体状态和每个虚拟机的状态:

    • 左侧的链接表示迁移失败、成功还是持续。它还会报告迁移成功、失败或被取消的虚拟机数量。
    • 右侧的链接会打开 Plan Details 页面的 Virtual Machines 选项卡。对于每个虚拟机,标签会显示以下数据:

      • 虚拟机的名称
      • 迁移的开始和结束时间
      • 复制的数据量
      • 虚拟机迁移的进度管道

        警告

        对于正在导入的虚拟机,必须禁用 vMotion,包括 svMotion 和 relocate,以避免数据崩溃。

  5. 可选: 要在迁移的运行时或完成后查看迁移的日志,请执行以下操作:

    1. Virtual Machines 标签页。
    2. 点击您要检查的虚拟机左侧的箭头(>)。

      此时会显示虚拟机的详情。

    3. 在 Pod link 列中的 Pods 部分,点 Logs 链接。

      Logs 选项卡将打开。

      注意

      日志并不总是可用。以下是日志不可用的常见原因:

      • 迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及 virt-v2v,因此不需要 pod。
      • 没有创建 pod。
      • pod 已被删除。
      • 迁移在运行 pod 前失败。
    4. 要查看原始日志,请点 Raw 链接。
    5. 要下载日志,请点 Download 链接。

6.7. 迁移计划选项

在 Red Hat OpenShift web 控制台的 Plans for virtualization 页面中,点迁移计划旁边的 Options 菜单 kebab 访问以下选项:

  • 编辑计划 :编辑迁移计划的详细信息。如果计划正在运行或成功完成,则无法编辑以下选项:

    • Plan 详情页面的 Settings 部分的所有属性。例如,温或冷迁移、目标命名空间和保留的静态 IP。
    • 计划在 Mappings 选项卡上的映射。
    • Hook 选项卡上列出的 hook。
  • 开始迁移 :只有在相关时才活动。
  • 重启迁移 :重启中断的迁移。在选择此选项前,请确保没有错误消息。如果存在,您需要编辑计划。
  • cutover: 仅限 Warm 迁移。仅在相关时才激活。点 Cutover 打开 Cutover 窗口,它支持以下选项:

    • 设置 cutover :为 cutover 设置日期和时间。
    • 删除 cutover :取消调度的 cutover。仅在相关时才激活。
  • 重复计划 :创建一个与现有计划相同的虚拟机(VM)、参数、映射和 hook 的新迁移计划。您可以将此功能用于以下任务:

    • 将虚拟机迁移到不同的命名空间。
    • 编辑归档的迁移计划。
    • 编辑具有不同状态的迁移计划,如 failed、canceled、running、critical 或 ready。
  • archive Plan :删除迁移计划的日志、历史记录和元数据。计划不能编辑或重启。它只能查看、复制或删除。

    注意

    归档计划 不可逆。但是,您可以复制归档的计划。

  • 删除计划 :永久删除迁移计划。您不能删除正在运行的迁移计划。

    注意

    删除计划是 不可逆的。

    删除迁移计划不会删除临时资源。要删除临时资源,请在删除前先归档计划。

    注意

    归档的结果,然后删除迁移计划会根据您使用 CLI 或 UI 创建计划及其存储和网络映射而有所不同。

    • 如果您使用 UI 创建它们,则迁移计划及其映射不再出现在 UI 中。
    • 如果您使用 CLI 创建它们,则映射可能仍然出现在 UI 中。这是因为 CLI 中的映射可以被多个迁移计划使用,但 UI 中创建的映射只能在一个迁移计划中使用。

6.8. 取消迁移

您可以使用 Red Hat OpenShift web 控制台在迁移计划进行时取消部分或所有虚拟机(VM)的迁移。

流程

  1. 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization
  2. 点正在运行的迁移计划的名称查看迁移详情。
  3. 选择一个或多个虚拟机,点 Cancel
  4. Yes, cancel 确认取消。

    Migration details by VM 列表中,取消的虚拟机的状态为 Canceled。未迁移且迁移的虚拟机不受影响。

您可以通过点 Migration Plan 页的迁移计划旁的 Restart 重启迁移。

第 7 章 从 Red Hat Virtualization 迁移虚拟机

7.1. 添加 Red Hat Virtualization 源供应商

您可以使用 Red Hat OpenShift Web 控制台添加 Red Hat Virtualization 源供应商。

先决条件

  • Manager CA 证书,除非被第三方证书替代,在这种情况下,指定 Manager Apache CA 证书

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 单击 Create Provider
  3. Red Hat Virtualization
  4. 指定以下字段:

    • Provider resource name :源提供程序的名称。
    • URL: 挂载源虚拟机的 Red Hat Virtualization Manager (RHVM)的 API 端点的 URL。确保 URL 包括 RHVM API 服务器(通常为 /ovirt-engine/api )的路径。例如: https://rhv-host-example.com/ovirt-engine/api
    • 用户名 :用户名.
    • 密码 :密码.
  5. 选择以下选项之一来验证 CA 证书:

    • 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
    • 使用系统 CA 证书 :验证系统 CA 证书后迁移。
    • 跳过证书验证 :在不验证 CA 证书的情况下迁移。

      1. 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select
      2. 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
      3. 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
  6. 可选:从供应商的 API 端点 URL 获取自定义 CA 证书。

    1. 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
    2. 如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。

      确认后,CA 证书将用于验证与 API 端点的后续通信。

  7. Create provider 添加并保存该供应商。

    供应商会出现在提供程序列表中。

  8. 可选:添加对供应商的 UI 的访问:

    1. Providers 页面上,单击提供程序。

      此时会打开 Provider 详情页面

    2. 单击 External UI Web 链接 下的 Edit 图标。
    3. 输入链接并单击 保存

      注意

      如果没有输入链接,则 MTV 会尝试计算正确的链接。

      • 如果 MTV 成功,字段的超链接会指向计算的链接。
      • 如果 MTV 没有成功,该字段会保持为空。

7.2. 添加 OpenShift Virtualization 目的地供应商

您可以使用 Red Hat OpenShift Virtualization 供应商作为源供应商和目的地供应商。

具体来说,自动添加为 OpenShift Virtualization 供应商的主机集群可以用作源供应商和目的地供应商。

除了默认的 OpenShift Virtualization 目的地供应商外,您还可以在 Red Hat OpenShift web 控制台中添加另一个 OpenShift Virtualization 目的地供应商,这是您安装 MTV 的集群。

您可以将虚拟机从 MTV 部署到另一个集群,或者从远程集群迁移到部署 MTV 的集群。

先决条件

  • 您必须具有带有 cluster-admin 权限的 OpenShift Virtualization 服务帐户令牌

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 单击 Create Provider
  3. 点击 OpenShift Virtualization
  4. 指定以下字段:

    • Provider resource name :源供应商的名称
    • URL: API 服务器端点的 URL
    • Service account bearer 令牌 :一个具有 cluster-admin 权限的服务帐户的令牌

      如果 URLService account bearer 令牌 都留空,则会使用本地 OpenShift 集群。

  5. 选择以下选项之一来验证 CA 证书:

    • 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
    • 使用系统 CA 证书 :验证系统 CA 证书后迁移。
    • 跳过证书验证 :在不验证 CA 证书的情况下迁移。

      1. 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select
      2. 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
      3. 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
  6. 可选:从供应商的 API 端点 URL 获取自定义 CA 证书。

    1. 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
    2. 如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。

      确认后,CA 证书将用于验证与 API 端点的后续通信。

  7. Create provider 添加并保存该供应商。

    供应商会出现在提供程序列表中。

7.3. 为 OpenShift Virtualization 供应商选择迁移网络

您可以在 Red Hat OpenShift Web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。

选择转让网络后,将其网络附加定义(NAD)与这个网络使用的网关相关联。

如果您没有选择迁移网络,则默认迁移网络为 pod 网络,这可能不是磁盘传输的最佳选择。

注意

您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Providers for virtualization
  2. 点您要更改迁移网络的 OpenShift Virtualization 供应商。

    Providers 详情页面 打开时:

  3. Networks 标签页。
  4. 单击 Set default transfer network
  5. 从列表中选择默认传输网络,然后单击 Save
  6. 通过完成以下步骤,在网络中配置用于 MTV 迁移的网关:

    1. 在 Red Hat OpenShift Web 控制台中,点 Networking > NetworkAttachmentDefinitions
    2. 选择适当的默认传输网络 NAD。
    3. YAML 标签。
    4. forklift.konveyor.io/route 添加到 YAML 的 metadata:annotations 部分,如下例所示:

      Copy to Clipboard Toggle word wrap
      apiVersion: k8s.cni.cncf.io/v1
      kind: NetworkAttachmentDefinition
      metadata:
        name: localnet-network
        namespace: mtv-test
        annotations:
          forklift.konveyor.io/route: <IP address> 
      1
      1
      需要 NetworkAttachmentDefinition 参数,以便从动态主机配置协议(DHCP)或静态配置接口的 IP 地址。配置 IP 地址可让接口访问配置的网关。
    5. 点击 Save

7.4. 创建迁移计划

使用 Red Hat OpenShift Web 控制台创建迁移计划。指定源供应商、您要迁移的虚拟机(VM)和其他计划详情。

警告

不要包括带有客户机初始化存储连接的虚拟机,如互联网小型计算机系统接口(iSCSI)连接或网络文件系统(NFS)挂载。这需要在迁移前进行额外的规划,或在迁移后进行重新配置。

这可防止客户端指向的存储并发磁盘访问。

重要

计划不能包含 500 多个虚拟机或 500 个磁盘。

流程

  1. 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization,然后单击 Create Plan

    Create migration plan 向导会打开 Select source provider 接口。

  2. 选择您要迁移的虚拟机的源供应商。

    此时会打开 Select virtual machine 界面。

  3. 选择您要迁移的虚拟机,然后点 Next

    Create migration plan 窗格将打开。它显示目标供应商和命名空间、网络映射和存储映射的源供应商名称和建议。

  4. 输入 Plan 名称
  5. 要更改 Target providerTarget namespaceNetwork mapStorage map 的元素,请从相关列表中选择一个项目。
  6. 要添加 网络映射 或存储映射,请单击 + 符号并添加映射。
  7. Create migration plan

    MTV 验证迁移计划,并打开 Plan 详情页面,指示计划是否准备就绪,或包含错误。

    列出计划的详细信息,您可以编辑在上一页上填写的项目。如果您进行任何更改,则 MTV 会再次验证计划。

  8. 检查页面的 Settings 部分中的以下项:

    • 迁移类型 :迁移类型。默认情况下,MTV 将迁移类型设置为 cold

      • 对于温迁移,请执行以下操作:

        • Edit 图标。
        • 切换是否是温迁移 开关。
        • 点击 Save
    • transfer Network: 用于将虚拟机传送到 OpenShift Virtualization 的网络。这是提供程序的默认传输网络。验证传输网络是否在所选目标命名空间中。

      • 要编辑传输网络,请执行以下操作:

        • Edit 图标。
        • 从列表中选择一个不同的传输网络。
        • 点击 Save
      • 可选: 要在 OpenShift Web 控制台中配置 OpenShift 网络,点 Networking > NetworkAttachmentDefinitions

        如需了解更多有关 OpenShift 支持的不同类型的网络的信息,请参阅 OpenShift Container Platform 中的 额外网络。

      • 可选: 要调整 OpenShift 传输网络的最大传输单元(MTU),还必须更改 VMware 迁移网络的 MTU。如需更多信息,请参阅为 VMware 源供应商选择迁移网络
    • 目标命名空间 :所有迁移的虚拟机的目标命名空间。默认情况下,目标命名空间是当前或活跃的命名空间。

      • 要编辑命名空间,请执行以下操作:

        • Edit 图标。
        • 从打开的窗口中的列表中选择不同的目标命名空间。
        • 点击 Save
    • 保留从 RHV 中迁移的虚拟机 CPU 模型:通常,RHV 虚拟机的 CPU 模型(类型)在集群级别上设置。但是,可以在虚拟机级别上设置 CPU 模型,这称为自定义 CPU 模型。

      默认情况下,MTV 在目标集群上设置 CPU 模型,如下所示: MTV 为具有它们的虚拟机保留自定义 CPU 设置。 对于没有自定义 CPU 设置的虚拟机,MTV 不会设置 CPU 型号。相反,CPU 模型稍后由 OpenShift Virtualization 设置。

      • 要保留 RHV 虚拟机的集群级别 CPU 模型,请执行以下操作:

        • Edit 图标。
        • 切换 是否保留 CPU 模型 开关。
        • 点击 Save
  9. 如果计划有效,您可以执行以下操作之一:

    1. 现在,点 Start migration 来运行计划。
    2. 稍后,在 Plans for virtualization 页面上选择计划并遵循 运行迁移计划 中的步骤来运行计划
警告

开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。

7.5. 运行迁移计划

您可以运行迁移计划,并在 Red Hat OpenShift Web 控制台中查看其进度。

先决条件

  • 有效的迁移计划。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization

    Plans 列表显示源和目标供应商、正在迁移的虚拟机数量、状态、迁移的日期以及每个计划的描述。

  2. 点迁移计划旁边的 Start 来启用迁移。
  3. 在打开的确认窗口中,单击 Start

    计划 的状态更改为 Running,并显示迁移的进度。

    仅限 warm 迁移:

    • precopy 阶段会启动。
    • Cutover 完成迁移。

      警告

      开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。

  4. 可选:点迁移的 Status 中的链接查看其整体状态和每个虚拟机的状态:

    • 左侧的链接表示迁移失败、成功还是持续。它还会报告迁移成功、失败或被取消的虚拟机数量。
    • 右侧的链接会打开 Plan Details 页面的 Virtual Machines 选项卡。对于每个虚拟机,标签会显示以下数据:

      • 虚拟机的名称
      • 迁移的开始和结束时间
      • 复制的数据量
      • 虚拟机迁移的进度管道

        警告

        对于正在导入的虚拟机,必须禁用 vMotion,包括 svMotion 和 relocate,以避免数据崩溃。

  5. 可选: 要在迁移的运行时或完成后查看迁移的日志,请执行以下操作:

    1. Virtual Machines 标签页。
    2. 点击您要检查的虚拟机左侧的箭头(>)。

      此时会显示虚拟机的详情。

    3. 在 Pod link 列中的 Pods 部分,点 Logs 链接。

      Logs 选项卡将打开。

      注意

      日志并不总是可用。以下是日志不可用的常见原因:

      • 迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及 virt-v2v,因此不需要 pod。
      • 没有创建 pod。
      • pod 已被删除。
      • 迁移在运行 pod 前失败。
    4. 要查看原始日志,请点 Raw 链接。
    5. 要下载日志,请点 Download 链接。

7.6. 迁移计划选项

在 Red Hat OpenShift web 控制台的 Plans for virtualization 页面中,点迁移计划旁边的 Options 菜单 kebab 访问以下选项:

  • 编辑计划 :编辑迁移计划的详细信息。如果计划正在运行或成功完成,则无法编辑以下选项:

    • Plan 详情页面的 Settings 部分的所有属性。例如,温或冷迁移、目标命名空间和保留的静态 IP。
    • 计划在 Mappings 选项卡上的映射。
    • Hook 选项卡上列出的 hook。
  • 开始迁移 :只有在相关时才活动。
  • 重启迁移 :重启中断的迁移。在选择此选项前,请确保没有错误消息。如果存在,您需要编辑计划。
  • cutover: 仅限 Warm 迁移。仅在相关时才激活。点 Cutover 打开 Cutover 窗口,它支持以下选项:

    • 设置 cutover :为 cutover 设置日期和时间。
    • 删除 cutover :取消调度的 cutover。仅在相关时才激活。
  • 重复计划 :创建一个与现有计划相同的虚拟机(VM)、参数、映射和 hook 的新迁移计划。您可以将此功能用于以下任务:

    • 将虚拟机迁移到不同的命名空间。
    • 编辑归档的迁移计划。
    • 编辑具有不同状态的迁移计划,如 failed、canceled、running、critical 或 ready。
  • archive Plan :删除迁移计划的日志、历史记录和元数据。计划不能编辑或重启。它只能查看、复制或删除。

    注意

    归档计划 不可逆。但是,您可以复制归档的计划。

  • 删除计划 :永久删除迁移计划。您不能删除正在运行的迁移计划。

    注意

    删除计划是 不可逆的。

    删除迁移计划不会删除临时资源。要删除临时资源,请在删除前先归档计划。

    注意

    归档的结果,然后删除迁移计划会根据您使用 CLI 或 UI 创建计划及其存储和网络映射而有所不同。

    • 如果您使用 UI 创建它们,则迁移计划及其映射不再出现在 UI 中。
    • 如果您使用 CLI 创建它们,则映射可能仍然出现在 UI 中。这是因为 CLI 中的映射可以被多个迁移计划使用,但 UI 中创建的映射只能在一个迁移计划中使用。

7.7. 取消迁移

您可以使用 Red Hat OpenShift web 控制台在迁移计划进行时取消部分或所有虚拟机(VM)的迁移。

流程

  1. 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization
  2. 点正在运行的迁移计划的名称查看迁移详情。
  3. 选择一个或多个虚拟机,点 Cancel
  4. Yes, cancel 确认取消。

    Migration details by VM 列表中,取消的虚拟机的状态为 Canceled。未迁移且迁移的虚拟机不受影响。

您可以通过点 Migration Plan 页的迁移计划旁的 Restart 重启迁移。

第 8 章 从 OpenStack 迁移虚拟机

8.1. 添加 OpenStack 源供应商

您可以使用 Red Hat OpenShift Web 控制台添加 OpenStack 源供应商。

重要

从 OpenStack 提供程序迁移基于镜像的虚拟机时,会为附加到源虚拟机的镜像创建一个快照,并将快照中的数据复制到目标虚拟机。这意味着目标虚拟机在创建快照时将具有与源虚拟机相同的状态。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 单击 Create Provider
  3. 单击 OpenStack
  4. 指定以下字段:

    • Provider resource name :源提供程序的名称。
    • URL :OpenStack 身份(Keystone)端点的 URL。例如: http://controller:5000/v3
    • 身份验证类型 :选择以下验证方法之一并提供您选择的信息。例如,如果您选择 Application credential ID 作为身份验证类型,Application credential IDApplication credential secret 字段将变为活跃,您需要提供 ID 和 secret。

      • 应用程序凭证 ID

        • 应用凭证 ID :OpenStack 应用凭证 ID
        • 应用程序凭证 secret :OpenStack 应用程序凭证 Secret
      • 应用程序凭证名称

        • 应用凭证名称 :OpenStack 应用凭证名称
        • 应用程序凭证 secret :OpenStack 应用程序凭证 Secret
        • 用户名 :OpenStack 用户名
        • :OpenStack 域名
      • 带有用户 ID 的令牌

        • 令牌 :OpenStack 令牌
        • 用户 ID :OpenStack 用户 ID
        • 项目 ID :OpenStack 项目 ID
      • 使用用户名的令牌

        • 令牌 :OpenStack 令牌
        • 用户名 :OpenStack 用户名
        • 项目 :OpenStack 项目
        • 域名 :OpenStack 域名
      • 密码

        • 用户名 :OpenStack 用户名
        • 密码 :OpenStack 密码
        • 项目 :OpenStack 项目
        • :OpenStack 域名
  5. 选择以下选项之一来验证 CA 证书:

    • 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
    • 使用系统 CA 证书 :验证系统 CA 证书后迁移。
    • 跳过证书验证 :在不验证 CA 证书的情况下迁移。

      1. 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select
      2. 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
      3. 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
  6. 可选:从供应商的 API 端点 URL 获取自定义 CA 证书。

    1. 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
    2. 如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。

      确认后,CA 证书将用于验证与 API 端点的后续通信。

  7. Create provider 添加并保存该供应商。

    供应商会出现在提供程序列表中。

  8. 可选:添加对供应商的 UI 的访问:

    1. Providers 页面上,单击提供程序。

      此时会打开 Provider 详情页面

    2. 单击 External UI Web 链接 下的 Edit 图标。
    3. 输入链接并单击 保存

      注意

      如果没有输入链接,则 MTV 会尝试计算正确的链接。

      • 如果 MTV 成功,字段的超链接会指向计算的链接。
      • 如果 MTV 没有成功,该字段会保持为空。

8.2. 添加 OpenShift Virtualization 目的地供应商

您可以使用 Red Hat OpenShift Virtualization 供应商作为源供应商和目的地供应商。

具体来说,自动添加为 OpenShift Virtualization 供应商的主机集群可以用作源供应商和目的地供应商。

除了默认的 OpenShift Virtualization 目的地供应商外,您还可以在 Red Hat OpenShift web 控制台中添加另一个 OpenShift Virtualization 目的地供应商,这是您安装 MTV 的集群。

您可以将虚拟机从 MTV 部署到另一个集群,或者从远程集群迁移到部署 MTV 的集群。

先决条件

  • 您必须具有带有 cluster-admin 权限的 OpenShift Virtualization 服务帐户令牌

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 单击 Create Provider
  3. 点击 OpenShift Virtualization
  4. 指定以下字段:

    • Provider resource name :源供应商的名称
    • URL: API 服务器端点的 URL
    • Service account bearer 令牌 :一个具有 cluster-admin 权限的服务帐户的令牌

      如果 URLService account bearer 令牌 都留空,则会使用本地 OpenShift 集群。

  5. 选择以下选项之一来验证 CA 证书:

    • 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
    • 使用系统 CA 证书 :验证系统 CA 证书后迁移。
    • 跳过证书验证 :在不验证 CA 证书的情况下迁移。

      1. 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select
      2. 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
      3. 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
  6. 可选:从供应商的 API 端点 URL 获取自定义 CA 证书。

    1. 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
    2. 如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。

      确认后,CA 证书将用于验证与 API 端点的后续通信。

  7. Create provider 添加并保存该供应商。

    供应商会出现在提供程序列表中。

8.3. 为 OpenShift Virtualization 供应商选择迁移网络

您可以在 Red Hat OpenShift Web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。

选择转让网络后,将其网络附加定义(NAD)与这个网络使用的网关相关联。

如果您没有选择迁移网络,则默认迁移网络为 pod 网络,这可能不是磁盘传输的最佳选择。

注意

您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Providers for virtualization
  2. 点您要更改迁移网络的 OpenShift Virtualization 供应商。

    Providers 详情页面 打开时:

  3. Networks 标签页。
  4. 单击 Set default transfer network
  5. 从列表中选择默认传输网络,然后单击 Save
  6. 通过完成以下步骤,在网络中配置用于 MTV 迁移的网关:

    1. 在 Red Hat OpenShift Web 控制台中,点 Networking > NetworkAttachmentDefinitions
    2. 选择适当的默认传输网络 NAD。
    3. YAML 标签。
    4. forklift.konveyor.io/route 添加到 YAML 的 metadata:annotations 部分,如下例所示:

      Copy to Clipboard Toggle word wrap
      apiVersion: k8s.cni.cncf.io/v1
      kind: NetworkAttachmentDefinition
      metadata:
        name: localnet-network
        namespace: mtv-test
        annotations:
          forklift.konveyor.io/route: <IP address> 
      1
      1
      需要 NetworkAttachmentDefinition 参数,以便从动态主机配置协议(DHCP)或静态配置接口的 IP 地址。配置 IP 地址可让接口访问配置的网关。
    5. 点击 Save

8.4. 创建迁移计划

使用 Red Hat OpenShift Web 控制台创建迁移计划。指定源供应商、您要迁移的虚拟机(VM)和其他计划详情。

警告

不要包括带有客户机初始化存储连接的虚拟机,如互联网小型计算机系统接口(iSCSI)连接或网络文件系统(NFS)挂载。这需要在迁移前进行额外的规划,或在迁移后进行重新配置。

这可防止客户端指向的存储并发磁盘访问。

重要

计划不能包含 500 多个虚拟机或 500 个磁盘。

流程

  1. 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization,然后单击 Create Plan

    Create migration plan 向导会打开 Select source provider 接口。

  2. 选择您要迁移的虚拟机的源供应商。

    此时会打开 Select virtual machine 界面。

  3. 选择您要迁移的虚拟机,然后点 Next

    Create migration plan 窗格将打开。它显示目标供应商和命名空间、网络映射和存储映射的源供应商名称和建议。

  4. 输入 Plan 名称
  5. 要更改 Target providerTarget namespaceNetwork mapStorage map 的元素,请从相关列表中选择一个项目。
  6. 要添加 网络映射 或存储映射,请单击 + 符号并添加映射。
  7. Create migration plan

    MTV 验证迁移计划,并打开 Plan 详情页面,指示计划是否准备就绪,或包含错误。

    列出计划的详细信息,您可以编辑在上一页上填写的项目。如果您进行任何更改,则 MTV 会再次验证计划。

  8. 检查页面的 Settings 部分中的以下项:

    • transfer Network: 用于将虚拟机传送到 OpenShift Virtualization 的网络。这是提供程序的默认传输网络。验证传输网络是否在所选目标命名空间中。

      • 要编辑传输网络,请执行以下操作:

        • Edit 图标。
        • 从列表中选择一个不同的传输网络。
        • 点击 Save
      • 可选: 要在 OpenShift Web 控制台中配置 OpenShift 网络,点 Networking > NetworkAttachmentDefinitions

        如需了解更多有关 OpenShift 支持的不同类型的网络的信息,请参阅 OpenShift Container Platform 中的 额外网络。

      • 可选: 要调整 OpenShift 传输网络的最大传输单元(MTU),还必须更改 VMware 迁移网络的 MTU。如需更多信息,请参阅为 VMware 源供应商选择迁移网络
    • 目标命名空间 :所有迁移的虚拟机的目标命名空间。默认情况下,目标命名空间是当前或活跃的命名空间。

      • 要编辑命名空间,请执行以下操作:

        • Edit 图标。
        • 从打开的窗口中的列表中选择不同的目标命名空间。
        • 点击 Save
  9. 如果计划有效,您可以执行以下操作之一:

    1. 现在,点 Start migration 来运行计划。
    2. 稍后,在 Plans for virtualization 页面上选择计划并遵循 运行迁移计划 中的步骤来运行计划
警告

开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。

8.5. 运行迁移计划

您可以运行迁移计划,并在 Red Hat OpenShift Web 控制台中查看其进度。

先决条件

  • 有效的迁移计划。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization

    Plans 列表显示源和目标供应商、正在迁移的虚拟机数量、状态、迁移的日期以及每个计划的描述。

  2. 点迁移计划旁边的 Start 来启用迁移。
  3. 在打开的确认窗口中,单击 Start

    计划 的状态更改为 Running,并显示迁移的进度。

    警告

    开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。

  4. 可选:点迁移的 Status 中的链接查看其整体状态和每个虚拟机的状态:

    • 左侧的链接表示迁移失败、成功还是持续。它还会报告迁移成功、失败或被取消的虚拟机数量。
    • 右侧的链接会打开 Plan Details 页面的 Virtual Machines 选项卡。对于每个虚拟机,标签会显示以下数据:

      • 虚拟机的名称
      • 迁移的开始和结束时间
      • 复制的数据量
      • 虚拟机迁移的进度管道

        警告

        对于正在导入的虚拟机,必须禁用 vMotion,包括 svMotion 和 relocate,以避免数据崩溃。

  5. 可选: 要在迁移的运行时或完成后查看迁移的日志,请执行以下操作:

    1. Virtual Machines 标签页。
    2. 点击您要检查的虚拟机左侧的箭头(>)。

      此时会显示虚拟机的详情。

    3. 在 Pod link 列中的 Pods 部分,点 Logs 链接。

      Logs 选项卡将打开。

      注意

      日志并不总是可用。以下是日志不可用的常见原因:

      • 迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及 virt-v2v,因此不需要 pod。
      • 没有创建 pod。
      • pod 已被删除。
      • 迁移在运行 pod 前失败。
    4. 要查看原始日志,请点 Raw 链接。
    5. 要下载日志,请点 Download 链接。

8.6. 迁移计划选项

在 Red Hat OpenShift web 控制台的 Plans for virtualization 页面中,点迁移计划旁边的 Options 菜单 kebab 访问以下选项:

  • 编辑计划 :编辑迁移计划的详细信息。如果计划正在运行或成功完成,则无法编辑以下选项:

    • Plan 详情页面的 Settings 部分的所有属性。例如,温或冷迁移、目标命名空间和保留的静态 IP。
    • 计划在 Mappings 选项卡上的映射。
    • Hook 选项卡上列出的 hook。
  • 开始迁移 :只有在相关时才活动。
  • 重启迁移 :重启中断的迁移。在选择此选项前,请确保没有错误消息。如果存在,您需要编辑计划。
  • cutover: 仅限 Warm 迁移。仅在相关时才激活。点 Cutover 打开 Cutover 窗口,它支持以下选项:

    • 设置 cutover :为 cutover 设置日期和时间。
    • 删除 cutover :取消调度的 cutover。仅在相关时才激活。
  • 重复计划 :创建一个与现有计划相同的虚拟机(VM)、参数、映射和 hook 的新迁移计划。您可以将此功能用于以下任务:

    • 将虚拟机迁移到不同的命名空间。
    • 编辑归档的迁移计划。
    • 编辑具有不同状态的迁移计划,如 failed、canceled、running、critical 或 ready。
  • archive Plan :删除迁移计划的日志、历史记录和元数据。计划不能编辑或重启。它只能查看、复制或删除。

    注意

    归档计划 不可逆。但是,您可以复制归档的计划。

  • 删除计划 :永久删除迁移计划。您不能删除正在运行的迁移计划。

    注意

    删除计划是 不可逆的。

    删除迁移计划不会删除临时资源。要删除临时资源,请在删除前先归档计划。

    注意

    归档的结果,然后删除迁移计划会根据您使用 CLI 或 UI 创建计划及其存储和网络映射而有所不同。

    • 如果您使用 UI 创建它们,则迁移计划及其映射不再出现在 UI 中。
    • 如果您使用 CLI 创建它们,则映射可能仍然出现在 UI 中。这是因为 CLI 中的映射可以被多个迁移计划使用,但 UI 中创建的映射只能在一个迁移计划中使用。

8.7. 取消迁移

您可以使用 Red Hat OpenShift web 控制台在迁移计划进行时取消部分或所有虚拟机(VM)的迁移。

流程

  1. 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization
  2. 点正在运行的迁移计划的名称查看迁移详情。
  3. 选择一个或多个虚拟机,点 Cancel
  4. Yes, cancel 确认取消。

    Migration details by VM 列表中,取消的虚拟机的状态为 Canceled。未迁移且迁移的虚拟机不受影响。

您可以通过点 Migration Plan 页的迁移计划旁的 Restart 重启迁移。

第 9 章 从 OVA 迁移虚拟机

9.1. 添加开放虚拟设备(OVA)源供应商

您可以使用 Red Hat OpenShift Web 控制台添加由 VMware vSphere 创建的开放虚拟设备(OVA)文件作为源供应商。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 单击 Create Provider
  3. 单击 Open Virtual Appliance (OVA)
  4. 指定以下字段:

    • Provider resource name :源供应商的名称
    • URL :提供 OVA 的 NFS 文件共享的 URL
  5. Create provider 添加并保存该供应商。

    供应商会出现在提供程序列表中。

    注意

    可能会出现错误消息,指出发生了错误。您可以忽略此消息。

9.2. 添加 OpenShift Virtualization 目的地供应商

您可以使用 Red Hat OpenShift Virtualization 供应商作为源供应商和目的地供应商。

具体来说,自动添加为 OpenShift Virtualization 供应商的主机集群可以用作源供应商和目的地供应商。

除了默认的 OpenShift Virtualization 目的地供应商外,您还可以在 Red Hat OpenShift web 控制台中添加另一个 OpenShift Virtualization 目的地供应商,这是您安装 MTV 的集群。

您可以将虚拟机从 MTV 部署到另一个集群,或者从远程集群迁移到部署 MTV 的集群。

先决条件

  • 您必须具有带有 cluster-admin 权限的 OpenShift Virtualization 服务帐户令牌

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 单击 Create Provider
  3. 点击 OpenShift Virtualization
  4. 指定以下字段:

    • Provider resource name :源供应商的名称
    • URL: API 服务器端点的 URL
    • Service account bearer 令牌 :一个具有 cluster-admin 权限的服务帐户的令牌

      如果 URLService account bearer 令牌 都留空,则会使用本地 OpenShift 集群。

  5. 选择以下选项之一来验证 CA 证书:

    • 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
    • 使用系统 CA 证书 :验证系统 CA 证书后迁移。
    • 跳过证书验证 :在不验证 CA 证书的情况下迁移。

      1. 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select
      2. 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
      3. 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
  6. 可选:从供应商的 API 端点 URL 获取自定义 CA 证书。

    1. 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
    2. 如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。

      确认后,CA 证书将用于验证与 API 端点的后续通信。

  7. Create provider 添加并保存该供应商。

    供应商会出现在提供程序列表中。

9.3. 为 OpenShift Virtualization 供应商选择迁移网络

您可以在 Red Hat OpenShift Web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。

选择转让网络后,将其网络附加定义(NAD)与这个网络使用的网关相关联。

如果您没有选择迁移网络,则默认迁移网络为 pod 网络,这可能不是磁盘传输的最佳选择。

注意

您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Providers for virtualization
  2. 点您要更改迁移网络的 OpenShift Virtualization 供应商。

    Providers 详情页面 打开时:

  3. Networks 标签页。
  4. 单击 Set default transfer network
  5. 从列表中选择默认传输网络,然后单击 Save
  6. 通过完成以下步骤,在网络中配置用于 MTV 迁移的网关:

    1. 在 Red Hat OpenShift Web 控制台中,点 Networking > NetworkAttachmentDefinitions
    2. 选择适当的默认传输网络 NAD。
    3. YAML 标签。
    4. forklift.konveyor.io/route 添加到 YAML 的 metadata:annotations 部分,如下例所示:

      Copy to Clipboard Toggle word wrap
      apiVersion: k8s.cni.cncf.io/v1
      kind: NetworkAttachmentDefinition
      metadata:
        name: localnet-network
        namespace: mtv-test
        annotations:
          forklift.konveyor.io/route: <IP address> 
      1
      1
      需要 NetworkAttachmentDefinition 参数,以便从动态主机配置协议(DHCP)或静态配置接口的 IP 地址。配置 IP 地址可让接口访问配置的网关。
    5. 点击 Save

9.4. 创建迁移计划

使用 Red Hat OpenShift Web 控制台创建迁移计划。指定源供应商、您要迁移的虚拟机(VM)和其他计划详情。

警告

不要包括带有客户机初始化存储连接的虚拟机,如互联网小型计算机系统接口(iSCSI)连接或网络文件系统(NFS)挂载。这需要在迁移前进行额外的规划,或在迁移后进行重新配置。

这可防止客户端指向的存储并发磁盘访问。

重要

计划不能包含 500 多个虚拟机或 500 个磁盘。

流程

  1. 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization,然后单击 Create Plan

    Create migration plan 向导会打开 Select source provider 接口。

  2. 选择您要迁移的虚拟机的源供应商。

    此时会打开 Select virtual machine 界面。

  3. 选择您要迁移的虚拟机,然后点 Next

    Create migration plan 窗格将打开。它显示目标供应商和命名空间、网络映射和存储映射的源供应商名称和建议。

  4. 输入 Plan 名称
  5. 要更改 Target providerTarget namespaceNetwork mapStorage map 的元素,请从相关列表中选择一个项目。
  6. 要添加 网络映射 或存储映射,请单击 + 符号并添加映射。
  7. Create migration plan

    MTV 验证迁移计划,并打开 Plan 详情页面,指示计划是否准备就绪,或包含错误。

    列出计划的详细信息,您可以编辑在上一页上填写的项目。如果您进行任何更改,则 MTV 会再次验证计划。

  8. 检查页面的 Settings 部分中的以下项:

    • transfer Network: 用于将虚拟机传送到 OpenShift Virtualization 的网络。这是提供程序的默认传输网络。验证传输网络是否在所选目标命名空间中。

      • 要编辑传输网络,请执行以下操作:

        • Edit 图标。
        • 从列表中选择一个不同的传输网络。
        • 点击 Save
      • 可选: 要在 OpenShift Web 控制台中配置 OpenShift 网络,点 Networking > NetworkAttachmentDefinitions

        如需了解更多有关 OpenShift 支持的不同类型的网络的信息,请参阅 OpenShift Container Platform 中的 额外网络。

      • 可选: 要调整 OpenShift 传输网络的最大传输单元(MTU),还必须更改 VMware 迁移网络的 MTU。如需更多信息,请参阅为 VMware 源供应商选择迁移网络
    • 目标命名空间 :所有迁移的虚拟机的目标命名空间。默认情况下,目标命名空间是当前或活跃的命名空间。

      • 要编辑命名空间,请执行以下操作:

        • Edit 图标。
        • 从打开的窗口中的列表中选择不同的目标命名空间。
        • 点击 Save
  9. 如果计划有效,您可以执行以下操作之一:

    1. 现在,点 Start migration 来运行计划。
    2. 稍后,在 Plans for virtualization 页面上选择计划并遵循 运行迁移计划 中的步骤来运行计划
警告

开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。

9.5. 运行迁移计划

您可以运行迁移计划,并在 Red Hat OpenShift Web 控制台中查看其进度。

先决条件

  • 有效的迁移计划。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization

    Plans 列表显示源和目标供应商、正在迁移的虚拟机数量、状态、迁移的日期以及每个计划的描述。

  2. 点迁移计划旁边的 Start 来启用迁移。
  3. 在打开的确认窗口中,单击 Start

    计划 的状态更改为 Running,并显示迁移的进度。

    警告

    开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。

  4. 可选:点迁移的 Status 中的链接查看其整体状态和每个虚拟机的状态:

    • 左侧的链接表示迁移失败、成功还是持续。它还会报告迁移成功、失败或被取消的虚拟机数量。
    • 右侧的链接会打开 Plan Details 页面的 Virtual Machines 选项卡。对于每个虚拟机,标签会显示以下数据:

      • 虚拟机的名称
      • 迁移的开始和结束时间
      • 复制的数据量
      • 虚拟机迁移的进度管道

        警告

        对于正在导入的虚拟机,必须禁用 vMotion,包括 svMotion 和 relocate,以避免数据崩溃。

  5. 可选: 要在迁移的运行时或完成后查看迁移的日志,请执行以下操作:

    1. Virtual Machines 标签页。
    2. 点击您要检查的虚拟机左侧的箭头(>)。

      此时会显示虚拟机的详情。

    3. 在 Pod link 列中的 Pods 部分,点 Logs 链接。

      Logs 选项卡将打开。

      注意

      日志并不总是可用。以下是日志不可用的常见原因:

      • 迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及 virt-v2v,因此不需要 pod。
      • 没有创建 pod。
      • pod 已被删除。
      • 迁移在运行 pod 前失败。
    4. 要查看原始日志,请点 Raw 链接。
    5. 要下载日志,请点 Download 链接。

9.6. 迁移计划选项

在 Red Hat OpenShift web 控制台的 Plans for virtualization 页面中,点迁移计划旁边的 Options 菜单 kebab 访问以下选项:

  • 编辑计划 :编辑迁移计划的详细信息。如果计划正在运行或成功完成,则无法编辑以下选项:

    • Plan 详情页面的 Settings 部分的所有属性。例如,温或冷迁移、目标命名空间和保留的静态 IP。
    • 计划在 Mappings 选项卡上的映射。
    • Hook 选项卡上列出的 hook。
  • 开始迁移 :只有在相关时才活动。
  • 重启迁移 :重启中断的迁移。在选择此选项前,请确保没有错误消息。如果存在,您需要编辑计划。
  • cutover: 仅限 Warm 迁移。仅在相关时才激活。点 Cutover 打开 Cutover 窗口,它支持以下选项:

    • 设置 cutover :为 cutover 设置日期和时间。
    • 删除 cutover :取消调度的 cutover。仅在相关时才激活。
  • 重复计划 :创建一个与现有计划相同的虚拟机(VM)、参数、映射和 hook 的新迁移计划。您可以将此功能用于以下任务:

    • 将虚拟机迁移到不同的命名空间。
    • 编辑归档的迁移计划。
    • 编辑具有不同状态的迁移计划,如 failed、canceled、running、critical 或 ready。
  • archive Plan :删除迁移计划的日志、历史记录和元数据。计划不能编辑或重启。它只能查看、复制或删除。

    注意

    归档计划 不可逆。但是,您可以复制归档的计划。

  • 删除计划 :永久删除迁移计划。您不能删除正在运行的迁移计划。

    注意

    删除计划是 不可逆的。

    删除迁移计划不会删除临时资源。要删除临时资源,请在删除前先归档计划。

    注意

    归档的结果,然后删除迁移计划会根据您使用 CLI 或 UI 创建计划及其存储和网络映射而有所不同。

    • 如果您使用 UI 创建它们,则迁移计划及其映射不再出现在 UI 中。
    • 如果您使用 CLI 创建它们,则映射可能仍然出现在 UI 中。这是因为 CLI 中的映射可以被多个迁移计划使用,但 UI 中创建的映射只能在一个迁移计划中使用。

9.7. 取消迁移

您可以使用 Red Hat OpenShift web 控制台在迁移计划进行时取消部分或所有虚拟机(VM)的迁移。

流程

  1. 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization
  2. 点正在运行的迁移计划的名称查看迁移详情。
  3. 选择一个或多个虚拟机,点 Cancel
  4. Yes, cancel 确认取消。

    Migration details by VM 列表中,取消的虚拟机的状态为 Canceled。未迁移且迁移的虚拟机不受影响。

您可以通过点 Migration Plan 页的迁移计划旁的 Restart 重启迁移。

第 10 章 从 OpenShift Virtualization 迁移虚拟机

10.1. 添加 Red Hat OpenShift Virtualization 源供应商

您可以使用 Red Hat OpenShift Virtualization 供应商作为源供应商和目的地供应商。

具体来说,自动添加为 OpenShift Virtualization 供应商的主机集群可以用作源供应商和目的地供应商。

您可以将虚拟机从 MTV 部署到另一个集群,或者从远程集群迁移到部署 MTV 的集群。

注意

源供应商的 Red Hat OpenShift 集群版本必须是 4.13 或更高版本。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 单击 Create Provider
  3. 点击 OpenShift Virtualization
  4. 指定以下字段:

    • Provider resource name :源供应商的名称
    • URL: API 服务器端点的 URL
    • Service account bearer 令牌 :一个具有 cluster-admin 权限的服务帐户的令牌

      如果 URLService account bearer 令牌 都留空,则会使用本地 OpenShift 集群。

  5. 选择以下选项之一来验证 CA 证书:

    • 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
    • 使用系统 CA 证书 :验证系统 CA 证书后迁移。
    • 跳过证书验证 :在不验证 CA 证书的情况下迁移。

      1. 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select
      2. 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
      3. 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
  6. 可选:从供应商的 API 端点 URL 获取自定义 CA 证书。

    1. 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
    2. 如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。

      确认后,CA 证书将用于验证与 API 端点的后续通信。

  7. Create provider 添加并保存该供应商。

    供应商会出现在提供程序列表中。

  8. 可选:添加对供应商的 UI 的访问:

    1. Providers 页面上,单击提供程序。

      此时会打开 Provider 详情页面

    2. 单击 External UI Web 链接 下的 Edit 图标。
    3. 输入链接并单击 保存

      注意

      如果没有输入链接,则 MTV 会尝试计算正确的链接。

      • 如果 MTV 成功,字段的超链接会指向计算的链接。
      • 如果 MTV 没有成功,该字段会保持为空。

10.2. 添加 OpenShift Virtualization 目的地供应商

您可以使用 Red Hat OpenShift Virtualization 供应商作为源供应商和目的地供应商。

具体来说,自动添加为 OpenShift Virtualization 供应商的主机集群可以用作源供应商和目的地供应商。

除了默认的 OpenShift Virtualization 目的地供应商外,您还可以在 Red Hat OpenShift web 控制台中添加另一个 OpenShift Virtualization 目的地供应商,这是您安装 MTV 的集群。

您可以将虚拟机从 MTV 部署到另一个集群,或者从远程集群迁移到部署 MTV 的集群。

先决条件

  • 您必须具有带有 cluster-admin 权限的 OpenShift Virtualization 服务帐户令牌

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationProviders for virtualization
  2. 单击 Create Provider
  3. 点击 OpenShift Virtualization
  4. 指定以下字段:

    • Provider resource name :源供应商的名称
    • URL: API 服务器端点的 URL
    • Service account bearer 令牌 :一个具有 cluster-admin 权限的服务帐户的令牌

      如果 URLService account bearer 令牌 都留空,则会使用本地 OpenShift 集群。

  5. 选择以下选项之一来验证 CA 证书:

    • 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
    • 使用系统 CA 证书 :验证系统 CA 证书后迁移。
    • 跳过证书验证 :在不验证 CA 证书的情况下迁移。

      1. 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select
      2. 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
      3. 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
  6. 可选:从供应商的 API 端点 URL 获取自定义 CA 证书。

    1. 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
    2. 如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。

      确认后,CA 证书将用于验证与 API 端点的后续通信。

  7. Create provider 添加并保存该供应商。

    供应商会出现在提供程序列表中。

10.3. 为 OpenShift Virtualization 供应商选择迁移网络

您可以在 Red Hat OpenShift Web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。

选择转让网络后,将其网络附加定义(NAD)与这个网络使用的网关相关联。

如果您没有选择迁移网络,则默认迁移网络为 pod 网络,这可能不是磁盘传输的最佳选择。

注意

您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Providers for virtualization
  2. 点您要更改迁移网络的 OpenShift Virtualization 供应商。

    Providers 详情页面 打开时:

  3. Networks 标签页。
  4. 单击 Set default transfer network
  5. 从列表中选择默认传输网络,然后单击 Save
  6. 通过完成以下步骤,在网络中配置用于 MTV 迁移的网关:

    1. 在 Red Hat OpenShift Web 控制台中,点 Networking > NetworkAttachmentDefinitions
    2. 选择适当的默认传输网络 NAD。
    3. YAML 标签。
    4. forklift.konveyor.io/route 添加到 YAML 的 metadata:annotations 部分,如下例所示:

      Copy to Clipboard Toggle word wrap
      apiVersion: k8s.cni.cncf.io/v1
      kind: NetworkAttachmentDefinition
      metadata:
        name: localnet-network
        namespace: mtv-test
        annotations:
          forklift.konveyor.io/route: <IP address> 
      1
      1
      需要 NetworkAttachmentDefinition 参数,以便从动态主机配置协议(DHCP)或静态配置接口的 IP 地址。配置 IP 地址可让接口访问配置的网关。
    5. 点击 Save

10.4. 创建迁移计划

使用 Red Hat OpenShift Web 控制台创建迁移计划。指定源供应商、您要迁移的虚拟机(VM)和其他计划详情。

警告

不要包括带有客户机初始化存储连接的虚拟机,如互联网小型计算机系统接口(iSCSI)连接或网络文件系统(NFS)挂载。这需要在迁移前进行额外的规划,或在迁移后进行重新配置。

这可防止客户端指向的存储并发磁盘访问。

重要

计划不能包含 500 多个虚拟机或 500 个磁盘。

流程

  1. 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization,然后单击 Create Plan

    Create migration plan 向导会打开 Select source provider 接口。

  2. 选择您要迁移的虚拟机的源供应商。

    此时会打开 Select virtual machine 界面。

  3. 选择您要迁移的虚拟机,然后点 Next

    Create migration plan 窗格将打开。它显示目标供应商和命名空间、网络映射和存储映射的源供应商名称和建议。

  4. 输入 Plan 名称
  5. 要更改 Target providerTarget namespaceNetwork mapStorage map 的元素,请从相关列表中选择一个项目。
  6. 要添加 网络映射 或存储映射,请单击 + 符号并添加映射。
  7. Create migration plan

    MTV 验证迁移计划,并打开 Plan 详情页面,指示计划是否准备就绪,或包含错误。

    列出计划的详细信息,您可以编辑在上一页上填写的项目。如果您进行任何更改,则 MTV 会再次验证计划。

  8. 检查页面的 Settings 部分中的以下项:

    • transfer Network: 用于将虚拟机传送到 OpenShift Virtualization 的网络。这是提供程序的默认传输网络。验证传输网络是否在所选目标命名空间中。

      • 要编辑传输网络,请执行以下操作:

        • Edit 图标。
        • 从列表中选择一个不同的传输网络。
        • 点击 Save
      • 可选: 要在 OpenShift Web 控制台中配置 OpenShift 网络,点 Networking > NetworkAttachmentDefinitions

        如需了解更多有关 OpenShift 支持的不同类型的网络的信息,请参阅 OpenShift Container Platform 中的 额外网络。

      • 可选: 要调整 OpenShift 传输网络的最大传输单元(MTU),还必须更改 VMware 迁移网络的 MTU。如需更多信息,请参阅为 VMware 源供应商选择迁移网络
    • 目标命名空间 :所有迁移的虚拟机的目标命名空间。默认情况下,目标命名空间是当前或活跃的命名空间。

      • 要编辑命名空间,请执行以下操作:

        • Edit 图标。
        • 从打开的窗口中的列表中选择不同的目标命名空间。
        • 点击 Save
  9. 如果计划有效,您可以执行以下操作之一:

    1. 现在,点 Start migration 来运行计划。
    2. 稍后,在 Plans for virtualization 页面上选择计划并遵循 运行迁移计划 中的步骤来运行计划
警告

开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。

10.5. 运行迁移计划

您可以运行迁移计划,并在 Red Hat OpenShift Web 控制台中查看其进度。

先决条件

  • 有效的迁移计划。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization

    Plans 列表显示源和目标供应商、正在迁移的虚拟机数量、状态、迁移的日期以及每个计划的描述。

  2. 点迁移计划旁边的 Start 来启用迁移。
  3. 在打开的确认窗口中,单击 Start

    计划 的状态更改为 Running,并显示迁移的进度。

    警告

    开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。

  4. 可选:点迁移的 Status 中的链接查看其整体状态和每个虚拟机的状态:

    • 左侧的链接表示迁移失败、成功还是持续。它还会报告迁移成功、失败或被取消的虚拟机数量。
    • 右侧的链接会打开 Plan Details 页面的 Virtual Machines 选项卡。对于每个虚拟机,标签会显示以下数据:

      • 虚拟机的名称
      • 迁移的开始和结束时间
      • 复制的数据量
      • 虚拟机迁移的进度管道

        警告

        对于正在导入的虚拟机,必须禁用 vMotion,包括 svMotion 和 relocate,以避免数据崩溃。

  5. 可选: 要在迁移的运行时或完成后查看迁移的日志,请执行以下操作:

    1. Virtual Machines 标签页。
    2. 点击您要检查的虚拟机左侧的箭头(>)。

      此时会显示虚拟机的详情。

    3. 在 Pod link 列中的 Pods 部分,点 Logs 链接。

      Logs 选项卡将打开。

      注意

      日志并不总是可用。以下是日志不可用的常见原因:

      • 迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及 virt-v2v,因此不需要 pod。
      • 没有创建 pod。
      • pod 已被删除。
      • 迁移在运行 pod 前失败。
    4. 要查看原始日志,请点 Raw 链接。
    5. 要下载日志,请点 Download 链接。

10.6. 迁移计划选项

在 Red Hat OpenShift web 控制台的 Plans for virtualization 页面中,点迁移计划旁边的 Options 菜单 kebab 访问以下选项:

  • 编辑计划 :编辑迁移计划的详细信息。如果计划正在运行或成功完成,则无法编辑以下选项:

    • Plan 详情页面的 Settings 部分的所有属性。例如,温或冷迁移、目标命名空间和保留的静态 IP。
    • 计划在 Mappings 选项卡上的映射。
    • Hook 选项卡上列出的 hook。
  • 开始迁移 :只有在相关时才活动。
  • 重启迁移 :重启中断的迁移。在选择此选项前,请确保没有错误消息。如果存在,您需要编辑计划。
  • cutover: 仅限 Warm 迁移。仅在相关时才激活。点 Cutover 打开 Cutover 窗口,它支持以下选项:

    • 设置 cutover :为 cutover 设置日期和时间。
    • 删除 cutover :取消调度的 cutover。仅在相关时才激活。
  • 重复计划 :创建一个与现有计划相同的虚拟机(VM)、参数、映射和 hook 的新迁移计划。您可以将此功能用于以下任务:

    • 将虚拟机迁移到不同的命名空间。
    • 编辑归档的迁移计划。
    • 编辑具有不同状态的迁移计划,如 failed、canceled、running、critical 或 ready。
  • archive Plan :删除迁移计划的日志、历史记录和元数据。计划不能编辑或重启。它只能查看、复制或删除。

    注意

    归档计划 不可逆。但是,您可以复制归档的计划。

  • 删除计划 :永久删除迁移计划。您不能删除正在运行的迁移计划。

    注意

    删除计划是 不可逆的。

    删除迁移计划不会删除临时资源。要删除临时资源,请在删除前先归档计划。

    注意

    归档的结果,然后删除迁移计划会根据您使用 CLI 或 UI 创建计划及其存储和网络映射而有所不同。

    • 如果您使用 UI 创建它们,则迁移计划及其映射不再出现在 UI 中。
    • 如果您使用 CLI 创建它们,则映射可能仍然出现在 UI 中。这是因为 CLI 中的映射可以被多个迁移计划使用,但 UI 中创建的映射只能在一个迁移计划中使用。

10.7. 取消迁移

您可以使用 Red Hat OpenShift web 控制台在迁移计划进行时取消部分或所有虚拟机(VM)的迁移。

流程

  1. 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization
  2. 点正在运行的迁移计划的名称查看迁移详情。
  3. 选择一个或多个虚拟机,点 Cancel
  4. Yes, cancel 确认取消。

    Migration details by VM 列表中,取消的虚拟机的状态为 Canceled。未迁移且迁移的虚拟机不受影响。

您可以通过点 Migration Plan 页的迁移计划旁的 Restart 重启迁移。

第 11 章 从命令行迁移虚拟机

您可以使用命令行将虚拟机迁移到 OpenShift Virtualization。

重要

您必须确保 满足所有先决条件

11.1. 非管理员用户使用迁移计划组件所需的权限

如果您是管理员,您可以处理迁移计划的所有组件(如供应商、网络映射和迁移计划)。

默认情况下,非管理员用户对迁移计划及其组件具有有限的能力。作为管理员,您可以修改其角色,以允许他们完全访问所有组件,或者授予它们有限的权限。

例如,管理员可以为迁移计划分配一个或多个以下集群角色:

表 11.1. 迁移计划角色及其权限示例
角色描述

plans.forklift.konveyor.io-v1beta1-view

可以查看迁移计划,但不能创建、删除或修改它们

plans.forklift.konveyor.io-v1beta1-edit

可以创建、删除或修改( 编辑 权限的所有部分)单个迁移计划

plans.forklift.konveyor.io-v1beta1-admin

所有 编辑 特权,以及删除整个迁移计划集合的功能

请注意,预定义的集群角色包括资源(例如,计划)、API 组(如 forklift.konveyor.io-v1beta1)和一个操作(例如,查看编辑)。

作为更全面的示例,您可以为每个命名空间授予以下非管理员用户集:

  • 为有权访问的命名空间创建和修改存储映射、网络映射和迁移计划
  • 将管理员创建的提供程序附加到存储映射、网络映射和迁移计划
  • 无法创建供应商或更改系统设置
表 11.2. 与迁移计划组件一起使用但没有创建供应商所需的权限示例
ActionsAPI 组资源

get, list, watch, create, update, patch, delete

forklift.konveyor.io

plans

get, list, watch, create, update, patch, delete

forklift.konveyor.io

迁移

get, list, watch, create, update, patch, delete

forklift.konveyor.io

hooks

get, list, watch

forklift.konveyor.io

providers

get, list, watch, create, update, patch, delete

forklift.konveyor.io

networkmaps

get, list, watch, create, update, patch, delete

forklift.konveyor.io

Storagemaps

get, list, watch

forklift.konveyor.io

forkliftcontrollers

创建patchdelete

空字符串

secrets

注意

非管理员用户需要具有作为网络映射 的编辑 角色以及存储映射的一部分的 create 权限,以便在将模板用于网络映射或存储映射时也用于创建迁移计划。

11.2. 迁移虚拟机

您可以通过创建 MTV 自定义资源(CR),使用命令行界面(CLI)迁移虚拟机。CR 和迁移过程因源供应商而异。

重要

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

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

要迁移到与迁移计划定义的 OpenShift 集群不同的 OpenShift 集群,您必须具有具有 cluster-admin 权限的 OpenShift Virtualization 服务帐户令牌。

11.3. 从 VMware vSphere 源供应商迁移

您可以使用命令行界面(CLI)从 VMware vSphere 源供应商迁移。

重要

防病毒软件可能会导致迁移失败。在开始迁移前,强烈建议从源虚拟机中删除这些软件。

重要

MTV 不支持迁移 VMware Non-Volatile Memory Express (NVMe)磁盘。

注意

要迁移具有共享磁盘的虚拟机(VM),请参阅使用 共享磁盘迁移虚拟机

流程

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

    Copy to Clipboard Toggle word wrap
    $ 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: vsphere
        createdForResourceType: providers
    type: Opaque
    stringData:
      user: <user> 
    2
    
      password: <password> 
    3
    
      insecureSkipVerify: <"true"/"false"> 
    4
    
      cacert: | 
    5
    
        <ca_certificate>
      url: <api_end_point> 
    6
    
    EOF
    1
    ownerReferences 部分是可选的。
    2
    指定 vCenter 用户或 ESX/ESXi 用户。
    3
    指定 vCenter 用户或 ESX/ESXi 用户的密码。
    4
    指定 "true" 以跳过证书验证,并指定 "false" 来验证证书。如果没有指定,则默认为 "false "。跳过证书验证会进行不安全的迁移,然后不需要证书。不安全的迁移意味着传输的数据通过安全连接发送,并可能会公开敏感数据。
    5
    如果没有设置此字段并禁用 跳过证书验证 时,MTV 会尝试使用系统 CA。
    6
    指定 vCenter 的 API 端点 URL 或 ESX/ESXi,例如 https://<vCenter_host>/sdk
  1. 为源供应商创建 Provider 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: vsphere
      url: <api_end_point> 
    1
    
      settings:
        vddkInitImage: <VDDK_image> 
    2
    
        sdkEndpoint: vcenter 
    3
    
      secret:
        name: <secret> 
    4
    
        namespace: <namespace>
    EOF
    1
    指定 API 端点的 URL,例如 https://<vCenter_host>/sdk
    2
    可选,但强烈建议创建一个 VDDK 镜像来加快迁移。按照 OpenShift 文档指定您创建的 VDDK 镜像。
    3
    选项: vcenteresxi
    4
    指定供应商 Secret CR 的名称。
  1. 创建 主机清单

    Copy to Clipboard Toggle word wrap
    $ 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
    1
    指定 VMware vSphere Provider CR 的名称。
    2
    指定 VMware vSphere 主机的 Managed Object Reference (moRef)。要检索 moRef,请参阅 检索 VMware vSphere moRef
    3
    指定 VMware vSphere 迁移网络的 IP 地址。
  1. 创建 NetworkMap 清单来映射源和目标网络:

    Copy to Clipboard Toggle word wrap
    $  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>
            name: <source_network_name>
        - destination:
            name: <network_attachment_definition> 
    3
    
            namespace: <network_attachment_definition_namespace> 
    4
    
            type: multus
          source:
            id: <source_network_id>
            name: <source_network_name>
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 podmultus并忽略。使用 忽略 以避免在此迁移中将虚拟机附加到这个网络。
    2
    您可以使用 idname 参数来指定源网络。对于 id,指定 VMware vSphere 网络受管对象参考(moRef)。要检索 moRef,请参阅 检索 VMware vSphere moRef
    3
    为每个额外 OpenShift Virtualization 网络指定网络附加定义。
    4
    仅在 类型 multus 时才需要。指定 OpenShift Virtualization 网络附加定义的命名空间。
  1. 创建 StorageMap 清单来映射源和目标存储:

    Copy to Clipboard Toggle word wrap
    $ 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
    
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 ReadWriteOnceReadWriteMany
    2
    指定 VMware vSphere 数据存储 moRef。例如,f2737930-b567-451a-9ceb-2887f6207009。要检索 moRef,请参阅 检索 VMware vSphere moRef
  2. 可选:在 Plan CR 中指定的阶段创建一个 Hook 清单以在虚拟机中运行自定义代码:

    Copy to Clipboard Toggle word wrap
    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Hook
    metadata:
      name: <hook>
      namespace: <namespace>
    spec:
      image: quay.io/kubev2v/hook-runner
      serviceAccount:<service account> 
    1
    
      playbook: |
        LS0tCi0gbm... 
    2
    
    EOF
    1
    可选: Red Hat OpenShift 服务帐户。使用 serviceAccount 参数修改任何集群资源。
    2
    base64 编码的 Ansible Playbook.如果指定了 playbook,镜像 必须包含 ansible-runner
    注意

    您可以使用默认 hook-runner 镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。

  1. 输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。

    您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。

    配置 IP 地址可让接口访问配置的网关。

    Copy to Clipboard Toggle word wrap
    $ oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: <name_of_transfer_network>
      namespace: <namespace>
      annotations:
        forklift.konveyor.io/route: <IP_address>
  2. 为迁移创建 Plan 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
    metadata:
      name: <plan> 
    1
    
      namespace: <namespace>
    spec:
      warm: false 
    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>
      preserveStaticIPs: 
    8
    
      networkNameTemplate: <network_interface_template> 
    9
    
      pvcNameTemplate: <pvc_name_template> 
    10
    
      pvcNameTemplateUseGenerateName: true 
    11
    
      targetNamespace: <target_namespace>
      volumeNameTemplate: <volume_name_template> 
    12
    
      vms: 
    13
    
        - id: <source_vm1> 
    14
    
        - name: <source_vm2>
          networkNameTemplate: <network_interface_template_for_this_vm> 
    15
    
          pvcNameTemplate: <pvc_name_template_for_this_vm> 
    16
    
          volumeNameTemplate: <volume_name_template_for_this_vm> 
    17
    
          targetName: <target_name> 
    18
    
          hooks: 
    19
    
            - hook:
                namespace: <namespace>
                name: <hook> 
    20
    
              step: <step> 
    21
    
    
    EOF
    1
    指定 Plan CR 的名称。
    2
    指定迁移是 warm - true - 或 cold - false。如果您指定了 warm 迁移,且没有为 Migration 清单中的 cutover 参数指定一个值,则只有 precopy 阶段将运行。
    3
    每个计划仅指定一个网络映射和一个存储映射。
    4
    指定一个网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    5
    指定 NetworkMap CR 的名称。
    6
    指定一个存储映射,即使要迁移的虚拟机没有使用磁盘镜像分配。在这种情况下,映射可以为空。
    7
    指定 StorageMap CR 的名称。
    8
    默认情况下,虚拟网络接口控制器(vNIC)在迁移过程中会改变。因此,使用链接到客户端虚拟机中接口名称的静态 IP 地址的 vNIC 会丢失其 IP 地址。
    要避免这种情况,请将 preserveStaticIPs 设置为 true。MTV 对缺少 vNIC 属性的任何虚拟机发出警告消息。要检索任何缺少的 vNIC 属性,请在 vSphere 中运行这些虚拟机,以便向 MTV 报告 vNIC 属性。
    9
    可选。在计划中为虚拟机指定网络接口模板。模板遵循 Go 模板语法,并可访问以下变量:
    • .networkName: 如果目标网络是 multus,请添加 Multus 网络附加定义的名称。否则,将此变量留空。
    • .networkNamespace :如果目标网络是 multus,请添加 Multus 网络附加定义所在的命名空间。
    • .networkType :指定网络类型。选项: multuspod
    • .NetworkIndex :网络接口的序列索引(0-based)。

      例子

    • "net-{{.NetworkIndex}}"
    • {{if eq .NetworkType "pod"}}pod{{else}}multus-{{.NetworkIndex}}{{end}}"

      变量名称不能超过 63 个字符。此规则适用于网络名称网络模板、PVC 名称模板、虚拟机名称模板和卷名称模板。

    10
    可选。为计划指定持久性卷声明(PVC)名称模板。模板遵循 Go 模板语法,并可访问以下变量:
    • .vmname: 虚拟机的名称。
    • .PlanName: 迁移计划的名称。
    • .DiskIndex :磁盘的初始卷索引。
    • .RootDiskIndex :根磁盘索引。
    • . shared : Options: true,用于非共享卷的共享卷为 false

      例子

    • "{{.vmname}}-disk-{{.DiskIndex}}"
    • "{{if eq .DiskIndex .RootDiskIndex}}root{{else}}data{{end}}-{{.DiskIndex}}"
    • "{{if .Shared}}shared-{{end}}{{.VmName}}-{{.DiskIndex}}"
    11
    可选:
    • 当设置为 true 时,MTV 会将一个或多个 rundonly 生成的字母数字字符添加到 PVC 名称中,以确保所有 PVC 都有唯一的名称。
    • 当设置为 false 时,如果您指定了 pvcNameTemplate,则 MTV 不会将此类 charchter 添加到 PVC 的名称中。

      警告

      如果将 pvcNameTemplateUseGenerateName 设置为 false,则生成的 PVC 名称可能不是唯一的,并可能导致冲突。

    12
    可选:在计划中为虚拟机指定卷接口名称模板。模板遵循 Go 模板语法,并可访问以下变量:
    • .PVCName: 使用这个卷挂载到虚拟机的 PVC 名称。
    • .VolumeIndex :卷接口(0)的 Sequential 索引。

      例子

    • "disk-{{.VolumeIndex}}"
    • "pvc-{{.PVCName}}"
    13
    您可以使用 idname 参数指定源虚拟机。
    14
    指定 VMware vSphere VM moRef。要检索 moRef,请参阅 检索 VMware vSphere moRef
    15
    可选:指定特定虚拟机的网络接口名称。覆盖 spec:networkNameTemplate 中设置的值。变量和示例,如调用 9 所示
    16
    可选:指定特定虚拟机的 PVC 名称。覆盖 spec:pvcNameTemplate 中设置的值。变量和示例如调用 10 所示
    17
    可选:指定特定虚拟机的卷名称。覆盖 spec:volumeNameTemplate 中设置的值。变量和示例,如调用 12 所示
    18
    可选: MTV 会自动为目标虚拟机的名称。您可以使用此参数并输入新名称来覆盖此名称。您输入的名称必须是唯一的,且必须是有效的 Kubernetes 子域。否则,迁移会自动失败。
    19
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    20
    指定 Hook CR 的名称。
    21
    在迁移完成后,允许的值是 PreHook、在迁移计划启动前或 PostHook
    重要

    当您将 VMware 7 虚拟机迁移到使用 CentOS 7.9 的 OpenShift 4.13+ 平台时,网络接口的名称会改变,虚拟机的静态 IP 配置无法正常工作。

  3. 创建运行 Plan CR 的 Migration 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <name_of_migration_cr>
      namespace: <namespace>
    spec:
      plan:
        name: <name_of_plan_cr>
        namespace: <namespace>
      cutover: <optional_cutover_time>
    EOF
    注意

    如果您指定了一个截止时间,请使用 ISO 8601 格式以及 UTC 时间偏移,例如 2024-04-04T01:23:45.678+09:00

重要

forklift-controller 存在一个无法协调迁移计划的问题,然后返回一个 HTTP 500 错误。当您只在虚拟机上指定用户权限时,会导致此问题。

在 MTV 中,您需要在数据中心级别添加权限,其中包括虚拟机使用的存储、网络、交换机等。然后您必须将权限传播到子元素。

如果您不想添加这个级别的权限,您必须手动将权限添加到虚拟机主机上的每个对象。

11.3.1. 检索 VMware vSphere moRef

当您使用命令行使用 Migration Toolkit for Virtualization (MTV)迁移带有 VMware vSphere 源供应商的虚拟机时,您需要了解 vSphere 中特定实体的受管对象引用(moRef),如数据存储、网络和虚拟机。

您可以从 Inventory 服务检索一个或多个 vSphere 实体的 moRef。然后,您可以使用每个 moRef 作为检索另一个实体的 moRef 的参考。

流程

  1. 为项目检索路由:

    Copy to Clipboard Toggle word wrap
    oc get route -n openshift-mtv
  2. 检索 Inventory 服务路由:

    Copy to Clipboard Toggle word wrap
    $ oc get route <inventory_service> -n openshift-mtv
  3. 检索访问令牌:

    Copy to Clipboard Toggle word wrap
    $ TOKEN=$(oc whoami -t)
  4. 检索 VMware vSphere 供应商的 moRef :

    Copy to Clipboard Toggle word wrap
    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/vsphere -k
  5. 检索 VMware vSphere 源供应商的数据存储:

    Copy to Clipboard Toggle word wrap
    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k

    输出示例

    Copy to Clipboard Toggle word wrap
    [
      {
        "id": "datastore-11",
        "parent": {
          "kind": "Folder",
          "id": "group-s5"
        },
        "path": "/Datacenter/datastore/v2v_general_porpuse_ISCSI_DC",
        "revision": 46,
        "name": "v2v_general_porpuse_ISCSI_DC",
        "selfLink": "providers/vsphere/01278af6-e1e4-4799-b01b-d5ccc8dd0201/datastores/datastore-11"
      },
      {
        "id": "datastore-730",
        "parent": {
          "kind": "Folder",
          "id": "group-s5"
        },
        "path": "/Datacenter/datastore/f01-h27-640-SSD_2",
        "revision": 46,
        "name": "f01-h27-640-SSD_2",
        "selfLink": "providers/vsphere/01278af6-e1e4-4799-b01b-d5ccc8dd0201/datastores/datastore-730"
      },
     ...

在本例中,数据存储 v2v_general_porpuse_ISCSI_DC 的 moRef 是 datastore-11,而数据存储 f01-h27-640-SSD_2 的 moRef 是 datastore-730

11.3.2. 使用共享磁盘迁移虚拟机

您可以使用 Migration Toolkit for Virtualization (MTV)迁移带有共享磁盘的 VMware 虚拟机。此功能仅适用于冷迁移,不适用于共享引导磁盘。

共享磁盘是附加到多个虚拟机的磁盘,并使用多写器选项。由于这些特性,共享磁盘很难迁移。

在某些情况下,虚拟机中的应用程序需要共享磁盘。数据库和集群文件系统是共享磁盘的主要用例。

MTV 版本 2.7.11 或更高版本在 Plan 自定义资源(CR)中包括一个名为 migrateSharedDisks 的参数,用来指示 MTV 在迁移共享磁盘或在迁移过程中跳过它们,如下所示:

  • 如果设置为 true,则 MTV 会迁移共享磁盘。MTV 使用 virt-v2v 的常规冷迁移流程,并标记共享持久性卷声明(PVC)。
  • 如果设置为 false,则 MTV 会跳过共享磁盘。MTV 使用 KubeVirt Containerized-Data-Importer (CDI)进行磁盘传输。

在磁盘传输后,MTV 会自动尝试找到已共享的 PVC 以及已迁移的共享磁盘并将其附加到虚拟机。

默认情况下,migrationSharedDisks 设置为 true

要成功使用共享磁盘迁移虚拟机,请创建两个 Plan CR,如下所示:

  • 在第一个 中,将 migrateSharedDisks 设置为 true

    MTV 迁移以下内容:

    • 所有共享磁盘。
    • 对于每个共享磁盘,附加的虚拟机之一。如果可能,选择 VM 以便计划不包含连接到多个虚拟机的任何共享磁盘。有关进一步指导,请参见以下图。
    • 附加到为这个计划选择的虚拟机的所有未共享磁盘。
  • 在第二秒中,将 migrateSharedDisks 设置为 false

    MTV 迁移以下内容:

    • 所有其他虚拟机。
    • 第二个 Plan CR 中虚拟机的未共享磁盘。

当 MTV 迁移具有共享磁盘的虚拟机时,它不会检查它是否已迁移该共享磁盘。因此,务必要在两者中分配虚拟机,以便每个共享磁盘都会迁移一次,且只迁移一次。

要了解如何为每个 Plan CR 分配虚拟机和共享磁盘,请考虑下面的两个数字。在两者中,plan1migrateSharedDisks 设置为 true,并且将 plan2 的 migrationSharedDisks 设置为 false

在第一个图中,会正确分配虚拟机和共享磁盘:

图 11.1. 正确分配的虚拟机和共享磁盘示例

成功迁移示例

plan1 迁移虚拟机 2 和 4,共享磁盘 1、2 和 3,以及虚拟机 2 和 4 的非共享磁盘。此计划中包含 VM 2 和 4,因为它们各自连接到所有共享磁盘。

计划2 迁移虚拟机 1 和 3 及其非共享磁盘。plan2 不会迁移连接至虚拟机 1 和 3 的共享磁盘,因为 migrateSharedDisks 设置为 false

MTV 迁移每个虚拟机及其磁盘,如下所示:

  1. plan1 中:

    1. 虚拟机 3、共享磁盘 1 和 2,以及附加到虚拟机 3 的非共享磁盘。
    2. VM 4 共享磁盘 3,以及附加到虚拟机 4 的非共享磁盘。
  2. plan2 中:

    1. 虚拟机 1 和附加到它的非共享磁盘。
    2. 虚拟机 2 和附加到它的非共享磁盘。

结果是,虚拟机 2 和 4,所有共享磁盘都会迁移,但只会迁移一次。MTV 能够将所有虚拟机重新关联到其磁盘,包括共享磁盘。

在第二个图中,没有正确分配虚拟机和共享磁盘:

图 11.2. 错误地分配了虚拟机和共享磁盘的示例

复杂的 cyclic 共享磁盘依赖项

在这种情况下,MTV 会迁移每个虚拟机及其磁盘,如下所示:

  1. plan1 中:

    1. 虚拟机 2、共享磁盘 1 和 2,以及附加到虚拟机 2 的非共享磁盘。
    2. VM 3、共享磁盘 2 和 3,以及附加到虚拟机 3 的非共享磁盘。
  2. plan2 中:

    1. 虚拟机 1 和附加到它的非共享磁盘。
    2. VM 4 和附加到它的非共享磁盘。

此迁移 "succeeds",但会产生问题:第一个 Plan CR 迁移共享磁盘 2 两次。您可以使用已知问题部分中讨论的两个临时解决方案之一来解决这个问题,这遵循流程。

流程

  1. 在 MTV 中,为共享磁盘创建迁移计划、连接到它们的最少虚拟机数量,以及这些虚拟机的未共享磁盘。
  2. 在 VMware 集群中,关闭附加到共享磁盘的所有虚拟机。
  3. 在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization
  4. 选择所需的计划。

    此时会打开 Plan 详情页面

  5. 点计划的 YAML 选项卡。
  6. 验证 migrateSharedDisks 是否已设置为 true

    migrateSharedDisks 设置为 true 的 Plan CR 示例

    Copy to Clipboard Toggle word wrap
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
     name: transfer-shared-disks
     namespace: openshift-mtv
    spec:
     map:
       network:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: NetworkMap
         name: vsphere-7gxbs
         namespace: openshift-mtv
         uid: a3c83db3-1cf7-446a-b996-84c618946362
       storage:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: StorageMap
         name: vsphere-mqp7b
         namespace: openshift-mtv
         uid: 20b43d4f-ded4-4798-b836-7c0330d552a0
     migrateSharedDisks: true
     provider:
       destination:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: Provider
         name: host
         namespace: openshift-mtv
         uid: abf4509f-1d5f-4ff6-b1f2-18206136922a
       source:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: Provider
         name: vsphere
         namespace: openshift-mtv
         uid: be4dc7ab-fedd-460a-acae-a850f6b9543f
     targetNamespace: openshift-mtv
     vms:
       - id: vm-69
         name: vm-1-with-shared-disks

  7. 启动第一个计划的迁移并等待它完成。
  8. 创建第二个 Plan CR,将所有其他虚拟机及其未共享磁盘迁移到与第一个目标命名空间相同的目标命名空间。
  9. 在 Red Hat OpenShift Web 控制台的 Plans for virtualization 页面中,选择新的计划。

    此时会打开 Plan 详情页面

  10. 点计划的 YAML 选项卡。
  11. migrateSharedDisks 设置为 false

    migrateSharedDisks 设置为 false 的 Plan CR 示例

    Copy to Clipboard Toggle word wrap
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
     name: skip-shared-disks
     namespace: openshift-mtv
    spec:
     map:
       network:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: NetworkMap
         name: vsphere-7gxbs
         namespace: openshift-mtv
         uid: a3c83db3-1cf7-446a-b996-84c618946362
       storage:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: StorageMap
         name: vsphere-mqp7b
         namespace: openshift-mtv
         uid: 20b43d4f-ded4-4798-b836-7c0330d552a0
     migrateSharedDisks: false
     provider:
       destination:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: Provider
         name: host
         namespace: openshift-mtv
         uid: abf4509f-1d5f-4ff6-b1f2-18206136922a
       source:
         apiVersion: forklift.konveyor.io/v1beta1
         kind: Provider
         name: vsphere
         namespace: openshift-mtv
         uid: be4dc7ab-fedd-460a-acae-a850f6b9543f
     targetNamespace: openshift-mtv
     vms:
       - id: vm-71
         name: vm-2-with-shared-disks

  12. 启动第二个计划的迁移并等待它完成。
  13. 验证所有共享磁盘是否已附加到与迁移前相同的虚拟机,并且没有重复。如果出现问题,请参阅下文中已知问题的讨论。
11.3.2.1. 已知问题
11.3.2.1.1. cyclic 共享磁盘依赖项

问题:带有 cyclic 共享磁盘依赖项的虚拟机无法成功迁移。

解释:当将 migrateSharedDisks 设置为 true 时,MTV 会迁移计划中的每个虚拟机,一个,一个,以及附加到它的任何共享磁盘,而无需确定是否已迁移共享磁盘。

对于 2 个虚拟机共享一个磁盘,则没有问题。MTV 将共享磁盘传输,并在迁移后将 2 个虚拟机附加到共享磁盘。

但是,如果 3 个或更多虚拟机之间存在共享磁盘的依赖项,则 MTV 会重复或省略其中一个共享磁盘。下图展示了此问题的最简单的版本。

图 11.3. cyclic 共享磁盘的简单示例

简单 cyclic 共享磁盘依赖项

在这种情况下,无法在同一 Plan CR 中迁移虚拟机和共享磁盘。虽然可以使用 migrateSharedDisks 和 2 Plan CR 解决此问题,但它演示了在迁移使用共享磁盘的虚拟机时必须避免的基本问题。

11.3.2.1.2. 临时解决方案

如前文所述,尝试创建 2 个 Plan CR,在其中迁移每个共享磁盘一次。但是,如果迁移导致共享磁盘重复或未传输,您可以使用以下临时解决方案之一:

  • 重复其中一个共享磁盘
  • "删除"其中一个共享磁盘
11.3.2.1.2.1. 复制共享磁盘

在下图中,VM 2 和 3 使用第一个计划中的共享磁盘迁移,并在第二个计划中迁移 VM 1。这样做会破坏 cyclic 依赖项,但这个临时解决方案有缺陷:它会造成重复的共享磁盘 3。解决方案是删除重复的 PV 并再次迁移虚拟机 1。

图 11.4. 重复的共享磁盘

复制共享磁盘

优点:

源虚拟机不会受到影响。

缺点:

一个共享磁盘传输两次,因此您需要手动删除重复的磁盘,并在迁移后将 VM 3 重新连接到 Red Hat OpenShift 中的共享磁盘 3。

11.3.3. 使用命令行界面取消迁移

您可以使用命令行界面(CLI)在迁移过程中取消整个迁移或特定虚拟机的迁移。

取消整个迁移

  • 删除 Migration CR:

    Copy to Clipboard Toggle word wrap
    $ oc delete migration <migration> -n <namespace> 
    1
    1
    指定 Migration CR 的名称。

取消特定虚拟机的迁移

  1. 将特定的虚拟机添加到 Migration 清单的 spec.cancel 块中:

    取消两个虚拟机的迁移的 YAML 示例

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <migration>
      namespace: <namespace>
    ...
    spec:
      cancel:
      - id: vm-102 
    1
    
      - id: vm-203
        name: rhel8-vm
    EOF

    1
    您可以使用 id 键或 name 键指定虚拟机。

    id 键的值是受管对象的引用(VMware VM),或 VM UUID(RHV VM)。

  2. 检索 Migration CR 以监控剩余的虚拟机的进度:

    Copy to Clipboard Toggle word wrap
    $ oc get migration/<migration> -n <namespace> -o yaml

11.4. 从 Red Hat Virtualization 源供应商迁移

您可以使用命令行界面(CLI)从 Red Hat Virtualization (RHV)源供应商迁移。

先决条件

如果您要迁移使用直接 LUN 磁盘的虚拟机,请确保虚拟机应在 OpenShift Virtualization 目标集群中运行的节点可以访问后端存储。

注意
  • 与从源提供程序 复制到目标 提供程序的磁盘镜像不同,LUN会从 源提供程序中的 虚拟机分离,然后附加到目标提供程序中创建的虚拟机(VM)。
  • 在迁移过程中,当需要回退到源供应商时,不会从源供应商中删除 LUN。但是,在将 LUN 重新附加到源供应商中的虚拟机之前,请确保目标环境中的虚拟机不会同时使用 LUN,这可能会导致数据崩溃。

流程

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

    Copy to Clipboard Toggle word wrap
    $ 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: ovirt
        createdForResourceType: providers
    type: Opaque
    stringData:
      user: <user> 
    2
    
      password: <password> 
    3
    
      insecureSkipVerify: <"true"/"false"> 
    4
    
      cacert: | 
    5
    
        <ca_certificate>
      url: <api_end_point> 
    6
    
    EOF
    1
    ownerReferences 部分是可选的。
    2
    指定 RHV Manager 用户。
    3
    指定用户密码。
    4
    指定 "true" 以跳过证书验证,并指定 "false" 来验证证书。如果没有指定,则默认为 "false "。跳过证书验证会进行不安全的迁移,然后不需要证书。不安全的迁移意味着传输的数据通过安全连接发送,并可能会公开敏感数据。
    5
    输入 Manager CA 证书,除非被第三方证书替代,在这种情况下,输入 Manager Apache CA 证书。您可以在 https://<engine_host>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA 中检索 Manager CA 证书。
    6
    指定 API 端点 URL,例如 https://<engine_host>/ovirt-engine/api
  1. 为源供应商创建 Provider 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: ovirt
      url: <api_end_point> 
    1
    
      secret:
        name: <secret> 
    2
    
        namespace: <namespace>
    EOF
    1
    指定 API 端点的 URL,例如 https://<engine_host>/ovirt-engine/api
    2
    指定供应商 Secret CR 的名称。
  1. 创建 NetworkMap 清单来映射源和目标网络:

    Copy to Clipboard Toggle word wrap
    $  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>
            name: <source_network_name>
        - destination:
            name: <network_attachment_definition> 
    3
    
            namespace: <network_attachment_definition_namespace> 
    4
    
            type: multus
          source:
            id: <source_network_id>
            name: <source_network_name>
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值是 podmultus
    2
    您可以使用 idname 参数来指定源网络。对于 id,请指定 RHV 网络通用唯一 ID (UUID)。
    3
    为每个额外 OpenShift Virtualization 网络指定网络附加定义。
    4
    仅在 类型 multus 时才需要。指定 OpenShift Virtualization 网络附加定义的命名空间。
  1. 创建 StorageMap 清单来映射源和目标存储:

    Copy to Clipboard Toggle word wrap
    $ 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_storage_domain> 
    2
    
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 ReadWriteOnceReadWriteMany
    2
    指定 RHV 存储域 UUID。例如,f2737930-b567-451a-9ceb-2887f6207009
  2. 可选:在 Plan CR 中指定的阶段创建一个 Hook 清单以在虚拟机中运行自定义代码:

    Copy to Clipboard Toggle word wrap
    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Hook
    metadata:
      name: <hook>
      namespace: <namespace>
    spec:
      image: quay.io/kubev2v/hook-runner
      serviceAccount:<service account> 
    1
    
      playbook: |
        LS0tCi0gbm... 
    2
    
    EOF
    1
    可选: Red Hat OpenShift 服务帐户。使用 serviceAccount 参数修改任何集群资源。
    2
    base64 编码的 Ansible Playbook.如果指定了 playbook,镜像 必须包含 ansible-runner
    注意

    您可以使用默认 hook-runner 镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。

  1. 输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。

    您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。

    配置 IP 地址可让接口访问配置的网关。

    Copy to Clipboard Toggle word wrap
    $ oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: <name_of_transfer_network>
      namespace: <namespace>
      annotations:
        forklift.konveyor.io/route: <IP_address>
  2. 为迁移创建 Plan 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
    metadata:
      name: <plan> 
    1
    
      namespace: <namespace>
      preserveClusterCpuModel: true 
    2
    
    spec:
      warm: false 
    3
    
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
      map: 
    4
    
        network: 
    5
    
          name: <network_map> 
    6
    
          namespace: <namespace>
        storage: 
    7
    
          name: <storage_map> 
    8
    
          namespace: <namespace>
      targetNamespace: <target_namespace>
      vms: 
    9
    
        - id: <source_vm1> 
    10
    
        - name: <source_vm2>
          hooks: 
    11
    
            - hook:
                namespace: <namespace>
                name: <hook> 
    12
    
              step: <step> 
    13
    
    EOF
    1
    指定 Plan CR 的名称。
    2
    请参见以下注释。
    3
    指定迁移是温迁移还是冷迁移。如果您指定了 warm 迁移,且没有为 Migration 清单中的 cutover 参数指定一个值,则只有 precopy 阶段将运行。
    4
    每个计划仅指定一个网络映射和一个存储映射。
    5
    指定一个网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    6
    指定 NetworkMap CR 的名称。
    7
    指定一个存储映射,即使要迁移的虚拟机没有使用磁盘镜像分配。在这种情况下,映射可以为空。
    8
    指定 StorageMap CR 的名称。
    9
    您可以使用 idname 参数指定源虚拟机。
    10
    指定 RHV VM UUID。
    11
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    12
    指定 Hook CR 的名称。
    13
    在迁移完成后,允许的值是 PreHook、在迁移计划启动前或 PostHook
    注意
    • 如果使用自定义 CPU 模型设置了迁移的机器,它将使用目标集群中的 CPU 模型设置,无论 preserveClusterCpuModel 的设置是什么。
    • 如果没有使用 自定义 CPU 模型来设置迁移的机器:

      • 如果 preserveClusterCpuModel 设为 'true',则 MTV 会在 RHV 中运行时根据集群的配置检查虚拟机的 CPU 模型,然后使用该 CPU 模型设置迁移的虚拟机。
      • 如果 preserveClusterCpuModel 设为 'false',则 MTV 不会设置 CPU 类型,并使用目标集群的默认 CPU 模型设置虚拟机。
  3. 创建运行 Plan CR 的 Migration 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <name_of_migration_cr>
      namespace: <namespace>
    spec:
      plan:
        name: <name_of_plan_cr>
        namespace: <namespace>
      cutover: <optional_cutover_time>
    EOF
    注意

    如果您指定了一个截止时间,请使用 ISO 8601 格式以及 UTC 时间偏移,例如 2024-04-04T01:23:45.678+09:00

11.4.1. 使用命令行界面取消迁移

您可以使用命令行界面(CLI)在迁移过程中取消整个迁移或特定虚拟机的迁移。

取消整个迁移

  • 删除 Migration CR:

    Copy to Clipboard Toggle word wrap
    $ oc delete migration <migration> -n <namespace> 
    1
    1
    指定 Migration CR 的名称。

取消特定虚拟机的迁移

  1. 将特定的虚拟机添加到 Migration 清单的 spec.cancel 块中:

    取消两个虚拟机的迁移的 YAML 示例

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <migration>
      namespace: <namespace>
    ...
    spec:
      cancel:
      - id: vm-102 
    1
    
      - id: vm-203
        name: rhel8-vm
    EOF

    1
    您可以使用 id 键或 name 键指定虚拟机。

    id 键的值是受管对象的引用(VMware VM),或 VM UUID(RHV VM)。

  2. 检索 Migration CR 以监控剩余的虚拟机的进度:

    Copy to Clipboard Toggle word wrap
    $ oc get migration/<migration> -n <namespace> -o yaml

11.5. 从 OpenStack 源供应商迁移

您可以使用命令行界面(CLI)从 OpenStack 源提供程序迁移。

流程

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

    Copy to Clipboard Toggle word wrap
    $ 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: openstack
        createdForResourceType: providers
    type: Opaque
    stringData:
      user: <user> 
    2
    
      password: <password> 
    3
    
      insecureSkipVerify: <"true"/"false"> 
    4
    
      domainName: <domain_name>
      projectName: <project_name>
      regionName: <region_name>
      cacert: | 
    5
    
        <ca_certificate>
      url: <api_end_point> 
    6
    
    EOF
    1
    ownerReferences 部分是可选的。
    2
    指定 OpenStack 用户。
    3
    指定用户 OpenStack 密码。
    4
    指定 "true" 以跳过证书验证,并指定 "false" 来验证证书。如果没有指定,则默认为 "false "。跳过证书验证会进行不安全的迁移,然后不需要证书。不安全的迁移意味着传输的数据通过安全连接发送,并可能会公开敏感数据。
    5
    如果没有设置此字段并禁用 跳过证书验证 时,MTV 会尝试使用系统 CA。
    6
    指定 API 端点 URL,例如 https://<identity_service>/v3
  1. 为源供应商创建 Provider 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: openstack
      url: <api_end_point> 
    1
    
      secret:
        name: <secret> 
    2
    
        namespace: <namespace>
    EOF
    1
    指定 API 端点的 URL。
    2
    指定供应商 Secret CR 的名称。
  1. 创建 NetworkMap 清单来映射源和目标网络:

    Copy to Clipboard Toggle word wrap
    $  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>
            name: <source_network_name>
        - destination:
            name: <network_attachment_definition> 
    3
    
            namespace: <network_attachment_definition_namespace> 
    4
    
            type: multus
          source:
            id: <source_network_id>
            name: <source_network_name>
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值是 podmultus
    2
    您可以使用 idname 参数来指定源网络。对于 id,指定 OpenStack 网络 UUID。
    3
    为每个额外 OpenShift Virtualization 网络指定网络附加定义。
    4
    仅在 类型 multus 时才需要。指定 OpenShift Virtualization 网络附加定义的命名空间。
  1. 创建 StorageMap 清单来映射源和目标存储:

    Copy to Clipboard Toggle word wrap
    $ 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_volume_type> 
    2
    
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 ReadWriteOnceReadWriteMany
    2
    指定 OpenStack volume_type UUID。例如,f2737930-b567-451a-9ceb-2887f6207009
  2. 可选:在 Plan CR 中指定的阶段创建一个 Hook 清单以在虚拟机中运行自定义代码:

    Copy to Clipboard Toggle word wrap
    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Hook
    metadata:
      name: <hook>
      namespace: <namespace>
    spec:
      image: quay.io/kubev2v/hook-runner
      serviceAccount:<service account> 
    1
    
      playbook: |
        LS0tCi0gbm... 
    2
    
    EOF
    1
    可选: Red Hat OpenShift 服务帐户。使用 serviceAccount 参数修改任何集群资源。
    2
    base64 编码的 Ansible Playbook.如果指定了 playbook,镜像 必须包含 ansible-runner
    注意

    您可以使用默认 hook-runner 镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。

  1. 输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。

    您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。

    配置 IP 地址可让接口访问配置的网关。

    Copy to Clipboard Toggle word wrap
    $ oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: <name_of_transfer_network>
      namespace: <namespace>
      annotations:
        forklift.konveyor.io/route: <IP_address>
  2. 为迁移创建 Plan 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
    metadata:
      name: <plan> 
    1
    
      namespace: <namespace>
    spec:
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
      map: 
    2
    
        network: 
    3
    
          name: <network_map> 
    4
    
          namespace: <namespace>
        storage: 
    5
    
          name: <storage_map> 
    6
    
          namespace: <namespace>
      targetNamespace: <target_namespace>
      vms: 
    7
    
        - id: <source_vm1> 
    8
    
        - name: <source_vm2>
          hooks: 
    9
    
            - hook:
                namespace: <namespace>
                name: <hook> 
    10
    
              step: <step> 
    11
    
    EOF
    1
    指定 Plan CR 的名称。
    2
    每个计划仅指定一个网络映射和一个存储映射。
    3
    指定网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    4
    指定 NetworkMap CR 的名称。
    5
    指定存储映射,即使要迁移的虚拟机没有使用磁盘镜像分配。在这种情况下,映射可以为空。
    6
    指定 StorageMap CR 的名称。
    7
    您可以使用 idname 参数指定源虚拟机。
    8
    指定 OpenStack VM UUID。
    9
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    10
    指定 Hook CR 的名称。
    11
    在迁移完成后,允许的值是 PreHook、在迁移计划启动前或 PostHook
  3. 创建运行 Plan CR 的 Migration 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <name_of_migration_cr>
      namespace: <namespace>
    spec:
      plan:
        name: <name_of_plan_cr>
        namespace: <namespace>
      cutover: <optional_cutover_time>
    EOF
    注意

    如果您指定了一个截止时间,请使用 ISO 8601 格式以及 UTC 时间偏移,例如 2024-04-04T01:23:45.678+09:00

11.5.1. 使用命令行界面取消迁移

您可以使用命令行界面(CLI)在迁移过程中取消整个迁移或特定虚拟机的迁移。

取消整个迁移

  • 删除 Migration CR:

    Copy to Clipboard Toggle word wrap
    $ oc delete migration <migration> -n <namespace> 
    1
    1
    指定 Migration CR 的名称。

取消特定虚拟机的迁移

  1. 将特定的虚拟机添加到 Migration 清单的 spec.cancel 块中:

    取消两个虚拟机的迁移的 YAML 示例

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <migration>
      namespace: <namespace>
    ...
    spec:
      cancel:
      - id: vm-102 
    1
    
      - id: vm-203
        name: rhel8-vm
    EOF

    1
    您可以使用 id 键或 name 键指定虚拟机。

    id 键的值是受管对象的引用(VMware VM),或 VM UUID(RHV VM)。

  2. 检索 Migration CR 以监控剩余的虚拟机的进度:

    Copy to Clipboard Toggle word wrap
    $ oc get migration/<migration> -n <namespace> -o yaml

11.6. 从开放虚拟设备(OVA)源提供商迁移

您可以使用命令行界面(CLI)从由 VMware vSphere 创建的开放虚拟设备(OVA)文件迁移到源供应商。

流程

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

    Copy to Clipboard Toggle word wrap
    $ 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: ova
        createdForResourceType: providers
    type: Opaque
    stringData:
      url: <nfs_server:/nfs_path> 
    2
    
    EOF
    1
    ownerReferences 部分是可选的。
    2
    其中: nfs_server 是创建共享的服务器的 IP 或主机名,nfs_path 是存储 OVA 文件的服务器上的路径。
  1. 为源供应商创建 Provider 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: ova
      url:  <nfs_server:/nfs_path> 
    1
    
      secret:
        name: <secret> 
    2
    
        namespace: <namespace>
    EOF
    1
    其中: nfs_server 是创建共享的服务器的 IP 或主机名,nfs_path 是存储 OVA 文件的服务器上的路径。
    2
    指定供应商 Secret CR 的名称。
  1. 创建 NetworkMap 清单来映射源和目标网络:

    Copy to Clipboard Toggle word wrap
    $  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:
            id: <source_network_id> 
    2
    
        - destination:
            name: <network_attachment_definition> 
    3
    
            namespace: <network_attachment_definition_namespace> 
    4
    
            type: multus
          source:
            id: <source_network_id>
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值是 podmultus
    2
    指定 OVA 网络通用唯一 ID (UUID)。
    3
    为每个额外 OpenShift Virtualization 网络指定网络附加定义。
    4
    仅在 类型 multus 时才需要。指定 OpenShift Virtualization 网络附加定义的命名空间。
  1. 创建 StorageMap 清单来映射源和目标存储:

    Copy to Clipboard Toggle word wrap
    $ 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:
            name:  Dummy storage for source provider <provider_name> 
    2
    
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 ReadWriteOnceReadWriteMany
    2
    对于 OVA,StorageMap 只能将 OVA 中的所有磁盘相关联的单个存储映射到目的地上的存储类。因此,存储在 UI 中被称为 "Dummy storage for source provider <provider_name>"。在 YAML 中,像上面显示一样编写短语,没有引号,并将 <provider_name> 替换为提供程序的实际名称。
  2. 可选:在 Plan CR 中指定的阶段创建一个 Hook 清单以在虚拟机中运行自定义代码:

    Copy to Clipboard Toggle word wrap
    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Hook
    metadata:
      name: <hook>
      namespace: <namespace>
    spec:
      image: quay.io/kubev2v/hook-runner
      serviceAccount:<service account> 
    1
    
      playbook: |
        LS0tCi0gbm... 
    2
    
    EOF
    1
    可选: Red Hat OpenShift 服务帐户。使用 serviceAccount 参数修改任何集群资源。
    2
    base64 编码的 Ansible Playbook.如果指定了 playbook,镜像 必须包含 ansible-runner
    注意

    您可以使用默认 hook-runner 镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。

  1. 输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。

    您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。

    配置 IP 地址可让接口访问配置的网关。

    Copy to Clipboard Toggle word wrap
    $ oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: <name_of_transfer_network>
      namespace: <namespace>
      annotations:
        forklift.konveyor.io/route: <IP_address>
  2. 为迁移创建 Plan 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
    metadata:
      name: <plan> 
    1
    
      namespace: <namespace>
    spec:
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
      map: 
    2
    
        network: 
    3
    
          name: <network_map> 
    4
    
          namespace: <namespace>
        storage: 
    5
    
          name: <storage_map> 
    6
    
          namespace: <namespace>
      targetNamespace: <target_namespace>
      vms: 
    7
    
        - id: <source_vm1> 
    8
    
        - name: <source_vm2>
          hooks: 
    9
    
            - hook:
                namespace: <namespace>
                name: <hook> 
    10
    
              step: <step> 
    11
    
    EOF
    1
    指定 Plan CR 的名称。
    2
    每个计划仅指定一个网络映射和一个存储映射。
    3
    指定网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    4
    指定 NetworkMap CR 的名称。
    5
    指定一个存储映射,即使要迁移的虚拟机没有使用磁盘镜像分配。在这种情况下,映射可以为空。
    6
    指定 StorageMap CR 的名称。
    7
    您可以使用 idname 参数指定源虚拟机。
    8
    指定 OVA 虚拟机 UUID。
    9
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    10
    指定 Hook CR 的名称。
    11
    在迁移完成后,允许的值是 PreHook、在迁移计划启动前或 PostHook
  3. 创建运行 Plan CR 的 Migration 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <name_of_migration_cr>
      namespace: <namespace>
    spec:
      plan:
        name: <name_of_plan_cr>
        namespace: <namespace>
      cutover: <optional_cutover_time>
    EOF
    注意

    如果您指定了一个截止时间,请使用 ISO 8601 格式以及 UTC 时间偏移,例如 2024-04-04T01:23:45.678+09:00

11.6.1. 使用命令行界面取消迁移

您可以使用命令行界面(CLI)在迁移过程中取消整个迁移或特定虚拟机的迁移。

取消整个迁移

  • 删除 Migration CR:

    Copy to Clipboard Toggle word wrap
    $ oc delete migration <migration> -n <namespace> 
    1
    1
    指定 Migration CR 的名称。

取消特定虚拟机的迁移

  1. 将特定的虚拟机添加到 Migration 清单的 spec.cancel 块中:

    取消两个虚拟机的迁移的 YAML 示例

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <migration>
      namespace: <namespace>
    ...
    spec:
      cancel:
      - id: vm-102 
    1
    
      - id: vm-203
        name: rhel8-vm
    EOF

    1
    您可以使用 id 键或 name 键指定虚拟机。

    id 键的值是受管对象的引用(VMware VM),或 VM UUID(RHV VM)。

  2. 检索 Migration CR 以监控剩余的虚拟机的进度:

    Copy to Clipboard Toggle word wrap
    $ oc get migration/<migration> -n <namespace> -o yaml

11.7. 从 Red Hat OpenShift Virtualization 源供应商迁移

您可以使用 Red Hat OpenShift Virtualization 供应商作为源供应商,或作为目的地供应商。您可以使用命令行界面(CLI)从 OpenShift Virtualization 源供应商迁移。

流程

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

    Copy to Clipboard Toggle word wrap
    $ 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: openshift
        createdForResourceType: providers
    type: Opaque
    stringData:
      token: <token> 
    2
    
      password: <password> 
    3
    
      insecureSkipVerify: <"true"/"false"> 
    4
    
      cacert: | 
    5
    
        <ca_certificate>
      url: <api_end_point> 
    6
    
    EOF
    1
    ownerReferences 部分是可选的。
    2
    为具有 cluster-admin 权限的服务帐户指定令牌。如果 令牌和 url 都留空,则使用本地 OpenShift 集群。
    3
    指定用户密码。
    4
    指定 "true" 以跳过证书验证,并指定 "false" 来验证证书。如果没有指定,则默认为 "false "。跳过证书验证会进行不安全的迁移,然后不需要证书。不安全的迁移意味着传输的数据通过安全连接发送,并可能会公开敏感数据。
    5
    如果没有设置此字段并禁用 跳过证书验证 时,MTV 会尝试使用系统 CA。
    6
    指定 API 服务器的端点的 URL。
  1. 为源供应商创建 Provider 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: openshift
      url: <api_end_point> 
    1
    
      secret:
        name: <secret> 
    2
    
        namespace: <namespace>
    EOF
    1
    指定 API 服务器的端点的 URL。
    2
    指定供应商 Secret CR 的名称。
  1. 创建 NetworkMap 清单来映射源和目标网络:

    Copy to Clipboard Toggle word wrap
    $  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:
            name: <network_name>
            type: pod
        - destination:
            name: <network_attachment_definition> 
    2
    
            namespace: <network_attachment_definition_namespace> 
    3
    
            type: multus
          source:
            name: <network_attachment_definition>
            namespace: <network_attachment_definition_namespace>
            type: multus
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值是 podmultus
    2
    为每个额外 OpenShift Virtualization 网络指定网络附加定义。使用 namespace 属性 或构建的名称来指定命名空间:<network_ namespace>/<network_name >。
    3
    仅在 类型 multus 时才需要。指定 OpenShift Virtualization 网络附加定义的命名空间。
  1. 创建 StorageMap 清单来映射源和目标存储:

    Copy to Clipboard Toggle word wrap
    $ 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:
            name: <storage_class>
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 ReadWriteOnceReadWriteMany
  2. 可选:在 Plan CR 中指定的阶段创建一个 Hook 清单以在虚拟机中运行自定义代码:

    Copy to Clipboard Toggle word wrap
    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Hook
    metadata:
      name: <hook>
      namespace: <namespace>
    spec:
      image: quay.io/kubev2v/hook-runner
      serviceAccount:<service account> 
    1
    
      playbook: |
        LS0tCi0gbm... 
    2
    
    EOF
    1
    可选: Red Hat OpenShift 服务帐户。使用 serviceAccount 参数修改任何集群资源。
    2
    base64 编码的 Ansible Playbook.如果指定了 playbook,镜像 必须包含 ansible-runner
    注意

    您可以使用默认 hook-runner 镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。

  1. 输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。

    您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。

    配置 IP 地址可让接口访问配置的网关。

    Copy to Clipboard Toggle word wrap
    $ oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: <name_of_transfer_network>
      namespace: <namespace>
      annotations:
        forklift.konveyor.io/route: <IP_address>
  2. 为迁移创建 Plan 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
    metadata:
      name: <plan> 
    1
    
      namespace: <namespace>
    spec:
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
      map: 
    2
    
        network: 
    3
    
          name: <network_map> 
    4
    
          namespace: <namespace>
        storage: 
    5
    
          name: <storage_map> 
    6
    
          namespace: <namespace>
      targetNamespace: <target_namespace>
      vms:
        - name: <source_vm>
          namespace: <namespace>
          hooks: 
    7
    
            - hook:
                namespace: <namespace>
                name: <hook> 
    8
    
              step: <step> 
    9
    
    EOF
    1
    指定 Plan CR 的名称。
    2
    每个计划仅指定一个网络映射和一个存储映射。
    3
    指定网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    4
    指定 NetworkMap CR 的名称。
    5
    指定存储映射,即使要迁移的虚拟机没有使用磁盘镜像分配。在这种情况下,映射可以为空。
    6
    指定 StorageMap CR 的名称。
    7
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    8
    指定 Hook CR 的名称。
    9
    在迁移完成后,允许的值是 PreHook、在迁移计划启动前或 PostHook
  3. 创建运行 Plan CR 的 Migration 清单:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <name_of_migration_cr>
      namespace: <namespace>
    spec:
      plan:
        name: <name_of_plan_cr>
        namespace: <namespace>
      cutover: <optional_cutover_time>
    EOF
    注意

    如果您指定了一个截止时间,请使用 ISO 8601 格式以及 UTC 时间偏移,例如 2024-04-04T01:23:45.678+09:00

11.7.1. 使用命令行界面取消迁移

您可以使用命令行界面(CLI)在迁移过程中取消整个迁移或特定虚拟机的迁移。

取消整个迁移

  • 删除 Migration CR:

    Copy to Clipboard Toggle word wrap
    $ oc delete migration <migration> -n <namespace> 
    1
    1
    指定 Migration CR 的名称。

取消特定虚拟机的迁移

  1. 将特定的虚拟机添加到 Migration 清单的 spec.cancel 块中:

    取消两个虚拟机的迁移的 YAML 示例

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <migration>
      namespace: <namespace>
    ...
    spec:
      cancel:
      - id: vm-102 
    1
    
      - id: vm-203
        name: rhel8-vm
    EOF

    1
    您可以使用 id 键或 name 键指定虚拟机。

    id 键的值是受管对象的引用(VMware VM),或 VM UUID(RHV VM)。

  2. 检索 Migration CR 以监控剩余的虚拟机的进度:

    Copy to Clipboard Toggle word wrap
    $ oc get migration/<migration> -n <namespace> -o yaml

第 12 章 高级迁移选项

12.1. 为 warm 迁移更改预复制间隔

您可以通过修补 ForkliftController 自定义资源(CR)来更改快照间隔。

流程

  • ForkliftController CR 进行补丁:

    Copy to Clipboard Toggle word wrap
    $ oc patch forkliftcontroller/<forklift-controller> -n openshift-mtv -p '{"spec": {"controller_precopy_interval": <60>}}' --type=merge 
    1
    1
    以分钟为单位指定 precopy 间隔。默认值为 60

    您不需要重启 forklift-controller pod。

12.2. 为 Validation 服务创建自定义规则

Validation 服务使用 Open Policy Agent(OPA)策略规则来检查要迁移的每个虚拟机(VM)的适用性。Validation 服务为每个虚拟机生成 问题 列表,它们作为虚拟机属性存储在 Provider Inventory 服务中。Web 控制台显示供应商清单中的每个虚拟机的顾虑。

您可以创建自定义规则来扩展 Validation 服务的默认规则集。例如,您可以创建一个规则来检查虚拟机是否有多个磁盘。

12.2.1. 关于 Rego 文件

验证规则使用 Rego 编写,即 Open Policy Agent (OPA) 原生查询语言。规则作为 .rego 文件存储在 Validation pod 的 /usr/share/opa/policies/io/konveyor/forklift/<provider> 目录中。

每个验证规则都在单独的 .rego 文件中定义,以及对特定条件的测试。如果条件评估为 true,则该规则会将 {"category", "label", "assessment"} hash 添加到 concerns 中。concerns 内容将添加到虚拟机清单记录中的 concerns 键中。Web 控制台显示供应商清单中每个虚拟机的 concerns 键的内容。

以下 .rego 文件示例检查在 VMware 虚拟机的集群中启用了分布式资源调度:

drs_enabled.rego 示例

Copy to Clipboard Toggle word wrap
package io.konveyor.forklift.vmware 
1


has_drs_enabled {
    input.host.cluster.drsEnabled 
2

}

concerns[flag] {
    has_drs_enabled
    flag := {
        "category": "Information",
        "label": "VM running in a DRS-enabled cluster",
        "assessment": "Distributed resource scheduling is not currently supported by OpenShift Virtualization. The VM can be migrated but it will not have this feature in the target environment."
    }
}

1
每个验证规则都在软件包中定义。软件包命名空间是 io.konveyor.forklift.vmware(VMware)和 io.konveyor.forklift.ovirt(Red Hat Virtualization)。
2
查询参数基于 Validation 服务 JSON 的 input 键。

12.2.2. 检查默认验证规则

在创建自定义规则前,您必须检查 Validation 服务的默认规则,以确保您不会创建重新定义现有默认值的规则。

示例:如果默认规则包含行 default valid_input = false,并且您创建一个包含行 default valid_input = true,则 Validation 服务将不会启动。

流程

  1. 连接到 Validation pod 的终端:

    Copy to Clipboard Toggle word wrap
    $ oc rsh <validation_pod>
  2. 进入您的供应商的 OPA 策略目录:

    Copy to Clipboard Toggle word wrap
    $ cd /usr/share/opa/policies/io/konveyor/forklift/<provider> 
    1
    1
    指定 vmwareovirt
  3. 搜索默认策略:

    Copy to Clipboard Toggle word wrap
    $ grep -R "default" *

12.2.3. 创建验证规则

您可以通过将包含规则的配置映射自定义资源(CR)应用到 Validation 服务来创建验证规则。

重要
  • 如果您创建与现有规则相同的规则,Validation 服务将使用规则执行 OR 操作。
  • 如果您创建使用默认规则迭代的规则,则 Validation 服务将不会启动。

验证规则示例

验证规则基于由 Provider Inventory 服务收集的虚拟机(VM)属性。

例如,VMware API 使用此路径来检查 VMware 虚拟机是否配置了 NUMA 节点关联性:MOR:VirtualMachine.config.extraConfig["numa.nodeAffinity"]

Provider Inventory 服务使用列表值简化了此配置并返回一个可测试属性:

Copy to Clipboard Toggle word wrap
"numaNodeAffinity": [
    "0",
    "1"
],

您可以根据此属性创建一个 Rego 查询,并将其添加到 forklift-validation-config 配置映射中:

Copy to Clipboard Toggle word wrap
`count(input.numaNodeAffinity) != 0`

流程

  1. 根据以下示例创建配置映射 CR:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: <forklift-validation-config>
      namespace: openshift-mtv
    data:
      vmware_multiple_disks.rego: |-
        package <provider_package> 
    1
    
    
        has_multiple_disks { 
    2
    
          count(input.disks) > 1
        }
    
        concerns[flag] {
          has_multiple_disks 
    3
    
            flag := {
              "category": "<Information>", 
    4
    
              "label": "Multiple disks detected",
              "assessment": "Multiple disks detected on this VM."
            }
        }
    EOF
    1
    指定供应商软件包名称。允许的值是 VMware 的 io.konveyor.forklift.vmwareio.konveyor.forklift.ovirt
    2
    指定 concerns 名称和 Rego 查询。
    3
    指定 concerns 名称和 flag 参数值。
    4
    允许的值是 Critical, Warning, 和 Information
  2. 通过将 forklift-controller 部署扩展到 0 来停止 Validation pod:

    Copy to Clipboard Toggle word wrap
    $ oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
  3. 通过将 forklift-controller 部署扩展到 1 来启动 Validation pod:

    Copy to Clipboard Toggle word wrap
    $ oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
  4. 检查 Validation pod 日志,以验证 pod 是否已启动:

    Copy to Clipboard Toggle word wrap
    $ oc logs -f <validation_pod>

    如果自定义规则与默认规则冲突,则 Validation pod 将不会启动。

  5. 删除源供应商:

    Copy to Clipboard Toggle word wrap
    $ oc delete provider <provider> -n openshift-mtv
  6. 添加源供应商以应用新规则:

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <provider>
      namespace: openshift-mtv
    spec:
      type: <provider_type> 
    1
    
      url: <api_end_point> 
    2
    
      secret:
        name: <secret> 
    3
    
        namespace: openshift-mtv
    EOF
    1
    允许的值有 ovirtvsphereopenstack
    2
    指定 API 端点 URL,例如 https://<vCenter_host>/sdk for vSphere, https://<engine_host>/ovirt-engine/api for RHV, 或 https://<identity_service>/v3 (OpenStack)。
    3
    指定供应商 Secret CR 的名称。

您必须在创建自定义规则后更新规则版本,以便 Inventory 服务检测到更改并验证虚拟机。

12.2.4. 更新清单规则版本

每次更新规则时,您必须更新 inventory 规则版本,以便 Provider Inventory 服务检测到更改并触发 Validation 服务。

规则版本记录在每个供应商的 rules_version.rego 文件中。

流程

  1. 检索当前的规则版本:

    Copy to Clipboard Toggle word wrap
    $ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version 
    1

    输出示例

    Copy to Clipboard Toggle word wrap
    {
       "result": {
           "rules_version": 5
       }
    }

  2. 连接到 Validation pod 的终端:

    Copy to Clipboard Toggle word wrap
    $ oc rsh <validation_pod>
  3. 更新 /usr/share/opa/policies/io/konveyor/forklift/<provider>/rules_version.rego 文件中的规则版本。
  4. Validation pod 终端注销。
  5. 验证更新的规则版本:

    Copy to Clipboard Toggle word wrap
    $ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version 
    1

    输出示例

    Copy to Clipboard Toggle word wrap
    {
       "result": {
           "rules_version": 6
       }
    }

12.3. 检索库存服务 JSON

您可以通过向虚拟机发送一个 Inventory 服务查询来获取 Inventory 服务 JSON。输出中包含一个 "input" 键,其中包含由 Validation 服务规则查询的清单属性。

您可以根据 "input" 键中的任何属性(如 input.snapshot.kind )创建验证规则。

流程

  1. 为项目检索路由:

    Copy to Clipboard Toggle word wrap
    oc get route -n openshift-mtv
  2. 检索 Inventory 服务路由:

    Copy to Clipboard Toggle word wrap
    $ oc get route <inventory_service> -n openshift-mtv
  3. 检索访问令牌:

    Copy to Clipboard Toggle word wrap
    $ TOKEN=$(oc whoami -t)
  4. 触发 HTTP GET 请求(例如,使用 Curl):

    Copy to Clipboard Toggle word wrap
    $ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers -k
  5. 检索供应商的 UUID

    Copy to Clipboard Toggle word wrap
    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/<provider> -k 
    1
    1 1 1
    供应商允许的值有 vsphereovirtopenstack
  6. 检索供应商的虚拟机:

    Copy to Clipboard Toggle word wrap
    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/<provider>/<UUID>/vms -k
  7. 检索虚拟机的详情:

    Copy to Clipboard Toggle word wrap
    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/<provider>/<UUID>/workloads/<vm> -k

    输出示例

    Copy to Clipboard Toggle word wrap
    {
        "input": {
            "selfLink": "providers/vsphere/c872d364-d62b-46f0-bd42-16799f40324e/workloads/vm-431",
            "id": "vm-431",
            "parent": {
                "kind": "Folder",
                "id": "group-v22"
            },
            "revision": 1,
            "name": "iscsi-target",
            "revisionValidated": 1,
            "isTemplate": false,
            "networks": [
                {
                    "kind": "Network",
                    "id": "network-31"
                },
                {
                    "kind": "Network",
                    "id": "network-33"
                }
            ],
            "disks": [
                {
                    "key": 2000,
                    "file": "[iSCSI_Datastore] iscsi-target/iscsi-target-000001.vmdk",
                    "datastore": {
                        "kind": "Datastore",
                        "id": "datastore-63"
                    },
                    "capacity": 17179869184,
                    "shared": false,
                    "rdm": false
                },
                {
                    "key": 2001,
                    "file": "[iSCSI_Datastore] iscsi-target/iscsi-target_1-000001.vmdk",
                    "datastore": {
                        "kind": "Datastore",
                        "id": "datastore-63"
                    },
                    "capacity": 10737418240,
                    "shared": false,
                    "rdm": false
                }
            ],
            "concerns": [],
            "policyVersion": 5,
            "uuid": "42256329-8c3a-2a82-54fd-01d845a8bf49",
            "firmware": "bios",
            "powerState": "poweredOn",
            "connectionState": "connected",
            "snapshot": {
                "kind": "VirtualMachineSnapshot",
                "id": "snapshot-3034"
            },
            "changeTrackingEnabled": false,
            "cpuAffinity": [
                0,
                2
            ],
            "cpuHotAddEnabled": true,
            "cpuHotRemoveEnabled": false,
            "memoryHotAddEnabled": false,
            "faultToleranceEnabled": false,
            "cpuCount": 2,
            "coresPerSocket": 1,
            "memoryMB": 2048,
            "guestName": "Red Hat Enterprise Linux 7 (64-bit)",
            "balloonedMemory": 0,
            "ipAddress": "10.19.2.96",
            "storageUsed": 30436770129,
            "numaNodeAffinity": [
                "0",
                "1"
            ],
            "devices": [
                {
                    "kind": "RealUSBController"
                }
            ],
            "host": {
                "id": "host-29",
                "parent": {
                    "kind": "Cluster",
                    "id": "domain-c26"
                },
                "revision": 1,
                "name": "IP address or host name of the vCenter host or RHV Engine host",
                "selfLink": "providers/vsphere/c872d364-d62b-46f0-bd42-16799f40324e/hosts/host-29",
                "status": "green",
                "inMaintenance": false,
                "managementServerIp": "10.19.2.96",
                "thumbprint": <thumbprint>,
                "timezone": "UTC",
                "cpuSockets": 2,
                "cpuCores": 16,
                "productName": "VMware ESXi",
                "productVersion": "6.5.0",
                "networking": {
                    "pNICs": [
                        {
                            "key": "key-vim.host.PhysicalNic-vmnic0",
                            "linkSpeed": 10000
                        },
                        {
                            "key": "key-vim.host.PhysicalNic-vmnic1",
                            "linkSpeed": 10000
                        },
                        {
                            "key": "key-vim.host.PhysicalNic-vmnic2",
                            "linkSpeed": 10000
                        },
                        {
                            "key": "key-vim.host.PhysicalNic-vmnic3",
                            "linkSpeed": 10000
                        }
                    ],
                    "vNICs": [
                        {
                            "key": "key-vim.host.VirtualNic-vmk2",
                            "portGroup": "VM_Migration",
                            "dPortGroup": "",
                            "ipAddress": "192.168.79.13",
                            "subnetMask": "255.255.255.0",
                            "mtu": 9000
                        },
                        {
                            "key": "key-vim.host.VirtualNic-vmk0",
                            "portGroup": "Management Network",
                            "dPortGroup": "",
                            "ipAddress": "10.19.2.13",
                            "subnetMask": "255.255.255.128",
                            "mtu": 1500
                        },
                        {
                            "key": "key-vim.host.VirtualNic-vmk1",
                            "portGroup": "Storage Network",
                            "dPortGroup": "",
                            "ipAddress": "172.31.2.13",
                            "subnetMask": "255.255.0.0",
                            "mtu": 1500
                        },
                        {
                            "key": "key-vim.host.VirtualNic-vmk3",
                            "portGroup": "",
                            "dPortGroup": "dvportgroup-48",
                            "ipAddress": "192.168.61.13",
                            "subnetMask": "255.255.255.0",
                            "mtu": 1500
                        },
                        {
                            "key": "key-vim.host.VirtualNic-vmk4",
                            "portGroup": "VM_DHCP_Network",
                            "dPortGroup": "",
                            "ipAddress": "10.19.2.231",
                            "subnetMask": "255.255.255.128",
                            "mtu": 1500
                        }
                    ],
                    "portGroups": [
                        {
                            "key": "key-vim.host.PortGroup-VM Network",
                            "name": "VM Network",
                            "vSwitch": "key-vim.host.VirtualSwitch-vSwitch0"
                        },
                        {
                            "key": "key-vim.host.PortGroup-Management Network",
                            "name": "Management Network",
                            "vSwitch": "key-vim.host.VirtualSwitch-vSwitch0"
                        },
                        {
                            "key": "key-vim.host.PortGroup-VM_10G_Network",
                            "name": "VM_10G_Network",
                            "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1"
                        },
                        {
                            "key": "key-vim.host.PortGroup-VM_Storage",
                            "name": "VM_Storage",
                            "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1"
                        },
                        {
                            "key": "key-vim.host.PortGroup-VM_DHCP_Network",
                            "name": "VM_DHCP_Network",
                            "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1"
                        },
                        {
                            "key": "key-vim.host.PortGroup-Storage Network",
                            "name": "Storage Network",
                            "vSwitch": "key-vim.host.VirtualSwitch-vSwitch1"
                        },
                        {
                            "key": "key-vim.host.PortGroup-VM_Isolated_67",
                            "name": "VM_Isolated_67",
                            "vSwitch": "key-vim.host.VirtualSwitch-vSwitch2"
                        },
                        {
                            "key": "key-vim.host.PortGroup-VM_Migration",
                            "name": "VM_Migration",
                            "vSwitch": "key-vim.host.VirtualSwitch-vSwitch2"
                        }
                    ],
                    "switches": [
                        {
                            "key": "key-vim.host.VirtualSwitch-vSwitch0",
                            "name": "vSwitch0",
                            "portGroups": [
                                "key-vim.host.PortGroup-VM Network",
                                "key-vim.host.PortGroup-Management Network"
                            ],
                            "pNICs": [
                                "key-vim.host.PhysicalNic-vmnic4"
                            ]
                        },
                        {
                            "key": "key-vim.host.VirtualSwitch-vSwitch1",
                            "name": "vSwitch1",
                            "portGroups": [
                                "key-vim.host.PortGroup-VM_10G_Network",
                                "key-vim.host.PortGroup-VM_Storage",
                                "key-vim.host.PortGroup-VM_DHCP_Network",
                                "key-vim.host.PortGroup-Storage Network"
                            ],
                            "pNICs": [
                                "key-vim.host.PhysicalNic-vmnic2",
                                "key-vim.host.PhysicalNic-vmnic0"
                            ]
                        },
                        {
                            "key": "key-vim.host.VirtualSwitch-vSwitch2",
                            "name": "vSwitch2",
                            "portGroups": [
                                "key-vim.host.PortGroup-VM_Isolated_67",
                                "key-vim.host.PortGroup-VM_Migration"
                            ],
                            "pNICs": [
                                "key-vim.host.PhysicalNic-vmnic3",
                                "key-vim.host.PhysicalNic-vmnic1"
                            ]
                        }
                    ]
                },
                "networks": [
                    {
                        "kind": "Network",
                        "id": "network-31"
                    },
                    {
                        "kind": "Network",
                        "id": "network-34"
                    },
                    {
                        "kind": "Network",
                        "id": "network-57"
                    },
                    {
                        "kind": "Network",
                        "id": "network-33"
                    },
                    {
                        "kind": "Network",
                        "id": "dvportgroup-47"
                    }
                ],
                "datastores": [
                    {
                        "kind": "Datastore",
                        "id": "datastore-35"
                    },
                    {
                        "kind": "Datastore",
                        "id": "datastore-63"
                    }
                ],
                "vms": null,
                "networkAdapters": [],
                "cluster": {
                    "id": "domain-c26",
                    "parent": {
                        "kind": "Folder",
                        "id": "group-h23"
                    },
                    "revision": 1,
                    "name": "mycluster",
                    "selfLink": "providers/vsphere/c872d364-d62b-46f0-bd42-16799f40324e/clusters/domain-c26",
                    "folder": "group-h23",
                    "networks": [
                        {
                            "kind": "Network",
                            "id": "network-31"
                        },
                        {
                            "kind": "Network",
                            "id": "network-34"
                        },
                        {
                            "kind": "Network",
                            "id": "network-57"
                        },
                        {
                            "kind": "Network",
                            "id": "network-33"
                        },
                        {
                            "kind": "Network",
                            "id": "dvportgroup-47"
                        }
                    ],
                    "datastores": [
                        {
                            "kind": "Datastore",
                            "id": "datastore-35"
                        },
                        {
                            "kind": "Datastore",
                            "id": "datastore-63"
                        }
                    ],
                    "hosts": [
                        {
                            "kind": "Host",
                            "id": "host-44"
                        },
                        {
                            "kind": "Host",
                            "id": "host-29"
                        }
                    ],
                    "dasEnabled": false,
                    "dasVms": [],
                    "drsEnabled": true,
                    "drsBehavior": "fullyAutomated",
                    "drsVms": [],
                    "datacenter": null
                }
            }
        }
    }

12.4. 在 MTV 迁移计划中添加 hook

您可以在 Migration Toolkit for Virtualization (MTV)迁移计划中添加 hook,以便在迁移之前或之后在虚拟机上执行自动操作。

12.4.1. 关于 MTV 迁移计划的 hook

您可以使用 MTV CLI 或 MTV 用户界面在 Red Hat OpenShift web 控制台中为 Virtualization (MTV)迁移计划添加 hook。

  • 预迁移 hook 是 hook,可在位于供应商的虚拟机上执行操作。这会为迁移准备虚拟机。
  • 迁移后 hook 是在迁移到 OpenShift Virtualization 的虚拟机上执行操作的 hook。
12.4.1.1. 默认 hook 镜像

MTV hook 的默认 hook 镜像是 quay.io/kubev2v/hook-runner。镜像基于 Ansible Runner 镜像,并添加 python-openshift,以提供 Ansible Kubernetes 资源和最新的 oc 二进制文件。

12.4.1.2. hook 执行

作为迁移 hook 的一部分提供的 Ansible playbook 作为 ConfigMap 挂载到 hook 容器中。hook 容器使用您选择的 ServiceAccountopenshift-mtv 命名空间中的所需集群中作为作业运行。

添加 hook 时,您必须指定 Hook CR 所在的命名空间、hook 的名称,以及 hook 是否为 pre-migration hook 或 post-migration hook。

重要

要让 hook 在虚拟机上运行,必须使用 SSH 启动虚拟机并可用。

下图显示了使用迁移 hook 的一般过程。具体步骤请参阅 使用 Red Hat OpenShift Web 控制台将迁移 hook 添加到迁移计划中,并使用 CLI 将迁移 hook 添加到迁移计划中

图 12.1. 在迁移计划中添加 hook

在迁移计划中添加 hook

Process:

  1. 输入您的 Ansible hook 和凭证。

    1. 使用 UI 或 CLI 将 Ansible hook 镜像输入到 MTV 控制器。

      • 在 UI 中,指定 ansible-runner 并输入包含 hook 的 playbook.yml
      • 在 CLI 中,输入 hook 镜像,该镜像指定运行 hook 的 playbook。
    2. 如果您需要额外数据在 pod 中运行 playbook (如 SSH 数据),请创建一个包含虚拟机凭证的 Secret。Secret 不挂载到 pod,而是由 playbook 调用。

      注意

      此 Secret 与包含源供应商凭证的 Secret CR 不同。

  2. MTV 控制器创建 ConfigMap,其中包含:

    • workload.yml,其中包含有关虚拟机的信息。
    • playbook.yml,这是您要执行的原始字符串 playbook。
    • plan.yml,即 Plan CR。

      ConfigMap 包含虚拟机的名称,并指示 playbook 执行的操作。

  3. MTV 控制器会创建一个启动用户指定镜像的作业。

    1. ConfigMap 挂载到容器。

      Ansible hook 导入之前输入的用户的 Secret。

  4. 该作业运行迁移前 hook 或迁移后 hook,如下所示:

    1. 对于 pre-migration hook,作业会使用 SSH 登录到源供应商上的虚拟机,并运行 hook。
    2. 对于迁移后 hook,作业使用 SSH 登录到 OpenShift Virtualization 上的虚拟机,并运行 hook。

12.4.2. 使用 Red Hat OpenShift Web 控制台在迁移计划中添加迁移 hook

您可以使用 Red Hat OpenShift Web 控制台将迁移 hook 添加到现有迁移计划中。请注意,您需要在 Migration Toolkit for Virtualization (MTV) CLI 中运行一个命令。

例如,您可以创建一个 hook 来在虚拟机上安装 cloud-init 服务,并在迁移前写入文件。

注意

您可以运行一个预迁移 hook、一个迁移后 hook 或每个迁移计划之一。

先决条件

  • 迁移计划
  • 迁移 hook 文件,其中包含您复制的内容并粘贴到 web 控制台中
  • 包含源供应商的 Secret 的文件
  • 由 hook 调用的 Red Hat OpenShift 服务帐户,并且至少对您正在使用的命名空间具有写入访问权限
  • 使用在虚拟机上安装的公钥迁移的虚拟机的 SSH 访问
  • 仅在 Microsoft Server 上运行的虚拟机:启用远程执行

其他资源

有关创建服务帐户的说明,请参阅 了解并创建服务帐户

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization,然后点击您要将 hook 添加到的迁移计划。
  2. Hook
  3. 对于 pre-migration hook,请执行以下步骤:

    1. Pre migration hook 部分中,将 Enable hook 开关切换为 Enable pre migration hook
    2. 输入 Hook 运行程序镜像。如果要指定 spec.playbook,则需要使用具有 ansible-runner 的镜像。
    3. 将 hook 粘贴到 Ansible playbook 文本框中的 YAML 文件。
  4. 对于迁移后 hook,请执行以下步骤:

    1. Post migration hook 中,切换 Enable hook 开关 启用后迁移 hook
    2. 输入 Hook 运行程序镜像。如果要指定 spec.playbook,则需要使用具有 ansible-runner 的镜像。
    3. 将 hook 粘贴到 Ansible playbook 文本框中的 YAML 文件。
  5. 在选项卡的顶部,单击 Update hook
  6. 在终端中,输入以下命令将每个 hook 与 Red Hat OpenShift 服务帐户关联:

    Copy to Clipboard Toggle word wrap
    $ oc -n openshift-mtv patch hook <name_of_hook> \
      -p '{"spec":{"serviceAccount":"<service_account>"}}' --type merge

以下迁移 hook 示例确保可以使用 SSH 访问虚拟机,创建 SSH 密钥并运行 2 个任务:停止 Maria 数据库并生成文本文件。

迁移 hook 示例

Copy to Clipboard Toggle word wrap
- name: Main
  hosts: localhost
  vars_files:
    - plan.yml
    - workload.yml
  tasks:
  - k8s_info:
      api_version: v1
      kind: Secret
      name: privkey
      namespace: openshift-mtv
    register: ssh_credentials

  - name: Ensure SSH directory exists
    file:
      path: ~/.ssh
      state: directory
      mode: 0750

  - name: Create SSH key
    copy:
      dest: ~/.ssh/id_rsa
      content: "{{ ssh_credentials.resources[0].data.key | b64decode }}"
      mode: 0600

  - add_host:
      name: "{{ vm.ipaddress }}"  # ALT "{{ vm.guestnetworks[2].ip }}"
      ansible_user: root
      groups: vms

- hosts: vms
  vars_files:
    - plan.yml
    - workload.yml
  tasks:
  - name: Stop MariaDB
    service:
      name: mariadb
      state: stopped

  - name: Create Test File
    copy:
      dest: /premigration.txt
      content: "Migration from {{ provider.source.name }}
                of {{ vm.vm1.vm0.id }} has finished\n"
      mode: 0644

12.4.3. 使用 CLI 在迁移计划中添加迁移 hook

您可以使用 Hook CR 使用 Migration Toolkit for Virtualization (MTV) CLI 将 pre-migration hook 或 post-migration hook 添加到现有迁移计划中。

例如,您可以创建一个 Hook CR 来在虚拟机上安装 cloud-init 服务,并在迁移前写入文件。

注意

您可以运行一个预迁移 hook、一个迁移后 hook 或每个迁移计划之一。每个 hook 需要自己的 Hook CR,但 Plan CR 包含它所使用的所有 hook 的数据。

注意

您可以使用 k8s 模块检索存储在 secret 或 ConfigMap 中的附加信息。

先决条件

  • 迁移计划
  • 迁移 hook 镜像或包含 hook 镜像的 playbook
  • 包含源供应商的 Secret 的文件
  • 由 hook 调用的 Red Hat OpenShift 服务帐户,并且至少对您正在使用的命名空间具有写入访问权限
  • 使用在虚拟机上安装的公钥迁移的虚拟机的 SSH 访问
  • 仅在 Microsoft Server 上运行的虚拟机:启用远程执行

其他资源

有关创建服务帐户的说明,请参阅 了解并创建服务帐户

流程

  1. 如果需要,为虚拟机创建一个具有 SSH 私钥的 Secret。

    1. 选择现有密钥或生成密钥对。
    2. 在虚拟机上安装公钥。
    3. 将 Secret 中的私钥编码为 base64。

      Copy to Clipboard Toggle word wrap
      apiVersion: v1
      data:
        key: VGhpcyB3YXMgZ2Vu...
      kind: Secret
      metadata:
        name: ssh-credentials
        namespace: openshift-mtv
      type: Opaque
  2. 通过串联一个文件并以 Base64 编码方式对 playbook 进行编码,例如:

    Copy to Clipboard Toggle word wrap
    $ cat playbook.yml | base64 -w0
  3. 创建 Hook CR:

    Copy to Clipboard Toggle word wrap
    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Hook
    metadata:
      name: <hook>
      namespace: <namespace>
    spec:
      image: quay.io/kubev2v/hook-runner
      serviceAccount:<service account> 
    1
    
      playbook: |
        LS0tCi0gbm... 
    2
    
    EOF
    1
    (可选)Red Hat OpenShift 服务帐户。如果要操作集群的任何资源,则必须提供 serviceAccount
    2
    base64 编码的 Ansible Playbook.如果指定了 playbook,镜像 必须包含 ansible-runner
    注意

    您可以使用默认 hook-runner 镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。

    注意

    要解码附加的 playbook,请使用自定义输出检索资源,并将其传送到 base64。例如:

    Copy to Clipboard Toggle word wrap
    $ oc get -n konveyor-forklift hook playbook -o \
        go-template='{{ .spec.playbook }}' | base64 -d
  4. 在迁移的 Plan CR 中,对于每个虚拟机,请在 CR 的末尾添加以下部分:

    Copy to Clipboard Toggle word wrap
      vms:
        - id: <vm_id>
          hooks:
            - hook:
                namespace: <namespace>
                name: <name_of_hook>
              step: <type_of_hook> 
    1
    1
    选项是 PreHook,可在迁移前运行 hook,以及 PostHook 以在迁移后运行 hook。
重要

为了在虚拟机上运行 PreHook,必须通过 SSH 启动并可使用虚拟机。

以下迁移 hook 示例确保可以使用 SSH 访问虚拟机,创建 SSH 密钥并运行 2 个任务:停止 Maria 数据库并生成文本文件。

迁移 hook 示例

Copy to Clipboard Toggle word wrap
- name: Main
  hosts: localhost
  vars_files:
    - plan.yml
    - workload.yml
  tasks:
  - k8s_info:
      api_version: v1
      kind: Secret
      name: privkey
      namespace: openshift-mtv
    register: ssh_credentials

  - name: Ensure SSH directory exists
    file:
      path: ~/.ssh
      state: directory
      mode: 0750

  - name: Create SSH key
    copy:
      dest: ~/.ssh/id_rsa
      content: "{{ ssh_credentials.resources[0].data.key | b64decode }}"
      mode: 0600

  - add_host:
      name: "{{ vm.ipaddress }}"  # ALT "{{ vm.guestnetworks[2].ip }}"
      ansible_user: root
      groups: vms

- hosts: vms
  vars_files:
    - plan.yml
    - workload.yml
  tasks:
  - name: Stop MariaDB
    service:
      name: mariadb
      state: stopped

  - name: Create Test File
    copy:
      dest: /premigration.txt
      content: "Migration from {{ provider.source.name }}
                of {{ vm.vm1.vm0.id }} has finished\n"
      mode: 0644

第 13 章 升级 Migration Toolkit for Virtualization

您可以使用 Red Hat OpenShift Web 控制台安装新版本,以升级 MTV Operator。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 OperatorsInstalled OperatorsMigration Toolkit for Virtualization OperatorSubscription
  2. 将更新频道更改为正确的发行版本。

    请参阅 Red Hat OpenShift 文档中的更改更新频道。

  3. 确认 Upgrade statusUp to date 变为 Upgrade available。如果没有,重启 CatalogSource pod:

    1. 记录目录源,如 redhat-operators
    2. 在命令行中检索目录源 pod:

      Copy to Clipboard Toggle word wrap
      $ oc get pod -n openshift-marketplace | grep <catalog_source>
    3. 删除 Pod:

      Copy to Clipboard Toggle word wrap
      $ oc delete pod -n openshift-marketplace <catalog_source_pod>

      升级状态Up to date 改为 Upgrade available

      如果您在 Subscriptions 选项卡上将 Update approval 设置为 Automatic,则升级会自动启动。

  4. 如果您在 Subscriptions 标签页中将 Update approval 设置为 Manual,请批准升级。

    请参阅 Red Hat OpenShift 文档中的 手动批准待处理的升级

  5. 如果您要从 MTV 2.2 升级并定义了 VMware 源供应商,请添加 VDDK init 镜像来编辑 VMware 供应商。否则,更新会将任何 VMware 供应商的状态更改为 Critical。如需更多信息,请参阅 添加 VMSphere 源供应商
  6. 如果您在 MTV 2.2 中的 Red Hat OpenShift 目的地供应商中映射到 NFS,请编辑 NFS 存储配置文件中的 AccessModesVolumeMode 参数。否则,升级会使 NFS 映射无效。如需更多信息,请参阅自定义存储配置集

第 14 章 卸载 Migration Toolkit for Virtualization

您可以使用 Red Hat OpenShift Web 控制台或命令行界面(CLI)卸载 Virtualization (MTV)。

14.1. 使用 Red Hat OpenShift Web 控制台卸载 MTV

您可以使用 Red Hat OpenShift web 控制台卸载 Virtualization (MTV)。

先决条件

  • 您必须以具有 cluster-admin 权限的用户身份登录。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 Operators > Installed Operators
  2. Migration Toolkit for Virtualization Operator

    Operator Details 页面在 Details 标签页中打开。

  3. ForkliftController 选项卡。
  4. 单击 Actions,再选择 Delete ForkLiftController

    这会打开确认窗口。

  5. 点击 Delete

    控制器已被删除。

  6. 打开 Details 选项卡。

    此时会出现 Create ForkliftController 按钮,而不是您删除的控制器。不需要点它。

  7. 在页面右上角,点 Actions 并选择 Uninstall Operator

    此时会打开确认窗口,显示任何操作对象实例。

  8. 要删除所有实例,请选中 Delete all operand instance for this operator 复选框。默认情况下清除复选框。

    重要

    如果 Operator 配置了非集群资源,则这些应用程序将继续运行,需要手动清理。

  9. Uninstall

    Installed Operators 页面将打开,并且 Migration Toolkit for Virtualization Operator 已从已安装的 Operator 列表中删除。

  10. Home > Overview
  11. 在页面的 Status 部分中,单击 Dynamic Plugins

    Dynamic Plugins 弹出将打开,将 forklift-console-plugin 列为失败的插件。如果 forklift-console-plugin 没有显示为失败的插件,请刷新 web 控制台。

  12. 单击 forklift-console-plugin

    ConsolePlugin 详情页面 会在 Details 选项卡中打开。

  13. 在页面的右上角,点 Actions,然后从列表中选择 Delete ConsolePlugin

    这会打开确认窗口。

  14. 点击 Delete

    该插件已从 Overview 页面上的 动态插件 列表中移除。如果插件仍然存在,重启 Overview 页面。

14.2. 从命令行卸载 MTV

您可以从命令行卸载 Migration Toolkit for Virtualization (MTV)。

注意

此操作不会删除 MTV Operator 管理的资源,包括自定义资源定义(CRD)和自定义资源(CR)。要在卸载 MTV Operator 后删除它们,您可能需要手动删除 MTV Operator CRD。

先决条件

  • 您必须以具有 cluster-admin 权限的用户身份登录。

流程

  1. 运行以下命令来删除 forklift 控制器:

    Copy to Clipboard Toggle word wrap
    $ oc delete ForkliftController --all -n openshift-mtv
  2. 运行以下命令来删除 MTV Operator 的订阅:

    Copy to Clipboard Toggle word wrap
    $ oc get subscription -o name|grep 'mtv-operator'| xargs oc delete
  3. 运行以下命令,删除 MTV Operator 的 clusterserviceversion

    Copy to Clipboard Toggle word wrap
    $ oc get clusterserviceversion -o name|grep 'mtv-operator'| xargs oc delete
  4. 运行以下命令来删除插件控制台 CR:

    Copy to Clipboard Toggle word wrap
    $ oc delete ConsolePlugin forklift-console-plugin
  5. 可选:运行以下命令来删除自定义资源定义(CRD):

    Copy to Clipboard Toggle word wrap
    oc get crd -o name | grep 'forklift.konveyor.io' | xargs oc delete
  6. 可选:通过运行以下命令删除 MTV 项目来执行清理:

    Copy to Clipboard Toggle word wrap
    oc delete project openshift-mtv

第 15 章 MTV 性能建议

本节的目的是根据在测试过程中观察到的发现,使用 Migration Toolkit for Virtualization (MTV)共享虚拟机(VM)的建议。

此处提供的数据是从红帽实验室测试中收集而来的,仅供参考。 

总体而言,这些数字应该考虑显示最佳情况情况。

观察到的迁移性能可能与这些结果不同,这取决于几个因素。

15.1. 确保快速存储和网络速度

确保 VMware 和 Red Hat OpenShift (OCP)环境的快速存储和网络速度。

  • 要执行快速迁移,VMware 必须有对数据存储的快速读取访问权限。  VMware ESXi 主机之间的网络应该很快,确保 10 GiB 网络连接,并避免网络瓶颈。

    • 将 VMware 网络扩展到 OCP Workers Interface 网络环境。
    • 确保 VMware 网络提供高吞吐量(10 千兆位以太网)和快速网络以确保接收率与 ESXi 数据存储的读取率一致。
    • 请注意,迁移过程使用显著的网络带宽,并且使用迁移网络。如果其他服务使用该网络,则可能会对这些服务及其迁移率产生影响。
    • 例如,200 到 325 MiB/s 是与将数据传输到 OCP 接口的每个 ESXi 主机的 vmnic 的平均网络传输率。

15.2. 确保快速数据存储读取速度,以确保高效和高性能迁移

数据存储会读取总传输时间,因此务必要确保从 ESXi 数据存储到 ESXi 主机可以快速读取。  

number: 200 到 300 MiB/s 示例是单个 ESXi 服务器的 vSphere 和 ESXi 端点的平均读取率。当使用多个 ESXi 服务器时,可能会提高数据存储读取率。

15.3. 端点类型 

MTV 2.6 允许以下 vSphere 供应商选项:

  • ESXi 端点(来自 ESXi 的清单和磁盘传输),在 MTV 2.6 中引入
  • vCenter Server 端点;没有 ESXi 主机的网络(清单和从 vCenter 传输)
  • vCenter 端点和 ESXi 网络可用(来自 vCenter 的清单、来自 ESXi 的磁盘传输)。

在传输很多注册到多个 ESXi 主机的虚拟机时,建议使用 vCenter 端点和 ESXi 网络。

注意

从 vSphere 7.0 开始,ESXi 主机可以标记要用于 NBD 传输的网络。 这可以通过使用适当的 vSphereBackupNFC 标签标记所需的虚拟网络接口卡(NIC)来实现。  完成后,只要 worker 和 ESXi 主机接口可以访问 worker 和 ESXi 主机接口,就可以使用 ESXi 接口来将网络传输至 Openshift。  当迁移用户可能无法访问 ESXi 凭证时,这特别有用,但希望能够控制哪个 ESXi 接口用于迁移。 

如需了解更多详细信息,请参阅: (MTV-1230)

您可以使用以下 ESXi 命令,该命令为 NBD 备份指定接口 vmk2

Copy to Clipboard Toggle word wrap
esxcli network ip interface tag add -t vSphereBackupNFC -i vmk2

15.4. 为高性能设置 ESXi 主机 BIOS 配置集和 ESXi Host Power Management

在可能的情况下,确保使用与最大性能相关的 BIOS 配置集设置用于执行迁移的主机。  使用 vSphere 中控制的主机应该检查是否设置了 高性能

测试显示,当传输设置了 BIOS 和主机电源管理集的 10 个虚拟机时,迁移在平均数据存储的读速率中增加了 15 MiB。

15.5. 避免 VMware 网络上的额外网络负载

在使用 ESXi 端点时,您可以选择迁移网络来减少 VMware 网络上的网络负载。

通过合并虚拟化供应商,MTV 可以选择可在 ESXi 主机上访问的特定网络,以将虚拟机迁移到 OCP。  从 MTV UI 中的 ESXi 主机选择此迁移网络将确保使用所选网络作为 ESXi 端点来执行传输。

您必须确保所选网络与 OCP 接口的连接,有足够的带宽用于迁移,并且网络接口没有饱和。

在具有快速网络(如 10GbE 网络)的环境中,可能会预期迁移网络影响以匹配 ESXi 数据存储读取的速度。

15.6. 每个 ESXi 主机控制最大并发磁盘迁移

设置 MAX_VM_INFLIGHT MTV 变量,以控制 ESXi 主机允许的最大并发虚拟机传输数量。 

MTV 允许使用此变量控制并发性 ; 默认情况下,它被设置为 20。

当设置 MAX_VM_INFLIGHT 时,请考虑 ESXi 主机需要最大并发虚拟机传输的数量。 务必要考虑同时传输的迁移类型。温迁移,由迁移将在计划时间迁移的正在运行的虚拟机定义。

温迁移使用快照来比较和迁移之前磁盘快照之间的区别。  在最终运行的虚拟机到 OpenShift 之前,快照之间差异的迁移会随特定间隔进行。 

在 MTV 2.6 中,MAX_VM_INFLIGHT 保留每个虚拟机的一个传输插槽,无论特定快照的当前迁移活动或属于单个虚拟机的磁盘数量。 由 MAX_VM_INFLIGHT 设置的总用于指示允许每个 ESXi 主机的并发虚拟机 tranfers 数。

例子

  • MAX_VM_INFLIGHT = 20 和 2 ESXi 主机在提供程序中定义的 20 和 2 ESXi 主机意味着每个主机都可以传输 20 个虚拟机。

15.7. 同时迁移多个虚拟机时,会更快地完成迁移

当迁移特定 ESXi 主机的多个虚拟机时,为多个虚拟机启动并发迁移会导致更快地迁移。 

测试演示:从单一主机迁移 10 个虚拟机(每个包含 35 GiB 数据,总大小为 50 GiB)比按顺序迁移相同数量的虚拟机要快得多。 

可以从单个主机增加并发迁移到 10 多台虚拟机,但其显示没有显著改进。 

例子

  • 1 个磁盘虚拟机需要 6 分钟,迁移率为 100 MiB/s
  • 10 个磁盘虚拟机需要 22 分钟,迁移率为 272 MiB/s
  • 20 个单一磁盘虚拟机需要 42 分钟,迁移率为 284 MiB/s
注意

从上述示例中,很明显地迁移 10 个虚拟机的速度比按顺序迁移同一虚拟机的迁移速度要快三倍。

当同时移动 10 或 20 个虚拟机时,迁移率几乎相同。

15.8. 使用多个主机更快地迁移

使用带有注册虚拟机的多个主机在用于迁移的 ESXi 主机中平均分布,从而可以更快地迁移时间。

测试显示,在传输超过 10 个磁盘 VMS 时,每个磁盘 VMS 都包含超过 50G 的总数据,使用额外的主机可减少迁移时间。

例子

  • 80 个磁盘虚拟机,包括每个 35 GiB 数据,使用单个主机需要 2 小时和 43 分钟,迁移率为 294 MiB/s。
  • 80 个磁盘虚拟机,包括每个 35 GiB 数据,使用 8 ESXi 主机需要 41 分钟,迁移率为 1,173 MiB/s。
注意

从上述示例中,从 8 个 ESXi 主机迁移 80 个虚拟机(10 个从每个主机)迁移 80 个虚拟机的速度比从单个 ESXi 主机运行相同的虚拟机速度要快四倍。 

同时迁移大量虚拟机,同时从 8 个 ESXi 主机中迁移可能会提高性能。但是,它没有被测试,因此不推荐这样做。

15.9. 与单个大型迁移计划相比,多个迁移计划

单个迁移计划可以引用的最大磁盘数为 500。如需了解更多详细信息,请参阅 (MTV-1203)。 

当尝试在单个迁移计划中迁移许多虚拟机时,所有迁移可能需要一些时间才能启动。  通过将一个迁移计划分成多个迁移计划,可以同时启动它们。

比较以下迁移:

  • 1 计划中的 500 个使用 8 ESXi 主机的虚拟机,max_vm_inflight=100,需要 5 小时和 10 分钟。
  • 使用 8 个计划中的 8 个 ESXi 主机( max_vm_inflight=100 )需要 57 分钟。

测试显示,通过将单个大计划分成多个中等规模的计划,例如,每个计划 100 个 VMS,可以减少总迁移时间。

15.10. 为冷迁移测试的最大值

  • 测试的 ESXi 主机的最大数量:8
  • 单个迁移计划中的最大虚拟机数量:500
  • 单个测试中迁移的虚拟机的最大数量: 5000
  • 同时执行的迁移计划的最大数量: 40
  • 最大单个磁盘大小迁移:6 TB 磁盘,其中包括 3TB 数据
  • 单个虚拟机上迁移的最大磁盘数: 50
  • 最高观察到的单个数据存储从单个 ESXi 服务器读取率: 312 MiB/second
  • 使用八个 ESXi 服务器和两个数据存储的读率最高观察到的多数据存储:1,242 MiB/second
  • 最高观察到的虚拟 NIC 传输率到 OpenShift worker: 327 MiB/second
  • 单个磁盘的最大迁移传输率:162 MiB/秒(在传输非并发迁移 1.5 TB 数据时观察到)
  • 来自单个 ESXi 主机的最大冷迁移传输率(单一磁盘):294 MiB/s (并发迁移 30 个虚拟机,使用 35/50 GiB,来自 Single ESXi)
  • 来自多个 ESXi 主机的最大冷迁移传输率(单个磁盘):1173MB/s (并发迁移 80 个虚拟机,使用 35/50 GiB,从 8 ESXi 服务器,每个 ESXi 中的 10 个虚拟机)

15.11. 温迁移建议

以下建议特定于温迁移:

15.11.1. 并行迁移到 400 个磁盘

测试涉及并行迁移 200 个虚拟机,每 2 个磁盘使用 8 ESXi 主机,共 400 个磁盘。在迁移计划中不会并行迁移超过 400 个磁盘的测试,因此不建议并行迁移超过这个数量的磁盘。

15.11.2. 为最快的速度并行迁移最多 200 个磁盘

测试成功在具有 200、300 和 400 磁盘的并行磁盘迁移上执行。在测试迁移 200 个磁盘和迁移 300 和 400 磁盘时,预复制迁移率大约有 25%。

因此,建议以 200 个或更少形式执行并行磁盘迁移,而不是 300 到 400 个磁盘,除非前复制速度减少 25% 不会影响您的截止计划。

15.11.3. 在可能的情况下,设置在迁移计划启动后马上设置截止时间

要减少温迁移的整体时间,建议在迁移计划启动后立即进行 cutover。这会导致 MTV 每个虚拟机 只运行一个 precopy。这个建议是有效的,无论迁移计划中的虚拟机数量如何。

15.11.4. 在快照之间增加预复制间隔

如果您要使用单个虚拟机创建多个迁移计划,并在迁移开始和剪切之间有足够的时间,将 controller_precopy_interval 参数的值增加到 120 到 240 分钟(含)。较长的设置将在剪切前减少每个虚拟机的快照和磁盘传输总数。

15.12. 为 warm 迁移测试的最大值

  • 测试的 ESXi 主机的最大数量:8
  • worker 节点的最大数量:12
  • 单个迁移计划中的最大虚拟机数量:200
  • 并行磁盘传输的最大数量:400,200 个虚拟机,6 ESXis,传输率为 667 MB/s
  • 最大单个磁盘大小迁移:6 TB 磁盘,其中包括 3TB 数据
  • 单一虚拟机中迁移的最大磁盘数: 3
  • 每个 ESXi 主机的最大并行磁盘传输数:68
  • 在没有并发迁移的情况下观察到单个磁盘的最大传输率:76.5 MB/s
  • 从一个 ESXi 主机观察到多个磁盘的最大传输率: 253 MB/s (并发迁移 10 个虚拟机,每个磁盘 1 个磁盘,每个磁盘使用 35/50 GiB)
  • 观察到多个磁盘的总传输率(8 ESXi 主机:802 MB/s (并发迁移 70 个虚拟机,每个磁盘有 3 个磁盘,每个磁盘使用 35/50 GiB)

15.13. 迁移带有大量磁盘的虚拟机的建议

建议为每个独立磁盘使用 1 TB 或更高磁盘上的数据的虚拟机:

  • 调度适当的维护窗口,以迁移大型磁盘虚拟机(VM)。这种迁移是敏感的操作,可能需要仔细规划维护窗口和停机时间,特别是在较低存储和网络活动期间。
  • 检查在那些大型虚拟机(VM)迁移过程中没有运行其他迁移活动或其他大量网络或存储活动。您应该将这些大型虚拟机迁移视为特殊情况。在这些迁移过程中,请优先选择 MTV 活动。计划在这些虚拟机上有较少的活动和相关数据存储时,将这些虚拟机迁移到一个时间。
  • 对于具有高 churn 率的大型虚拟机,这意味着数据在快照之间经常更改,请考虑从默认减少 warm 迁移 controller_precopy_interval,即 60 分钟。 确保在调度切换前至少 24 小时启动此过程,以便允许多个成功的 precopy 快照完成。 在调度 cutover 时,请确保维护窗口允许有足够的时间复制更改的最后一个快照,并且剪切过程从该维护窗口开始。
  • 对于非常大的单磁盘虚拟机,在一些停机时间时,请选择冷迁移,而不是温迁移,特别是在大型虚拟机快照时。
  • 考虑将特定的大型磁盘中的数据分割为多个磁盘,在使用温迁移时启用 MTV 的并行磁盘迁移。
  • 如果您有大型数据库磁盘,持续写入大量数据,如果无法停机和虚拟机快照,则可能需要考虑数据库数据的特定复制选项,以便在 MTV 之外以这些特定迁移为目标。如果适用此案例,请咨询您的数据库的特定于厂商的选项。

15.14. 为 NBD 传输模式增加异步 I/O (AIO)大小和缓冲区计数

本文档论述了如何更改 NBD 传输 NFC 参数,以便在使用 Migration Toolkit for Virtualization (MTV)产品时更改 NBD 传输 NFC 参数。

警告

使用 AIO 缓冲仅适用于冷迁移用例。

15.14.1. 密钥发现

  • 通过在带有以下值的单一 ESXi 主机上迁移使用多个虚拟机(10)实现最佳迁移性能:

    • VixDiskLib.nfcAio.Session.BufSizeIn64KB=16
    • vixDiskLib.nfcAio.Session.BufCount=4
  • 在使用 AIO 缓冲(Asynchronous Buffer Counts)设置时请注意以下改进:

    • 迁移时间缩短为 31.1%,从 0:24:32 缩短为 0:16:54
    • 读取率从 347.83 MB/s 增加到 504.93 MB/s
  • 在单一虚拟机上使用 AIO 缓冲设置时,无法显著改进。
  • 当使用来自多个主机的多个虚拟机的 AIO 缓冲设置时,无法显著改进。

15.14.2. 启用 AIO 缓冲配置

验证 AIO 值的 Controller Pod 支持

  • 确保 openshift-mtv 命名空间中的 forklift-controller pod 支持 AIO 缓冲值。

    由于 pod 名称前缀是动态的,因此运行以下命令首先检查 pod 名称:

    Copy to Clipboard Toggle word wrap
    oc get pods -n openshift-mtv | grep forklift-controller | awk '{print $1}'

    输出示例如下:

    Copy to Clipboard Toggle word wrap
    forklift-controller-667f57c8f8-qllnx
    注意

    这是示例中的 pod 名称前缀: forklift-controller-667f57c8f8-qllnx

  • 运行以下命令,检查 pod 的环境变量:

    Copy to Clipboard Toggle word wrap
    oc get pod forklift-controller-667f57c8f8-qllnx -n openshift-mtv -o yaml
  • 检查输出中的以下行:

    Copy to Clipboard Toggle word wrap
    ...
    \- name: VIRT\_V2V\_EXTRA\_ARGS
    \- name: VIRT\_V2V\_EXTRA\_CONF\_CONFIG\_MAP
    ...

编辑 ForkliftController 配置

  • openshift-mtv 命名空间中,运行以下命令来编辑 ForkliftController 对象使其包含 AIO 缓冲值:

    Copy to Clipboard Toggle word wrap
    oc edit forkliftcontroller -n openshift-mtv

    在 spec 部分添加以下内容:

    Copy to Clipboard Toggle word wrap
    virt_v2v_extra_args: "--vddk-config /mnt/extra-v2v-conf/input.conf"
    virt_v2v_extra_conf_config_map: "perf"

创建名为 perf的 ConfigMap

  • 使用以下命令创建所需的 ConfigMap:

    Copy to Clipboard Toggle word wrap
    oc -n openshift-mtv create cm perf

准备 ConfigMap 内容

  • 将所需的缓冲区配置值转换为 Base64。例如,对于 16/4:

    Copy to Clipboard Toggle word wrap
    echo -e "VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nvixDiskLib.nfcAio.Session.BufCount=4" | base64

    输出结果类似如下:

    Copy to Clipboard Toggle word wrap
    Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=

编辑 ConfigMap

  • 使用 binaryData 部分下的 Base64 字符串更新 perf ConfigMap,例如:

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: ConfigMap
    binaryData:
      input.conf: Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=
    metadata:
      name: perf
      namespace: openshift-mtv

重启 Forklift Controller Pod

  • 重启 forklift-controller pod 以应用新配置。
  • 确保 VIRT_V2V_EXTRA_ARGS 环境变量反映了更新的设置。

验证迁移日志

  • 运行迁移计划并检查迁移 pod 的日志。确认 AIO 缓冲区设置作为参数传递,特别是 --vddk-config 值

    例如:

    Copy to Clipboard Toggle word wrap
    exec: /usr/bin/virt-v2v … --vddk-config /mnt/extra-v2v-conf/input.conf

    日志摘录示例:

    Copy to Clipboard Toggle word wrap
    Buffer size calc for 16 value:
    (16 * 64 * 1024 = 1048576)
    nbdkit: vddk[1]: debug: [NFC VERBOSE] NfcAio_OpenSession:
    Opening an AIO session.
    nbdkit: vddk[1]: debug: [NFC INFO] NfcAioInitSession:
    Disabling
    read-ahead buffer since the AIO buffer size of 1048576 is >=
    the read-ahead buffer size of 65536. Explicitly setting flag
    '`NFC_AIO_SESSION_NO_NET_READ_AHEAD`'
    nbdkit: vddk[1]: debug: [NFC VERBOSE] NfcAioInitSession: AIO Buffer Size is 1048576
    nbdkit: vddk[1]: debug: [NFC VERBOSE] NfcAioInitSession: AIO Buffer
    Count is 4
    注意

    以上日志是使用 debug_level = 4

检查 ConfigMap 值内容位于 Migration Pod 中

  • 登录到迁移 pod,并使用以下命令验证缓冲区设置:

    Copy to Clipboard Toggle word wrap
    cat /mnt/extra-v2v-conf/input.conf

    输出示例如下:

    Copy to Clipboard Toggle word wrap
    VixDiskLib.nfcAio.Session.BufSizeIn64KB=16
    vixDiskLib.nfcAio.Session.BufCount=4

启用调试(可选)

  • 要启用调试日志,请将配置转换为 Base64,包括高级别:

    Copy to Clipboard Toggle word wrap
    echo -e
    "`VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nVixDiskLib.nfcAio.Session.BufCount=4\nVixDiskLib.nfc.LogLevel=4`"
    | base64
    注意

    添加高级别将降低性能,仅用于调试目的。

15.14.3. 禁用 AIO 缓冲配置

要禁用 AIO 缓冲配置,请完成以下步骤:

  • 编辑 ForkliftController 对象:从 ForkliftController 对象的 spec 部分删除之前添加的行:

    Copy to Clipboard Toggle word wrap
    oc edit forkliftcontroller -n openshift-mtv
  • 删除以下行:

    Copy to Clipboard Toggle word wrap
    virt_v2v_extra_args: "`–vddk-config /mnt/extra-v2v-conf/input.conf`"
    virt_v2v_extra_conf_config_map: "`perf`"
  • 删除 ConfigMap:删除之前创建的 perf ConfigMap:

    Copy to Clipboard Toggle word wrap
    oc delete cm perf -n openshift-mtv
  • 重启 Forklift Controller Pod (可选)。

如果需要,通过重启 forklift-controller pod 来确保更改生效。

15.14.4. AIO 缓冲(异步缓冲数)支持的关键要求

VDDK 和 vSphere 版本

支持基于使用以下版本执行的测试:

第 16 章 故障排除

本节提供有关对常见迁移问题进行故障排除的信息。

16.1. é”™è¯¯ä¿¡æ�¯

本节论述了错误消息以及如何解决它们。

已达到温导入重试的限制

如果在 precopy 阶段一个 VMware 虚拟机 (VM) 已达到最大的改变的块跟踪(CBT)快照的数量 (28),则会在温迁移中会显 warm import retry limit reached 错误消息。

要解决这个问题,请从虚拟机中删除一些 CBT 快照并重启迁移计划。

无法将磁盘镜像调整为所需的大小

迁移失败时会显示 Unable to resize disk image to required size 错误消息,因为目标供应商的虚拟机使用块存储上带有 EXT4 文件系统的持久性卷。出现这个问题的原因是 CDI 假设的默认开销没有完全包括根分区的保留位置。

要解决这个问题,将 CDI 中的文件系统开销增加到大于 10%。

16.2. 使用 must-gather 工具

您可以使用 must-gather 工具来收集 MTV 自定义资源 (CR) 的日志和信息。您必须将 must-gather 数据文件附加到所有客户问题单。

您可以使用过滤选项为特定命名空间、迁移计划或虚拟机 (VM) 收集数据。

注意

如果您在过滤的 must-gather 命令中指定不存在的资源,则不会创建存档文件。

先决条件

  • 您必须以具有 cluster-admin 角色的用户身份登录到 OpenShift Virtualization 集群。
  • 已安装 Red Hat OpenShift CLI (oc)

收集日志和 CR 信息

  1. 进入存储 must-gather 数据的目录。
  2. 运行 oc adm must-gather 命令:

    Copy to Clipboard Toggle word wrap
    $ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4

    数据被保存为 /must-gather/must-gather.tar.gz。您可以将此文件上传到红帽客户门户网站中的支持问题单中。

  3. 可选:使用以下选项运行 oc adm must-gather 命令来收集过滤的数据:

    • 命名空间:

      Copy to Clipboard Toggle word wrap
      $ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4 \
        -- NS=<namespace> /usr/bin/targeted
    • 迁移计划:

      Copy to Clipboard Toggle word wrap
      $ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4 \
        -- PLAN=<migration_plan> /usr/bin/targeted
    • 虚拟机:

      Copy to Clipboard Toggle word wrap
      $ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4 \
        -- VM=<vm_id> NS=<namespace> /usr/bin/targeted 
      1
      1
      指定在 Plan CR 中显示的 VM ID

16.3. 架构

本节论述了 MTV 自定义资源、服务和工作流。

16.3.1. MTV 自定义资源和服务

Migration Toolkit for Virtualization (MTV)作为 Red Hat OpenShift Operator 提供。它将创建和管理以下自定义资源 (CR) 和服务。

MTV 自定义资源

  • Provider CR 存储启用 MTV 连接到并与源和目标供应商交互的属性。
  • NetworkMapping CR 映射源供应商的网络。
  • StorageMapping CR 会映射源和目标供应商的存储。
  • Plan CR 包含具有相同迁移参数和相关网络和存储映射的虚拟机列表。
  • Migration CR 运行一个迁移计划。

    每个迁移计划只能有一个 Migration CR 可以在指定时间运行。您可以为单个 Plan CR 创建多个 Migration CR。

MTV 服务

  • Inventory 服务执行以下操作:

    • 连接到源和目标供应商。
    • 维护本地清单以进行映射和计划。
    • 存储虚拟机配置。
    • 如果检测到虚拟机配置更改,则运行 Validation 服务。
  • Validation 服务通过应用规则检查虚拟机是否适合迁移。
  • Migration Controller 服务编配迁移。

    当您创建迁移计划时,Migration Controller 服务会验证计划并添加状态标签。如果计划无法验证,计划状态为 Not ready,则计划无法用于执行迁移。如果计划通过验证,计划状态为 Ready,它可用于执行迁移。迁移成功后,Migration Controller 服务会将计划状态更改为 Completed

  • Populator Controller 服务使用 Volume Populators 编配磁盘传输。
  • Kubevirt ControllerContainerized Data Import(CDI)Controller 服务处理大多数技术操作。

16.3.2. 高级别迁移工作流

高级别工作流显示用户视图的迁移过程:

  1. 您可以创建一个源供应商、目标供应商、网络映射和存储映射。
  2. 您可以创建一个包含以下资源的 Plan 自定义资源(CR):

    • 源供应商
    • 目标供应商,如果目标集群上没有安装 MTV
    • 网络映射
    • 存储映射
    • 一个或多个虚拟机 (VM)
  3. 您可以通过创建一个引用 Plan CR 的 Migration CR 来运行迁移计划。

    如果出于某种原因无法迁移所有虚拟机,则可以为同一 Plan CR 创建多个 Migration CR,直到虚拟机迁移为止。

  4. 对于 Plan CR 中的每个虚拟机,Migration Controller 服务会在 Migration CR 中记录虚拟机迁移进度。
  5. Plan CR 中每个虚拟机的数据传输完成后,Migration Controller 服务会创建一个 VirtualMachine CR。

    当迁移所有虚拟机时,Migration Controller 服务会将 Plan CR 的状态更新为 Completed。每个源虚拟机的电源状态在迁移后会被维护。

16.3.3. 详细的迁移工作流

您可以使用详细的迁移工作流来排除迁移失败的问题。

工作流描述了以下步骤:

温迁移或迁移到远程 OpenShift 集群:

  1. 当您创建 Migration 自定义资源(CR)来运行迁移计划时,Migration Controller 服务会为每个源虚拟机磁盘创建一个 DataVolume CR。

    对于每个 VM 磁盘:

  2. Containerized Data Importer(CDI) 控制器服务根据 DataVolume CR 中指定的参数创建一个持久性卷声明 (PVC)。


  3. 如果 StorageClass 有动态置备程序,则 StorageClass 置备程序会动态置备持久性卷(PV)。
  4. CDI Controller 服务创建一个 importer pod。
  5. importer pod 将虚拟机磁盘流传输到 PV。

    虚拟机磁盘传输后:

  6. Migration Controller 服务在从 VMWare 导入时创建一个 转换 pod,并附加 PVC。

    conversion pod 运行 virt-v2v,它会在目标虚拟机的 PVC 中安装和配置设备驱动程序。

  7. Migration Controller 服务为每个源虚拟机(VM)创建一个 VirtualMachine CR,连接到 PVC。
  8. 如果虚拟机在源环境中运行,则虚拟机上的 Migration Controller 电源,KubeVirt Controller 服务会创建一个 virt-launcher pod 和 VirtualMachineInstance CR。

    virt-launcher pod 运行 QEMU-KVM,并附加了作为 VM 磁盘的 PVC。

从 RHV 或 OpenStack 冷迁移到本地 OpenShift 集群:

  1. 当您创建 Migration 自定义资源(CR)来运行迁移计划时,Migration Controller 服务为每个源虚拟机磁盘创建一个 PersistentVolumeClaim CR,当源是 RHV 时,一个 OvirtVolumePopulator,或源是 OpenStack 时的 OpenstackVolumePopulator CR。

    对于每个 VM 磁盘:

  2. Populator Controller 服务创建一个临时的持久性卷声明(PVC)。
  3. 如果 StorageClass 有动态置备程序,则 StorageClass 置备程序会动态置备持久性卷(PV)。

    • Migration Controller 服务创建一个 dummy pod 来绑定 所有 PVC。pod 的名称包含 pvcinit
  4. Populator Controller 服务创建一个 填充器 pod。
  5. 填充器 pod 将磁盘数据传输到 PV。

    虚拟机磁盘传输后:

  6. 临时 PVC 被删除,初始 PVC 指向带有数据的 PV。
  7. Migration Controller 服务为每个源虚拟机(VM)创建一个 VirtualMachine CR,连接到 PVC。
  8. 如果虚拟机在源环境中运行,则虚拟机上的 Migration Controller 电源,KubeVirt Controller 服务会创建一个 virt-launcher pod 和 VirtualMachineInstance CR。

    virt-launcher pod 运行 QEMU-KVM,并附加了作为 VM 磁盘的 PVC。

从 VMWare 冷迁移到本地 OpenShift 集群:

  1. 当您创建 Migration 自定义资源(CR)来运行迁移计划时,Migration Controller 服务会为每个源虚拟机磁盘创建一个 DataVolume CR。

    对于每个 VM 磁盘:

  2. Containerized Data Importer (CDI) 控制器服务会根据 DataVolume CR 中指定的参数创建一个空白的持久性卷声明(PVC)。


  3. 如果 StorageClass 有动态置备程序,则 StorageClass 置备程序会动态置备持久性卷(PV)。

对于所有虚拟机磁盘:

  1. Migration Controller 服务创建一个 dummy pod 来绑定 所有 PVC。pod 的名称包含 pvcinit
  2. Migration Controller 服务为所有 PVC 创建一个 转换 pod。
  3. conversion pod 运行 virt-v2v,它将虚拟机转换为 KVM hypervisor,并将磁盘的数据传送到对应的 PV。

    虚拟机磁盘传输后:

  4. Migration Controller 服务为每个源虚拟机(VM)创建一个 VirtualMachine CR,连接到 PVC。
  5. 如果虚拟机在源环境中运行,则虚拟机上的 Migration Controller 电源,KubeVirt Controller 服务会创建一个 virt-launcher pod 和 VirtualMachineInstance CR。

    virt-launcher pod 运行 QEMU-KVM,并附加了作为 VM 磁盘的 PVC。

16.3.4. MTV 如何使用 virt-v2v 工具

Migration Toolkit for Virtualization (MTV)使用 virt-v2v 工具将虚拟机的磁盘镜像转换为与 OpenShift Virtualization 兼容的格式。该工具使迁移变得更加容易,因为它自动执行了使虚拟机与 OpenShift Virtualization 一起工作所需的任务,如在转换的虚拟机中启用半虚拟化 VirtIO 驱动程序(如果可能),并安装 QEMU 客户机代理。

virt-v2v 包括在 Red Hat Enterprise Linux (RHEL)版本 7 及更高版本中。

16.3.4.1. MTV 迁移中的 virt-v2v 的主要功能

在迁移过程中,MTV 使用 virt-v2v 收集有关虚拟机的元数据,对虚拟机磁盘进行必要的更改,并将包含虚拟机的磁盘复制到 OpenShift Virtualization。

virt-v2v 对虚拟机磁盘进行以下更改,以便为迁移准备它们:

  • 附加组件:

    • VirtIO 驱动程序注入,如网络或磁盘驱动程序。
    • 准备特定于 hypervisor 的工具或代理,如 QEMU 客户机代理安装。
    • 修改引导配置,如更新的引导装载程序或引导条目。
  • 删除:

    • 不必要的或以前的特定于管理程序的文件,如 VMware 工具或 VirtualBox 添加。
    • 旧的网络驱动程序配置,例如删除 VMware 特定的 NIC 驱动程序。
    • 与目标系统不兼容的配置设置,如旧的引导设置。

如果您要从 VMware 或 OVA 文件迁移,virt-v2v 还会在迁移期间或迁移后第一次重启虚拟机期间设置其 IP 地址。

注意

您还可以使用 MTV 迁移前或之后运行预定义的 Ansible hook。如需更多信息,请参阅 在 MTV 迁移计划中添加 hook

这些 hook 不一定使用 virt-v2v

16.3.4.2. 自定义、删除和安装文件

MTV 使用 virt-v2v 在转换过程中执行额外的客户机自定义,比如以下操作:

  • 自定义以保留 IP 地址
  • 自定义以保留驱动器符
注意

对于基于 RHEL 的客户机,virt-v2v 会尝试从红帽 registry 安装客户机代理。如果迁移在分离的环境中运行,安装程序将失败,您必须使用 hook 或其他自动化来安装客户机代理。

如需更多信息,请参阅 man 参考页面:

16.3.4.3. 权限和 virt-v2v

virt-v2v 不需要客户端操作系统本身的权限或访问凭证,因为 virt-v2v 不会针对正在运行的虚拟机运行,而只针对虚拟机的磁盘运行。

16.4. 日志和自定义资源

您可以下载日志和自定义资源 (CR) 信息以进行故障排除。如需更多信息,请参阅详细的迁移工作流

16.4.1. 收集日志和自定义资源信息

您可以使用 Red Hat OpenShift Web 控制台或命令行界面(CLI)为以下目标下载日志和自定义资源(CR) yaml 文件:

  • 迁移计划:Web 控制台或 CLI。
  • 虚拟机:Web 控制台或 CLI.
  • 命名空间:仅限 CLI。

must-gather 工具会在存档文件中收集以下日志和 CR 文件:

  • CR:

    • DataVolume CR:代表在迁移的虚拟机中挂载的磁盘。
    • VirtualMachine CR:代表一个迁移的虚拟机。
    • Plan CR:定义 VM 和存储和网络映射。
    • Job CR:可选:代表迁移前 hook、迁移后 hook 或两者。
  • 日志:

    • Importer pod: Disk-to-data-volume 转换日志。importer pod 的命名格式是 importer-<migration_plan>-<vm_id><5_char_id>,例如 importer-mig-plan-ed90dfc6-9a17-4a8btnfh,其中 ed90dfc6-9a17-4a8 是经过裁剪的 RHV VM ID,btnfh 是生成的 5 个字符的 ID。
    • conversion pod:虚拟机转换日志.conversion pod 运行 virt-v2v,它会在虚拟机的 PVC 中安装和配置设备驱动程序。conversion pod 的命名格式是 <migration_plan>-<vm_id><5_char_id>
    • virt-launcher pod:VM launcher 日志.当迁移的虚拟机被开启后,virt-launcher Pod 运行 QEMU-KVM,并附加了作为虚拟机磁盘的 PVC。
    • forklift-controller pod:针对 must-gather 命令指定的迁移计划、虚拟机或命名空间过滤日志。
    • forklift-must-gather-api pod:日志针对 must-gather 命令指定的迁移计划、虚拟机或命名空间过滤。
    • hook-job pod:针对 hook 任务过滤日志。hook-job 命名约定是 < migration_plan>-<vm_id><5_char_id >,例如 plan2j-vm-3696-posthook-4mx85plan2j-vm-3696-prehook-mwqnl

      注意

      must-gather 归档文件中不包含空的或排除的日志文件。

VMware 迁移计划的 must-gather 归档结构示例

Copy to Clipboard Toggle word wrap
must-gather
└── namespaces
    ├── target-vm-ns
    │   ├── crs
    │   │   ├── datavolume
    │   │   │   ├── mig-plan-vm-7595-tkhdz.yaml
    │   │   │   ├── mig-plan-vm-7595-5qvqp.yaml
    │   │   │   └── mig-plan-vm-8325-xccfw.yaml
    │   │   └── virtualmachine
    │   │       ├── test-test-rhel8-2disks2nics.yaml
    │   │       └── test-x2019.yaml
    │   └── logs
    │       ├── importer-mig-plan-vm-7595-tkhdz
    │       │   └── current.log
    │       ├── importer-mig-plan-vm-7595-5qvqp
    │       │   └── current.log
    │       ├── importer-mig-plan-vm-8325-xccfw
    │       │   └── current.log
    │       ├── mig-plan-vm-7595-4glzd
    │       │   └── current.log
    │       └── mig-plan-vm-8325-4zw49
    │           └── current.log
    └── openshift-mtv
        ├── crs
        │   └── plan
        │       └── mig-plan-cold.yaml
        └── logs
            ├── forklift-controller-67656d574-w74md
            │   └── current.log
            └── forklift-must-gather-api-89fc7f4b6-hlwb6
                └── current.log

16.4.2. 从 web 控制台下载日志和自定义资源信息

您可以从 Red Hat OpenShift web 控制台下载有关已完成的、失败或取消迁移计划的自定义资源(VM)的日志和信息。

流程

  1. 在 Red Hat OpenShift web 控制台中,点 MigrationPlans for virtualization
  2. 点迁移计划名称旁的 Get logs
  3. Get logs 窗口中点 Get logs

    日志会被收集。此时会显示 Log collection complete 信息。

  4. Download logs 下载存档文件。
  5. 要下载迁移的虚拟机的日志,请点迁移计划名称,然后点 VM 的 Get logs

16.4.3. 从命令行访问日志和自定义资源信息

您可以使用 must-gather 工具从命令行访问自定义资源(CR)的日志和信息。您必须将 must-gather 数据文件附加到所有客户问题单。

您可以使用过滤选项收集特定命名空间、完成、失败或取消迁移的虚拟机(VM)的数据。

注意

如果您在过滤的 must-gather 命令中指定不存在的资源,则不会创建存档文件。

先决条件

  • 您必须以具有 cluster-admin 角色的用户身份登录到 OpenShift Virtualization 集群。
  • 已安装 Red Hat OpenShift CLI (oc)

流程

  1. 进入要存储 must-gather 数据的目录。
  2. 运行 oc adm must-gather 命令:

    Copy to Clipboard Toggle word wrap
    $ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4

    数据被保存为 /must-gather/must-gather.tar.gz。您可以将此文件上传到红帽客户门户网站中的支持问题单中。

  3. 可选:使用以下选项运行 oc adm must-gather 命令来收集过滤的数据:

    • 命名空间:

      Copy to Clipboard Toggle word wrap
      $ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4 \
        -- NS=<namespace> /usr/bin/targeted
    • 迁移计划:

      Copy to Clipboard Toggle word wrap
      $ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4 \
        -- PLAN=<migration_plan> /usr/bin/targeted
    • 虚拟机:

      Copy to Clipboard Toggle word wrap
      $ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4 \
        -- VM=<vm_name> NS=<namespace> /usr/bin/targeted 
      1
      1
      您必须指定虚拟机名称,而不是虚拟机 ID,因为它出现在 Plan CR 中。

第 17 章 Telemetry

17.1. Telemetry

红帽使用遥测从 Migration Toolkit for Virtualization (MTV)安装收集匿名使用数据,以帮助我们提高 MTV 的可用性和效率。

MTV 收集以下数据:

  • 迁移计划状态 :迁移数量。包括失败、成功或被取消的那些。
  • Provider :每个供应商的迁移数量。包括 Red Hat Virtualization、vSphere、OpenStack、OVA 和 OpenShift Virtualization 供应商。
  • mode :按模式的迁移数量。包括冷迁移和温迁移。
  • target :按目标的迁移数量。包括本地和远程迁移。
  • 计划 ID :迁移计划的 ID 号。数字由 MTV 分配。

指标每 10 秒计算一次,并每周、每月和每年报告。

第 18 章 其他信息

18.1. MTV 性能附加组件

此处提供的数据是从红帽实验室测试中收集而来的,仅供参考。 

总体而言,这些数字应该考虑显示最佳情况情况。

观察到的迁移性能可能与这些结果不同,这取决于几个因素。

18.1.1. ESXi 性能

单个 ESXi 性能

使用相同的 ESXi 主机测试迁移。

在每个迭代中,增加虚拟机总数,以显示并发迁移在持续时间上的影响。

结果显示,迁移时间在增加总虚拟机时是线性的(50 GiB 磁盘,利用率 70%)。

每个 ESXi 虚拟机的最佳数量是 10。

表 18.1. 单 ESXi 测试
测试问题单描述MTVVDDKmax_vm inflight迁移类型总持续时间

冷迁移、10 个虚拟机、单一 ESXi、专用网络 [a]

2.6

7.0.3

100

0:21:39

冷迁移、20 个虚拟机、单一 ESXi、专用网络

2.6

7.0.3

100

0:41:16

冷迁移、30 个虚拟机、单一 ESXi、专用网络

2.6

7.0.3

100

1:00:59

冷迁移、40 个虚拟机、单一 ESXi、专用网络

2.6

7.0.3

100

1:23:02

冷迁移、50 个虚拟机、单一 ESXi、专用网络

2.6

7.0.3

100

1:46:24

冷迁移、80 个虚拟机、单一 ESXi、专用网络

2.6

7.0.3

100

2:42:49

冷迁移、100 个虚拟机、单一 ESXi、专用网络

2.6

7.0.3

100

3:25:15

[a] 专用网络指的是非管理网络

多 ESXi 主机和单个数据存储

在每个迭代中,ESXi 主机数量都会被增加,以显示增加 ESXi 主机数量可提高迁移时间(50 GiB 磁盘、利用率 70%)。

表 18.2. 多 ESXi 主机和单个数据存储
测试问题单描述MTVVDDKMax_vm inflight迁移类型总持续时间

冷迁移、100 个虚拟机、单一 ESXi、专用网络 [a]

2.6

7.0.3

100

3:25:15

冷迁移、100 个虚拟机、4 个 ESXs (每个 ESX 个虚拟机), 专用网络

2.6

7.0.3

100

1:22:27

冷迁移、100 个 VM、5 ESXs (每个 ESX 的 20 个虚拟机)、专用网络,1 个 DataStore

2.6

7.0.3

100

1:04:57

[a] 专用网络指的是非管理网络

18.1.2. 不同的迁移网络性能

每个迭代都会更改迁移网络,使用 Provider 来查找要迁移的最快网络。

结果显示,当所有接口和网络速度都相同时,使用管理不会造成降级。

表 18.3. 不同的迁移网络测试
测试问题单描述MTVVDDKmax_vm inflight迁移类型总持续时间

冷迁移、10 个虚拟机、单一 ESXi、MGMT 网络

2.6

7.0.3

100

0:21:30

冷迁移、10 个虚拟机、单一 ESXi、专用网络 [a]

2.6

7.0.3

20

0:21:20

冷迁移、10 个虚拟机、单一 ESXi、默认网络

2.6.2

7.0.3

20

0:21:30

[a] 专用网络指的是非管理网络

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat, Inc.