安装并使用 Migration Toolkit for Virtualization
从 VMware vSphere 或 Red Hat Virtualization 迁移到 Red Hat 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)迁移到单独的主机。虚拟机已关闭,不需要常见的共享存储。
温迁移是将 开启 的虚拟机迁移到单独的主机。源主机状态克隆到目标主机。
温迁移预复制阶段
- 创建正在运行的虚拟机磁盘的初始快照。
- 将第一个快照复制到目标:全磁盘传输,复制的数据量。需要更长的时间来完成。
Copy deltas:更改的数据,仅复制自上次快照后更改的数据。完成需要较少的时间。
- 创建新快照。
- 在上一个快照和新快照之间复制 delta。
- 在上一次快照完成后,调度下一个快照,默认可配置快照。
- 可以复制任意数量的 deltas。
温迁移 cutover 阶段
- 计划完成温迁移的时间
- 关闭源虚拟机。
- 将最终快照 delta 复制到目标。
继续的方式与冷迁移相同
- 客户机转换
- 启动目标虚拟机(可选)
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:
冷迁移 | 温迁移 | |
---|---|---|
Duration | 与磁盘上的数据数量相关联。每个块都会被复制一次。 | 与磁盘和虚拟机利用率上的数据数量相关联。块可以多次复制。 |
快速故障 | 转换,然后传输。每个虚拟机都会转换为与 OpenShift 兼容,如果转换成功,则传输虚拟机。如果无法转换虚拟机,迁移会立即失败。 | 转让,然后转换。对于每个虚拟机,MTV 都会创建一个快照并将其传送到 Red Hat OpenShift。当您启动 cutover 时,MTV 会创建最后一个快照,传输它,然后转换虚拟机。 |
工具 |
|
容器化数据导入器(CDI)、持久性存储管理附加组件和 |
传输的数据 | 所有磁盘的大约总和 | 所有磁盘和虚拟机利用率的大约总和 |
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)对支持的存储使用以下默认卷和访问模式。
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. 端口
防火墙必须启用以下端口的流量:
端口 | 协议 | 源 | 目的地 | 目的 |
---|---|---|---|---|
443 | TCP | OpenShift 节点 | VMware vCenter | VMware 供应商清单 磁盘传输身份验证 |
443 | TCP | OpenShift 节点 | VMware ESXi 主机 | 磁盘传输身份验证 |
902 | TCP | OpenShift 节点 | VMware ESXi 主机 | 磁盘传输数据复制 |
端口 | 协议 | 源 | 目的地 | 目的 |
---|---|---|---|---|
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 Copied! Toggle word wrap Toggle overflow An error occurred while taking a snapshot: Failed to restart the virtual machine
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 迁移:
-
要创建源供应商,必须至少分配
UserRole
和ReadOnlyAdmin
角色。这些是最低所需的权限,但任何其他管理员或超级用户权限也会正常工作。
您必须保留 UserRole
和 ReadOnlyAdmin
角色,直到源提供程序的虚拟机被迁移为止。否则,迁移将失败。
迁移虚拟机:
您必须有以下之一:
- RHV admin 权限。这些权限允许您迁移系统中的任何虚拟机。
-
在您要迁移的每个虚拟机上的
DiskCreator
和UserVmManager
权限。
- 您必须使用兼容版本的 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 迁移:
- 您必须使用 兼容版本的 OpenStack。
3.6.1. 使用 OpenStack 源提供程序迁移的其他验证方法
MTV 版本 2.6 及之后的版本除了标准用户名和密码凭证集外,还支持使用 OpenStack 源供应商的以下验证方法进行迁移:
- 令牌身份验证
- 应用程序凭证身份验证
除了准备 Secret
清单外,您可以使用这些方法,以与迁移其他虚拟机相同的方式,使用 OpenStack 源提供程序迁移虚拟机。
3.6.1.1. 将令牌身份验证与 OpenStack 源提供程序搭配使用
在创建 OpenStack 源提供程序时,您可以使用令牌身份验证而不是用户名和密码身份验证。
MTV 支持以下令牌身份验证类型:
- 带有用户 ID 的令牌
- 使用用户名的令牌
对于每种令牌身份验证,您需要使用 OpenStack 中的数据来创建 Secret
清单。
先决条件
具有 OpenStack 帐户。
流程
- 在 OpenStack web 控制台的仪表板中,点 Project > API Access。
展开 Download OpenStack RC 文件,然后点 OpenStack RC 文件。
下载的文件(这里称为 <
openstack_rc_file
> )包括用于令牌身份验证的以下字段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow OS_AUTH_URL OS_PROJECT_ID OS_PROJECT_NAME OS_DOMAIN_NAME OS_USERNAME
OS_AUTH_URL OS_PROJECT_ID OS_PROJECT_NAME OS_DOMAIN_NAME OS_USERNAME
要获取令牌身份验证所需的数据,请运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack token issue
$ openstack token issue
此处的输出称为 <
openstack_token_output
>,其中包含了使用带有用户 ID
的令牌
进行身份验证所需的令牌、userID 和projectID
。创建类似如下的
Secret
清单:使用带有用户 ID 的令牌进行身份验证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 Copied! Toggle word wrap Toggle overflow 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
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 帐户。
流程
- 在 OpenStack web 控制台的仪表板中,点 Project > API Access。
展开 Download OpenStack RC 文件,然后点 OpenStack RC 文件。
下载的文件(这里称为 <
openstack_rc_file&
gt; )包括用于应用程序凭证身份验证的以下字段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow OS_AUTH_URL OS_PROJECT_ID OS_PROJECT_NAME OS_DOMAIN_NAME OS_USERNAME
OS_AUTH_URL OS_PROJECT_ID OS_PROJECT_NAME OS_DOMAIN_NAME OS_USERNAME
要获取应用程序凭证身份验证所需的数据,请运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openstack application credential create --role member --role reader --secret redhat forklift
$ openstack application credential create --role member --role reader --secret redhat forklift
此处的输出称为 <
openstack_credential_output
>,其中包括:-
使用应用程序凭证 ID 进行身份验证所需的
id
和secret
-
使用应用程序凭证
名称
进行身份验证所需的名称和secret
-
使用应用程序凭证 ID 进行身份验证所需的
创建类似如下的
Secret
清单:使用应用程序凭证 ID 进行身份验证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 Copied! Toggle word wrap Toggle overflow 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
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 迁移:
- 您必须使用兼容版本的 VMware vSphere 。
- 您必须以至少最小组的 VMware 权限的用户身份登录。
- 要使用预迁移 hook 访问虚拟机,必须在源虚拟机上安装 VMware 工具。
-
虚拟机操作系统必须经过认证并支持作为 带有 OpenShift Virtualization 的客户机操作系统使用以及 使用
virt-v2v
转换为 KVM。 - 如果您正运行 warm 迁移,则必须在虚拟机和 VM 磁盘中启用 已更改的块跟踪 (CBT)。
- 如果您要从同一迁移计划中的 ESXi 主机迁移超过 10 个虚拟机,您必须增加主机的 NFC 服务内存。
- 强烈建议您禁用休眠功能,因为 Migration Toolkit for Virtualization (MTV)不支持迁移休眠虚拟机。
对于运行 Microsoft Windows 的虚拟机(VM),使用客户机虚拟机中的 Volume Shadow Copy Service (VSS)来静止文件系统和应用程序。
从 VMware 执行 Microsoft Windows 虚拟机的温迁移时,您必须在 Windows 客户机操作系统上启动 VSS,以便快照和 Quiesce guest 文件系统
才能成功。
如果您没有在 Windows 客户机操作系统上启动 VSS,则 Warm 迁移期间的快照创建会失败并显示以下错误:
An error occurred while taking a snapshot: Failed to restart the virtual machine
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 权限集合。
特权 | 描述 |
---|---|
| |
| 允许关闭一个已启动的虚拟机。此操作关闭客户端操作系统。 |
| 允许打开已关闭的虚拟机并恢复暂停的虚拟机。 |
| 允许通过 VMware VIX API 管理虚拟机。 |
注意
需要所有 | |
| 允许在虚拟机上打开磁盘以实现随机读写访问。主要用于远程磁盘挂载。 |
| 允许操作与虚拟机相关的文件,包括 VMX、磁盘、日志和 NVRAM。 |
| 允许在虚拟机上打开一个磁盘以实现随机读取访问。主要用于远程磁盘挂载。 |
| 允许对与虚拟机关联的文件读取操作,包括 VMX、磁盘、日志和 NVRAM。 |
| 允许对与虚拟机关联的文件写操作,包括 VMX、磁盘、日志和 NVRAM。 |
| 允许克隆模板。 |
| 允许克隆现有虚拟机并分配资源。 |
| 允许从虚拟机创建新模板。 |
| 允许自定义虚拟机的客户机操作系统,而无需移动虚拟机。 |
| 允许从模板部署虚拟机。 |
| 允许将现有的关机虚拟机标记为模板。 |
| 允许将现有模板标记为虚拟机。 |
| 允许创建、修改或删除自定义规格。 |
| 允许对虚拟机磁盘提升操作。 |
| 允许读取自定义规格。 |
| |
| 允许从虚拟机当前状态创建快照。 |
| 允许从快照历史记录中移除快照。 |
| |
| 允许探索数据存储内容。 |
| 允许执行低级别文件操作 - 数据存储中的读取、写入、删除和重命名 -。 |
| |
| 允许验证会话的有效性。 |
| |
| 允许解密加密的虚拟机。 |
| 允许访问加密资源。 |
使用上表中描述的权限在 VMware 中创建一个角色,然后将此角色应用到 Inventory 部分,如 创建 VMware 角色以应用 MTV 权限中所述
3.7.2. 创建 VMware 角色以授予 MTV 权限
您可以在 VMware 中创建角色,为 Migration Toolkit for Virtualization (MTV)授予特权,然后向具有该角色的用户授予这些特权。
以下过程解释了如何一般执行此操作。具体步骤请查看 VMware 文档。
流程
- 在 vCenter Server UI 中,创建一个角色,其中包含 VMware 先决条件 中表中描述的权限集。
在 vSphere 清单 UI 中,在以下级别之一为具有此角色的用户授予权限到适当的 vSphere 逻辑对象:
- 在用户或组级别:将特权分配给数据中心中的适当逻辑对象,并使用 Propagate to child objects 选项。
- 在对象级别:将相同的角色单独应用到迁移中涉及的所有相关 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 必须能够访问它。
流程
创建并导航到临时目录:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
$ mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
- 在浏览器中,导航到 VMware VDDK 版本 8 下载页面。
- 选择版本 8.0.1 并点 Download。
要迁移到 OpenShift Virtualization 4.12,请从 VMware VDDK 版本 7 下载页面下载 VDDK 版本 7.0.3.2。
- 将 VDDK 归档文件保存到临时目录中。
提取 VDDK 归档:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
$ tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
创建
Dockerfile
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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
构建 VDDK 镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman build . -t <registry_route_or_server_path>/vddk:<tag>
$ podman build . -t <registry_route_or_server_path>/vddk:<tag>
将 VDDK 镜像推送到 registry:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow podman push <registry_route_or_server_path>/vddk:<tag>
$ podman push <registry_route_or_server_path>/vddk:<tag>
- 确保镜像可以被 OpenShift Virtualization 环境访问。
3.7.4. 增加 ESXi 主机的 NFC 服务内存
如果您要从同一迁移计划中的 ESXi 主机迁移超过 10 个虚拟机,您必须增加主机的 NFC 服务内存。否则,迁移将失败,因为 NFC 服务内存限制为 10 个并行连接。
流程
- 以 root 用户身份登录 ESXi 主机。
在
/etc/vmware/hostd/config.xml
中将maxMemory
改为1000000000
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... <nfcsvc> <path>libnfcsvc.so</path> <enabled>true</enabled> <maxMemory>1000000000</maxMemory> <maxStreamMemory>10485760</maxStreamMemory> </nfcsvc> ...
... <nfcsvc> <path>libnfcsvc.so</path> <enabled>true</enabled> <maxMemory>1000000000</maxMemory> <maxStreamMemory>10485760</maxStreamMemory> </nfcsvc> ...
重启
hostd
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/init.d/hostd restart
# /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。
-
virt_v2v_container_limits_cpu:
这会影响任何带有 hook 的迁移:
-
hooks_container_limits_cpu:
1000m
-
hooks_container_limits_memory:
1Gi
-
hooks_container_requests_cpu:
100m
-
hooks_container_requests_memory:
150Mi
-
hooks_container_limits_cpu:
这会影响任何 OVA 迁移:
-
ova_container_limits_cpu:
1000m
-
ova_container_limits_memory:
1Gi
-
ova_container_requests_cpu:
100m
-
ova_container_requests_memory:
150Mi
-
ova_container_limits_cpu:
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. 软件兼容性指南
您必须安装兼容软件版本。
Migration Toolkit for Virtualization | Red Hat OpenShift | OpenShift Virtualization | VMware vSphere | Red Hat Virtualization | OpenStack |
---|---|---|---|---|---|
2.8 | 4.18, 4.17, 4.16 | 4.18, 4.17, 4.16 | 6.5 或更高版本 | 4.4 SP1 或更高版本 | 16.1 或更高版本 |
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
权限的用户身份登录。
流程
- 在 Red Hat OpenShift Web 控制台中,点 Operators → OperatorHub。
- 使用 Filter by keyword 字段搜索 mtv-operator。
- 点 Migration Toolkit for Virtualization Operator,然后点 Install。
- 当按钮变为 active 时,点 Create ForkliftController。
点 Create。
您的 ForkliftController 会出现在显示的列表中。
- 点 Workloads → Pods 来验证 MTV pod 是否正在运行。
点 Operators → Installed 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
权限的用户身份登录。
流程
创建 openshift-mtv 项目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: project.openshift.io/v1 kind: Project metadata: name: openshift-mtv EOF
$ cat << EOF | oc apply -f - apiVersion: project.openshift.io/v1 kind: Project metadata: name: openshift-mtv EOF
创建名为
migration
的OperatorGroup
CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: migration namespace: openshift-mtv spec: targetNamespaces: - openshift-mtv EOF
$ cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: migration namespace: openshift-mtv spec: targetNamespaces: - openshift-mtv EOF
为 Operator 创建
Subscription
CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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
创建一个
ForkliftController
CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: ForkliftController metadata: name: forklift-controller namespace: openshift-mtv spec: olm_managed: true EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: ForkliftController metadata: name: forklift-controller namespace: openshift-mtv spec: olm_managed: true EOF
验证 MTV pod 是否正在运行:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n openshift-mtv
$ oc get pods -n openshift-mtv
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 Copied! Toggle word wrap Toggle overflow spec: parameter: value
spec: parameter: value
1 - 1
- 您可以使用 CLI 配置的参数显示在下表中,以及每个参数及其默认值的描述。
参数 | 描述 | 默认值 |
---|---|---|
| 与供应商不同,如下所示:
|
|
|
保留的持续时间(以小时为单位) |
|
| 分配给主控制器容器的 CPU 限制。 |
|
| 分配给主控制器容器的内存限值。 |
|
| 在启动温迁移前请求新快照的时间间隔(以分钟为单位)。 |
|
| 系统在温迁移期间检查快照创建和删除状态的频率(以秒为单位)。 |
|
|
当
仅限 |
|
|
修复了在持久块卷中分配的额外空间量。此设置适用于任何
仅限 |
|
| vSphere 源提供程序的配置映射。此配置映射将传入虚拟机的操作系统映射到 OpenShift Virtualization 首选项名称。此配置映射需要位于部署 MTV Operator 的命名空间中。 要查看 OpenShift Virtualization 环境中的首选项列表,打开 OpenShift Web 控制台并点击 Virtualization > Preferences。
当此参数具有默认值
仅限 |
|
| RHV 源提供程序的配置映射。此配置映射将传入虚拟机的操作系统映射到 OpenShift Virtualization 首选项名称。此配置映射需要位于部署 MTV Operator 的命名空间中。 要查看 OpenShift Virtualization 环境中的首选项列表,打开 OpenShift Web 控制台并点击 Virtualization → Preferences。
当此参数具有默认值
仅限 |
|
| 是否保留导入程序 pod,以便 Containerized Data Importer (CDI)不会在迁移过程中删除它们。
仅限 |
|
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 扩展接口

在与组件相关的页面中,您可以点位于页面左上角的 Projects 列表,并查看允许使用哪些项目(命名空间)。
- 如果您是管理员,您可以看到所有项目。
- 如果您是非管理员用户,则只能看到具有使用权限的项目。
5.1.1. MTV Overview 页面
Migration Toolkit for Virtualization (MTV) Overview 页面显示有关迁移的系统范围信息,以及您可以更改的 Settings 列表。
如果您有 Administrator 权限,请点击 Red Hat OpenShift web 控制台中的 Migration → Overview 来访问 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 页面并更改其中的以下设置:
设置 | 描述 | 默认值 |
---|---|---|
最大并发虚拟机迁移 | 与供应商不同,如下所示:
| 20 |
必须在之后收集清理(小时) |
保留的持续时间 | Disabled |
控制器主容器 CPU 限制 | 分配给主控制器容器的 CPU 限制。 | 500 m |
控制器主容器内存限制 | 分配给主控制器容器的内存限值。 | 800 Mi |
预复制内部(分钟) | 在启动温迁移前请求新快照的时间间隔。 | 60 |
快照轮询间隔(秒) | 系统在温迁移期间检查快照创建和删除状态的频率。 | 10 |
流程
- 在 Red Hat OpenShift web 控制台中点 Migration > Overview。Settings 列表位于页面右侧。
- 在 Settings 列表中,点您要更改的设置的 Edit 图标。
- 从列表中选择一个设置。
- 点击 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 的情况下无法正常工作。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 单击 Create Provider。
- 点 vSphere。
指定以下字段:
供应商详情
- Provider resource name :源提供程序的名称。
- 端点类型 :选择 vSphere 供应商端点类型。选项: vCenter 或 ESXi。您可以从 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 用户密码.
选择以下选项之一来验证 CA 证书:
- 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
- 使用系统 CA 证书 :验证系统 CA 证书后迁移。
跳过证书验证 :在不验证 CA 证书的情况下迁移。
- 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select。
- 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
- 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
可选:从供应商的 API 端点 URL 获取自定义 CA 证书。
- 点 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。
确认后,CA 证书将用于验证与 API 端点的后续通信。
点 Create provider 添加并保存该供应商。
供应商会出现在提供程序列表中。
注意可能需要过几分钟后,提供商才会变为
Ready
状态。可选:添加对供应商的 UI 的访问:
在 Providers 页面上,单击提供程序。
此时会打开 Provider 详情页面。
- 单击 External UI Web 链接 下的 Edit 图标。
输入链接并单击 保存。
注意如果没有输入链接,则 MTV 会尝试计算正确的链接。
- 如果 MTV 成功,字段的超链接会指向计算的链接。
- 如果 MTV 没有成功,该字段会保持为空。
6.2. 为 VMware 源供应商选择迁移网络
您可以在 Red Hat OpenShift Web 控制台中为源供应商选择迁移网络,以减少源环境的风险并提高性能。
将默认网络用于迁移可能会导致性能降低,因为网络可能没有足够的带宽。这种情形可以对源平台产生负面影响,因为磁盘传输操作可能会使网络饱和。
您还可以使用 vSphere 中的 Network File Copy (NFC)服务控制从主机传输磁盘的网络。
如果您输入迁移网络中默认值之外的任何最大传输单元(MTU),还必须在您使用的 OpenShift 传输网络中输入相同的值。如需有关 OpenShift 传输网络的更多信息,请参阅创建迁移计划。
先决条件
- 迁移网络必须具有足够的吞吐量,最小 10 Gbps 的速度用于磁盘传输。
OpenShift Virtualization 节点必须可通过默认网关访问迁移网络。
注意源虚拟磁盘由连接到目标命名空间的 pod 网络的 pod 复制。
- 迁移网络应该启用巨型帧。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 点供应商旁边的 Hosts 列中的主机编号,以查看主机列表。
- 选择一个或多个主机并点击 Select migration network。
指定以下字段:
- 网络 :网络名称
-
ESXi host admin username: 例如,
root
- ESXi host admin password: Password
- 点击 Save。
验证每个主机的状态是否为 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 服务帐户令牌。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 单击 Create Provider。
- 点击 OpenShift Virtualization。
指定以下字段:
- Provider resource name :源供应商的名称
- URL: API 服务器端点的 URL
Service account bearer 令牌 :一个具有
cluster-admin
权限的服务帐户的令牌如果 URL 和 Service account bearer 令牌 都留空,则会使用本地 OpenShift 集群。
选择以下选项之一来验证 CA 证书:
- 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
- 使用系统 CA 证书 :验证系统 CA 证书后迁移。
跳过证书验证 :在不验证 CA 证书的情况下迁移。
- 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select。
- 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
- 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
可选:从供应商的 API 端点 URL 获取自定义 CA 证书。
- 点 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。
确认后,CA 证书将用于验证与 API 端点的后续通信。
点 Create provider 添加并保存该供应商。
供应商会出现在提供程序列表中。
6.4. 为 OpenShift Virtualization 供应商选择迁移网络
您可以在 Red Hat OpenShift Web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。
选择转让网络后,将其网络附加定义(NAD)与这个网络使用的网关相关联。
如果您没有选择迁移网络,则默认迁移网络为 pod
网络,这可能不是磁盘传输的最佳选择。
您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration > Providers for virtualization。
点您要更改迁移网络的 OpenShift Virtualization 供应商。
当 Providers 详情页面 打开时:
- 点 Networks 标签页。
- 单击 Set default transfer network。
- 从列表中选择默认传输网络,然后单击 Save。
通过完成以下步骤,在网络中配置用于 MTV 迁移的网关:
- 在 Red Hat OpenShift Web 控制台中,点 Networking > NetworkAttachmentDefinitions。
- 选择适当的默认传输网络 NAD。
- 点 YAML 标签。
将
forklift.konveyor.io/route
添加到 YAML 的 metadata:annotations 部分,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: localnet-network namespace: mtv-test annotations: forklift.konveyor.io/route: <IP address>
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 地址可让接口访问配置的网关。
- 点击 Save。
6.5. 创建迁移计划
使用 Red Hat OpenShift Web 控制台创建迁移计划。指定源供应商、您要迁移的虚拟机(VM)和其他计划详情。
不要包括带有客户机初始化存储连接的虚拟机,如互联网小型计算机系统接口(iSCSI)连接或网络文件系统(NFS)挂载。这需要在迁移前进行额外的规划,或在迁移后进行重新配置。
这可防止客户端指向的存储并发磁盘访问。
计划不能包含 500 多个虚拟机或 500 个磁盘。
流程
在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization,然后单击 Create Plan。
Create migration plan 向导会打开 Select source provider 接口。
选择您要迁移的虚拟机的源供应商。
此时会打开 Select virtual machine 界面。
选择您要迁移的虚拟机,然后点 Next。
Create migration plan 窗格将打开。它显示目标供应商和命名空间、网络映射和存储映射的源供应商名称和建议。
- 输入 Plan 名称。
- 要更改 Target provider、Target namespace 或 Network map 或 Storage map 的元素,请从相关列表中选择一个项目。
- 要添加 网络映射 或存储映射,请单击 + 符号并添加映射。
点 Create migration plan。
MTV 验证迁移计划,并打开 Plan 详情页面,指示计划是否准备就绪,或包含错误。
列出计划的详细信息,您可以编辑在上一页上填写的项目。如果您进行任何更改,则 MTV 会再次验证计划。
检查页面的 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 菜单
。
- 选择 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 菜单
。
- 选择 Edit Volume name template。
- 根据说明输入模板。
点击 Save。
重要您在 Virtual Machines 选项卡中所做的更改会覆盖 Plan 详情页面中的任何更改。
-
可选: Network name template: 指定您计划中虚拟机的网络接口名称模板。
模板遵循 Go 模板语法,并可访问以下变量:
-
.networkName:
如果目标网络是multus
,请添加 Multus 网络附加定义的名称。否则,将此变量留空。 -
.networkNamespace
:如果目标网络是multus
,请添加 Multus 网络附加定义所在的命名空间。 -
.networkType
: Network type。选项:multus
或pod
。 .NetworkIndex
:网络接口的序列索引(0-based)。例子
-
"net-{{.NetworkIndex}}"
{{if eq .NetworkType "pod"}}pod{{else}}multus-{{.NetworkIndex}}{{end}}"
变量名称不能超过 63 个字符。
要为您计划中的所有虚拟机指定网络名称模板,请执行以下操作:
- 点 Edit 图标。
- 单击 Enter custom naming template。
- 根据说明输入模板。
- 点击 Save。
要只为特定虚拟机指定不同的网络名称模板,请执行以下操作:
- 点 Virtual Machines 标签页。
- 选择所需的虚拟机。
-
点击虚拟机的 Options 菜单
。
- 选择 Edit Network name template。
- 根据说明输入模板。
点击 Save。
重要您在 Virtual Machines 选项卡中所做的更改会覆盖 Plan 详情页面中的任何更改。
-
如果计划有效,您可以执行以下操作之一:
- 现在,点 Start migration 来运行计划。
- 稍后,在 Plans for virtualization 页面上选择计划并遵循 运行迁移计划 中的步骤来运行计划。
开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。
当您将 VMware 7 虚拟机迁移到使用 CentOS 7.9 的 OpenShift 4.13+ 平台时,网络接口的名称会改变,虚拟机的静态 IP 配置无法正常工作。
6.6. 运行迁移计划
您可以运行迁移计划,并在 Red Hat OpenShift Web 控制台中查看其进度。
先决条件
- 有效的迁移计划。
流程
在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization。
Plans 列表显示源和目标供应商、正在迁移的虚拟机数量、状态、迁移的日期以及每个计划的描述。
- 点迁移计划旁边的 Start 来启用迁移。
在打开的确认窗口中,单击 Start。
计划 的状态更改为 Running,并显示迁移的进度。
仅限 warm 迁移:
- precopy 阶段会启动。
点 Cutover 完成迁移。
警告开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。
可选:点迁移的 Status 中的链接查看其整体状态和每个虚拟机的状态:
- 左侧的链接表示迁移失败、成功还是持续。它还会报告迁移成功、失败或被取消的虚拟机数量。
右侧的链接会打开 Plan Details 页面的 Virtual Machines 选项卡。对于每个虚拟机,标签会显示以下数据:
- 虚拟机的名称
- 迁移的开始和结束时间
- 复制的数据量
虚拟机迁移的进度管道
警告对于正在导入的虚拟机,必须禁用 vMotion,包括 svMotion 和 relocate,以避免数据崩溃。
可选: 要在迁移的运行时或完成后查看迁移的日志,请执行以下操作:
- 点 Virtual Machines 标签页。
点击您要检查的虚拟机左侧的箭头(>)。
此时会显示虚拟机的详情。
在 Pod link 列中的 Pods 部分,点 Logs 链接。
Logs 选项卡将打开。
注意日志并不总是可用。以下是日志不可用的常见原因:
-
迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及
virt-v2v
,因此不需要 pod。 - 没有创建 pod。
- pod 已被删除。
- 迁移在运行 pod 前失败。
-
迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及
- 要查看原始日志,请点 Raw 链接。
- 要下载日志,请点 Download 链接。
6.7. 迁移计划选项
在 Red Hat OpenShift web 控制台的 Plans for virtualization 页面中,点迁移计划旁边的 Options 菜单
访问以下选项:
编辑计划 :编辑迁移计划的详细信息。如果计划正在运行或成功完成,则无法编辑以下选项:
- 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)的迁移。
流程
- 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization。
- 点正在运行的迁移计划的名称查看迁移详情。
- 选择一个或多个虚拟机,点 Cancel。
点 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 证书
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 单击 Create Provider。
- 点 Red Hat Virtualization
指定以下字段:
- 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
。 - 用户名 :用户名.
- 密码 :密码.
选择以下选项之一来验证 CA 证书:
- 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
- 使用系统 CA 证书 :验证系统 CA 证书后迁移。
跳过证书验证 :在不验证 CA 证书的情况下迁移。
- 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select。
- 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
- 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
可选:从供应商的 API 端点 URL 获取自定义 CA 证书。
- 点 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。
确认后,CA 证书将用于验证与 API 端点的后续通信。
点 Create provider 添加并保存该供应商。
供应商会出现在提供程序列表中。
可选:添加对供应商的 UI 的访问:
在 Providers 页面上,单击提供程序。
此时会打开 Provider 详情页面。
- 单击 External UI Web 链接 下的 Edit 图标。
输入链接并单击 保存。
注意如果没有输入链接,则 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 服务帐户令牌。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 单击 Create Provider。
- 点击 OpenShift Virtualization。
指定以下字段:
- Provider resource name :源供应商的名称
- URL: API 服务器端点的 URL
Service account bearer 令牌 :一个具有
cluster-admin
权限的服务帐户的令牌如果 URL 和 Service account bearer 令牌 都留空,则会使用本地 OpenShift 集群。
选择以下选项之一来验证 CA 证书:
- 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
- 使用系统 CA 证书 :验证系统 CA 证书后迁移。
跳过证书验证 :在不验证 CA 证书的情况下迁移。
- 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select。
- 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
- 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
可选:从供应商的 API 端点 URL 获取自定义 CA 证书。
- 点 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。
确认后,CA 证书将用于验证与 API 端点的后续通信。
点 Create provider 添加并保存该供应商。
供应商会出现在提供程序列表中。
7.3. 为 OpenShift Virtualization 供应商选择迁移网络
您可以在 Red Hat OpenShift Web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。
选择转让网络后,将其网络附加定义(NAD)与这个网络使用的网关相关联。
如果您没有选择迁移网络,则默认迁移网络为 pod
网络,这可能不是磁盘传输的最佳选择。
您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration > Providers for virtualization。
点您要更改迁移网络的 OpenShift Virtualization 供应商。
当 Providers 详情页面 打开时:
- 点 Networks 标签页。
- 单击 Set default transfer network。
- 从列表中选择默认传输网络,然后单击 Save。
通过完成以下步骤,在网络中配置用于 MTV 迁移的网关:
- 在 Red Hat OpenShift Web 控制台中,点 Networking > NetworkAttachmentDefinitions。
- 选择适当的默认传输网络 NAD。
- 点 YAML 标签。
将
forklift.konveyor.io/route
添加到 YAML 的 metadata:annotations 部分,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: localnet-network namespace: mtv-test annotations: forklift.konveyor.io/route: <IP address>
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 地址可让接口访问配置的网关。
- 点击 Save。
7.4. 创建迁移计划
使用 Red Hat OpenShift Web 控制台创建迁移计划。指定源供应商、您要迁移的虚拟机(VM)和其他计划详情。
不要包括带有客户机初始化存储连接的虚拟机,如互联网小型计算机系统接口(iSCSI)连接或网络文件系统(NFS)挂载。这需要在迁移前进行额外的规划,或在迁移后进行重新配置。
这可防止客户端指向的存储并发磁盘访问。
计划不能包含 500 多个虚拟机或 500 个磁盘。
流程
在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization,然后单击 Create Plan。
Create migration plan 向导会打开 Select source provider 接口。
选择您要迁移的虚拟机的源供应商。
此时会打开 Select virtual machine 界面。
选择您要迁移的虚拟机,然后点 Next。
Create migration plan 窗格将打开。它显示目标供应商和命名空间、网络映射和存储映射的源供应商名称和建议。
- 输入 Plan 名称。
- 要更改 Target provider、Target namespace 或 Network map 或 Storage map 的元素,请从相关列表中选择一个项目。
- 要添加 网络映射 或存储映射,请单击 + 符号并添加映射。
点 Create migration plan。
MTV 验证迁移计划,并打开 Plan 详情页面,指示计划是否准备就绪,或包含错误。
列出计划的详细信息,您可以编辑在上一页上填写的项目。如果您进行任何更改,则 MTV 会再次验证计划。
检查页面的 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。
如果计划有效,您可以执行以下操作之一:
- 现在,点 Start migration 来运行计划。
- 稍后,在 Plans for virtualization 页面上选择计划并遵循 运行迁移计划 中的步骤来运行计划。
开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。
7.5. 运行迁移计划
您可以运行迁移计划,并在 Red Hat OpenShift Web 控制台中查看其进度。
先决条件
- 有效的迁移计划。
流程
在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization。
Plans 列表显示源和目标供应商、正在迁移的虚拟机数量、状态、迁移的日期以及每个计划的描述。
- 点迁移计划旁边的 Start 来启用迁移。
在打开的确认窗口中,单击 Start。
计划 的状态更改为 Running,并显示迁移的进度。
仅限 warm 迁移:
- precopy 阶段会启动。
点 Cutover 完成迁移。
警告开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。
可选:点迁移的 Status 中的链接查看其整体状态和每个虚拟机的状态:
- 左侧的链接表示迁移失败、成功还是持续。它还会报告迁移成功、失败或被取消的虚拟机数量。
右侧的链接会打开 Plan Details 页面的 Virtual Machines 选项卡。对于每个虚拟机,标签会显示以下数据:
- 虚拟机的名称
- 迁移的开始和结束时间
- 复制的数据量
虚拟机迁移的进度管道
警告对于正在导入的虚拟机,必须禁用 vMotion,包括 svMotion 和 relocate,以避免数据崩溃。
可选: 要在迁移的运行时或完成后查看迁移的日志,请执行以下操作:
- 点 Virtual Machines 标签页。
点击您要检查的虚拟机左侧的箭头(>)。
此时会显示虚拟机的详情。
在 Pod link 列中的 Pods 部分,点 Logs 链接。
Logs 选项卡将打开。
注意日志并不总是可用。以下是日志不可用的常见原因:
-
迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及
virt-v2v
,因此不需要 pod。 - 没有创建 pod。
- pod 已被删除。
- 迁移在运行 pod 前失败。
-
迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及
- 要查看原始日志,请点 Raw 链接。
- 要下载日志,请点 Download 链接。
7.6. 迁移计划选项
在 Red Hat OpenShift web 控制台的 Plans for virtualization 页面中,点迁移计划旁边的 Options 菜单
访问以下选项:
编辑计划 :编辑迁移计划的详细信息。如果计划正在运行或成功完成,则无法编辑以下选项:
- 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)的迁移。
流程
- 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization。
- 点正在运行的迁移计划的名称查看迁移详情。
- 选择一个或多个虚拟机,点 Cancel。
点 Yes, cancel 确认取消。
在 Migration details by VM 列表中,取消的虚拟机的状态为 Canceled。未迁移且迁移的虚拟机不受影响。
您可以通过点 Migration Plan 页的迁移计划旁的 Restart 重启迁移。
第 8 章 从 OpenStack 迁移虚拟机
8.1. 添加 OpenStack 源供应商
您可以使用 Red Hat OpenShift Web 控制台添加 OpenStack 源供应商。
从 OpenStack 提供程序迁移基于镜像的虚拟机时,会为附加到源虚拟机的镜像创建一个快照,并将快照中的数据复制到目标虚拟机。这意味着目标虚拟机在创建快照时将具有与源虚拟机相同的状态。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 单击 Create Provider。
- 单击 OpenStack。
指定以下字段:
- Provider resource name :源提供程序的名称。
-
URL :OpenStack 身份(Keystone)端点的 URL。例如:
http://controller:5000/v3
。 身份验证类型 :选择以下验证方法之一并提供您选择的信息。例如,如果您选择 Application credential ID 作为身份验证类型,Application credential ID 和 Application 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 域名
选择以下选项之一来验证 CA 证书:
- 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
- 使用系统 CA 证书 :验证系统 CA 证书后迁移。
跳过证书验证 :在不验证 CA 证书的情况下迁移。
- 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select。
- 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
- 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
可选:从供应商的 API 端点 URL 获取自定义 CA 证书。
- 点 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。
确认后,CA 证书将用于验证与 API 端点的后续通信。
点 Create provider 添加并保存该供应商。
供应商会出现在提供程序列表中。
可选:添加对供应商的 UI 的访问:
在 Providers 页面上,单击提供程序。
此时会打开 Provider 详情页面。
- 单击 External UI Web 链接 下的 Edit 图标。
输入链接并单击 保存。
注意如果没有输入链接,则 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 服务帐户令牌。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 单击 Create Provider。
- 点击 OpenShift Virtualization。
指定以下字段:
- Provider resource name :源供应商的名称
- URL: API 服务器端点的 URL
Service account bearer 令牌 :一个具有
cluster-admin
权限的服务帐户的令牌如果 URL 和 Service account bearer 令牌 都留空,则会使用本地 OpenShift 集群。
选择以下选项之一来验证 CA 证书:
- 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
- 使用系统 CA 证书 :验证系统 CA 证书后迁移。
跳过证书验证 :在不验证 CA 证书的情况下迁移。
- 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select。
- 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
- 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
可选:从供应商的 API 端点 URL 获取自定义 CA 证书。
- 点 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。
确认后,CA 证书将用于验证与 API 端点的后续通信。
点 Create provider 添加并保存该供应商。
供应商会出现在提供程序列表中。
8.3. 为 OpenShift Virtualization 供应商选择迁移网络
您可以在 Red Hat OpenShift Web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。
选择转让网络后,将其网络附加定义(NAD)与这个网络使用的网关相关联。
如果您没有选择迁移网络,则默认迁移网络为 pod
网络,这可能不是磁盘传输的最佳选择。
您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration > Providers for virtualization。
点您要更改迁移网络的 OpenShift Virtualization 供应商。
当 Providers 详情页面 打开时:
- 点 Networks 标签页。
- 单击 Set default transfer network。
- 从列表中选择默认传输网络,然后单击 Save。
通过完成以下步骤,在网络中配置用于 MTV 迁移的网关:
- 在 Red Hat OpenShift Web 控制台中,点 Networking > NetworkAttachmentDefinitions。
- 选择适当的默认传输网络 NAD。
- 点 YAML 标签。
将
forklift.konveyor.io/route
添加到 YAML 的 metadata:annotations 部分,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: localnet-network namespace: mtv-test annotations: forklift.konveyor.io/route: <IP address>
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 地址可让接口访问配置的网关。
- 点击 Save。
8.4. 创建迁移计划
使用 Red Hat OpenShift Web 控制台创建迁移计划。指定源供应商、您要迁移的虚拟机(VM)和其他计划详情。
不要包括带有客户机初始化存储连接的虚拟机,如互联网小型计算机系统接口(iSCSI)连接或网络文件系统(NFS)挂载。这需要在迁移前进行额外的规划,或在迁移后进行重新配置。
这可防止客户端指向的存储并发磁盘访问。
计划不能包含 500 多个虚拟机或 500 个磁盘。
流程
在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization,然后单击 Create Plan。
Create migration plan 向导会打开 Select source provider 接口。
选择您要迁移的虚拟机的源供应商。
此时会打开 Select virtual machine 界面。
选择您要迁移的虚拟机,然后点 Next。
Create migration plan 窗格将打开。它显示目标供应商和命名空间、网络映射和存储映射的源供应商名称和建议。
- 输入 Plan 名称。
- 要更改 Target provider、Target namespace 或 Network map 或 Storage map 的元素,请从相关列表中选择一个项目。
- 要添加 网络映射 或存储映射,请单击 + 符号并添加映射。
点 Create migration plan。
MTV 验证迁移计划,并打开 Plan 详情页面,指示计划是否准备就绪,或包含错误。
列出计划的详细信息,您可以编辑在上一页上填写的项目。如果您进行任何更改,则 MTV 会再次验证计划。
检查页面的 Settings 部分中的以下项:
transfer Network: 用于将虚拟机传送到 OpenShift Virtualization 的网络。这是提供程序的默认传输网络。验证传输网络是否在所选目标命名空间中。
要编辑传输网络,请执行以下操作:
- 点 Edit 图标。
- 从列表中选择一个不同的传输网络。
- 点击 Save。
可选: 要在 OpenShift Web 控制台中配置 OpenShift 网络,点 Networking > NetworkAttachmentDefinitions。
如需了解更多有关 OpenShift 支持的不同类型的网络的信息,请参阅 OpenShift Container Platform 中的 额外网络。
- 可选: 要调整 OpenShift 传输网络的最大传输单元(MTU),还必须更改 VMware 迁移网络的 MTU。如需更多信息,请参阅为 VMware 源供应商选择迁移网络。
目标命名空间 :所有迁移的虚拟机的目标命名空间。默认情况下,目标命名空间是当前或活跃的命名空间。
要编辑命名空间,请执行以下操作:
- 点 Edit 图标。
- 从打开的窗口中的列表中选择不同的目标命名空间。
- 点击 Save。
如果计划有效,您可以执行以下操作之一:
- 现在,点 Start migration 来运行计划。
- 稍后,在 Plans for virtualization 页面上选择计划并遵循 运行迁移计划 中的步骤来运行计划。
开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。
8.5. 运行迁移计划
您可以运行迁移计划,并在 Red Hat OpenShift Web 控制台中查看其进度。
先决条件
- 有效的迁移计划。
流程
在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization。
Plans 列表显示源和目标供应商、正在迁移的虚拟机数量、状态、迁移的日期以及每个计划的描述。
- 点迁移计划旁边的 Start 来启用迁移。
在打开的确认窗口中,单击 Start。
计划 的状态更改为 Running,并显示迁移的进度。
警告开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。
可选:点迁移的 Status 中的链接查看其整体状态和每个虚拟机的状态:
- 左侧的链接表示迁移失败、成功还是持续。它还会报告迁移成功、失败或被取消的虚拟机数量。
右侧的链接会打开 Plan Details 页面的 Virtual Machines 选项卡。对于每个虚拟机,标签会显示以下数据:
- 虚拟机的名称
- 迁移的开始和结束时间
- 复制的数据量
虚拟机迁移的进度管道
警告对于正在导入的虚拟机,必须禁用 vMotion,包括 svMotion 和 relocate,以避免数据崩溃。
可选: 要在迁移的运行时或完成后查看迁移的日志,请执行以下操作:
- 点 Virtual Machines 标签页。
点击您要检查的虚拟机左侧的箭头(>)。
此时会显示虚拟机的详情。
在 Pod link 列中的 Pods 部分,点 Logs 链接。
Logs 选项卡将打开。
注意日志并不总是可用。以下是日志不可用的常见原因:
-
迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及
virt-v2v
,因此不需要 pod。 - 没有创建 pod。
- pod 已被删除。
- 迁移在运行 pod 前失败。
-
迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及
- 要查看原始日志,请点 Raw 链接。
- 要下载日志,请点 Download 链接。
8.6. 迁移计划选项
在 Red Hat OpenShift web 控制台的 Plans for virtualization 页面中,点迁移计划旁边的 Options 菜单
访问以下选项:
编辑计划 :编辑迁移计划的详细信息。如果计划正在运行或成功完成,则无法编辑以下选项:
- 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)的迁移。
流程
- 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization。
- 点正在运行的迁移计划的名称查看迁移详情。
- 选择一个或多个虚拟机,点 Cancel。
点 Yes, cancel 确认取消。
在 Migration details by VM 列表中,取消的虚拟机的状态为 Canceled。未迁移且迁移的虚拟机不受影响。
您可以通过点 Migration Plan 页的迁移计划旁的 Restart 重启迁移。
第 9 章 从 OVA 迁移虚拟机
9.1. 添加开放虚拟设备(OVA)源供应商
您可以使用 Red Hat OpenShift Web 控制台添加由 VMware vSphere 创建的开放虚拟设备(OVA)文件作为源供应商。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 单击 Create Provider。
- 单击 Open Virtual Appliance (OVA)。
指定以下字段:
- Provider resource name :源供应商的名称
- URL :提供 OVA 的 NFS 文件共享的 URL
点 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 服务帐户令牌。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 单击 Create Provider。
- 点击 OpenShift Virtualization。
指定以下字段:
- Provider resource name :源供应商的名称
- URL: API 服务器端点的 URL
Service account bearer 令牌 :一个具有
cluster-admin
权限的服务帐户的令牌如果 URL 和 Service account bearer 令牌 都留空,则会使用本地 OpenShift 集群。
选择以下选项之一来验证 CA 证书:
- 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
- 使用系统 CA 证书 :验证系统 CA 证书后迁移。
跳过证书验证 :在不验证 CA 证书的情况下迁移。
- 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select。
- 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
- 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
可选:从供应商的 API 端点 URL 获取自定义 CA 证书。
- 点 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。
确认后,CA 证书将用于验证与 API 端点的后续通信。
点 Create provider 添加并保存该供应商。
供应商会出现在提供程序列表中。
9.3. 为 OpenShift Virtualization 供应商选择迁移网络
您可以在 Red Hat OpenShift Web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。
选择转让网络后,将其网络附加定义(NAD)与这个网络使用的网关相关联。
如果您没有选择迁移网络,则默认迁移网络为 pod
网络,这可能不是磁盘传输的最佳选择。
您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration > Providers for virtualization。
点您要更改迁移网络的 OpenShift Virtualization 供应商。
当 Providers 详情页面 打开时:
- 点 Networks 标签页。
- 单击 Set default transfer network。
- 从列表中选择默认传输网络,然后单击 Save。
通过完成以下步骤,在网络中配置用于 MTV 迁移的网关:
- 在 Red Hat OpenShift Web 控制台中,点 Networking > NetworkAttachmentDefinitions。
- 选择适当的默认传输网络 NAD。
- 点 YAML 标签。
将
forklift.konveyor.io/route
添加到 YAML 的 metadata:annotations 部分,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: localnet-network namespace: mtv-test annotations: forklift.konveyor.io/route: <IP address>
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 地址可让接口访问配置的网关。
- 点击 Save。
9.4. 创建迁移计划
使用 Red Hat OpenShift Web 控制台创建迁移计划。指定源供应商、您要迁移的虚拟机(VM)和其他计划详情。
不要包括带有客户机初始化存储连接的虚拟机,如互联网小型计算机系统接口(iSCSI)连接或网络文件系统(NFS)挂载。这需要在迁移前进行额外的规划,或在迁移后进行重新配置。
这可防止客户端指向的存储并发磁盘访问。
计划不能包含 500 多个虚拟机或 500 个磁盘。
流程
在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization,然后单击 Create Plan。
Create migration plan 向导会打开 Select source provider 接口。
选择您要迁移的虚拟机的源供应商。
此时会打开 Select virtual machine 界面。
选择您要迁移的虚拟机,然后点 Next。
Create migration plan 窗格将打开。它显示目标供应商和命名空间、网络映射和存储映射的源供应商名称和建议。
- 输入 Plan 名称。
- 要更改 Target provider、Target namespace 或 Network map 或 Storage map 的元素,请从相关列表中选择一个项目。
- 要添加 网络映射 或存储映射,请单击 + 符号并添加映射。
点 Create migration plan。
MTV 验证迁移计划,并打开 Plan 详情页面,指示计划是否准备就绪,或包含错误。
列出计划的详细信息,您可以编辑在上一页上填写的项目。如果您进行任何更改,则 MTV 会再次验证计划。
检查页面的 Settings 部分中的以下项:
transfer Network: 用于将虚拟机传送到 OpenShift Virtualization 的网络。这是提供程序的默认传输网络。验证传输网络是否在所选目标命名空间中。
要编辑传输网络,请执行以下操作:
- 点 Edit 图标。
- 从列表中选择一个不同的传输网络。
- 点击 Save。
可选: 要在 OpenShift Web 控制台中配置 OpenShift 网络,点 Networking > NetworkAttachmentDefinitions。
如需了解更多有关 OpenShift 支持的不同类型的网络的信息,请参阅 OpenShift Container Platform 中的 额外网络。
- 可选: 要调整 OpenShift 传输网络的最大传输单元(MTU),还必须更改 VMware 迁移网络的 MTU。如需更多信息,请参阅为 VMware 源供应商选择迁移网络。
目标命名空间 :所有迁移的虚拟机的目标命名空间。默认情况下,目标命名空间是当前或活跃的命名空间。
要编辑命名空间,请执行以下操作:
- 点 Edit 图标。
- 从打开的窗口中的列表中选择不同的目标命名空间。
- 点击 Save。
如果计划有效,您可以执行以下操作之一:
- 现在,点 Start migration 来运行计划。
- 稍后,在 Plans for virtualization 页面上选择计划并遵循 运行迁移计划 中的步骤来运行计划。
开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。
9.5. 运行迁移计划
您可以运行迁移计划,并在 Red Hat OpenShift Web 控制台中查看其进度。
先决条件
- 有效的迁移计划。
流程
在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization。
Plans 列表显示源和目标供应商、正在迁移的虚拟机数量、状态、迁移的日期以及每个计划的描述。
- 点迁移计划旁边的 Start 来启用迁移。
在打开的确认窗口中,单击 Start。
计划 的状态更改为 Running,并显示迁移的进度。
警告开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。
可选:点迁移的 Status 中的链接查看其整体状态和每个虚拟机的状态:
- 左侧的链接表示迁移失败、成功还是持续。它还会报告迁移成功、失败或被取消的虚拟机数量。
右侧的链接会打开 Plan Details 页面的 Virtual Machines 选项卡。对于每个虚拟机,标签会显示以下数据:
- 虚拟机的名称
- 迁移的开始和结束时间
- 复制的数据量
虚拟机迁移的进度管道
警告对于正在导入的虚拟机,必须禁用 vMotion,包括 svMotion 和 relocate,以避免数据崩溃。
可选: 要在迁移的运行时或完成后查看迁移的日志,请执行以下操作:
- 点 Virtual Machines 标签页。
点击您要检查的虚拟机左侧的箭头(>)。
此时会显示虚拟机的详情。
在 Pod link 列中的 Pods 部分,点 Logs 链接。
Logs 选项卡将打开。
注意日志并不总是可用。以下是日志不可用的常见原因:
-
迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及
virt-v2v
,因此不需要 pod。 - 没有创建 pod。
- pod 已被删除。
- 迁移在运行 pod 前失败。
-
迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及
- 要查看原始日志,请点 Raw 链接。
- 要下载日志,请点 Download 链接。
9.6. 迁移计划选项
在 Red Hat OpenShift web 控制台的 Plans for virtualization 页面中,点迁移计划旁边的 Options 菜单
访问以下选项:
编辑计划 :编辑迁移计划的详细信息。如果计划正在运行或成功完成,则无法编辑以下选项:
- 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)的迁移。
流程
- 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization。
- 点正在运行的迁移计划的名称查看迁移详情。
- 选择一个或多个虚拟机,点 Cancel。
点 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 或更高版本。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 单击 Create Provider。
- 点击 OpenShift Virtualization。
指定以下字段:
- Provider resource name :源供应商的名称
- URL: API 服务器端点的 URL
Service account bearer 令牌 :一个具有
cluster-admin
权限的服务帐户的令牌如果 URL 和 Service account bearer 令牌 都留空,则会使用本地 OpenShift 集群。
选择以下选项之一来验证 CA 证书:
- 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
- 使用系统 CA 证书 :验证系统 CA 证书后迁移。
跳过证书验证 :在不验证 CA 证书的情况下迁移。
- 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select。
- 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
- 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
可选:从供应商的 API 端点 URL 获取自定义 CA 证书。
- 点 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。
确认后,CA 证书将用于验证与 API 端点的后续通信。
点 Create provider 添加并保存该供应商。
供应商会出现在提供程序列表中。
可选:添加对供应商的 UI 的访问:
在 Providers 页面上,单击提供程序。
此时会打开 Provider 详情页面。
- 单击 External UI Web 链接 下的 Edit 图标。
输入链接并单击 保存。
注意如果没有输入链接,则 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 服务帐户令牌。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Providers for virtualization。
- 单击 Create Provider。
- 点击 OpenShift Virtualization。
指定以下字段:
- Provider resource name :源供应商的名称
- URL: API 服务器端点的 URL
Service account bearer 令牌 :一个具有
cluster-admin
权限的服务帐户的令牌如果 URL 和 Service account bearer 令牌 都留空,则会使用本地 OpenShift 集群。
选择以下选项之一来验证 CA 证书:
- 使用自定义 CA 证书 :验证自定义 CA 证书后迁移。
- 使用系统 CA 证书 :验证系统 CA 证书后迁移。
跳过证书验证 :在不验证 CA 证书的情况下迁移。
- 要使用自定义 CA 证书,请将 Skip certificate 验证 开关切换为左,并将 CA 证书拖到 文本框中 或浏览该证书,然后点击 Select。
- 要使用系统 CA 证书,请将 Skip 证书验证 开关切换到左侧,并将 CA 证书 文本框留空。
- 要跳过证书验证,请将 Skip 证书验证 开关切换到右侧。
可选:从供应商的 API 端点 URL 获取自定义 CA 证书。
- 点 来自 URL 的 Fetch 证书。此时会打开 Verify certificate 窗口。
如果详细信息正确,请选择 I trust the authenticity of this certificate 复选框,然后单击 Confirm。如果没有,请单击 Cancel,然后手动输入正确的证书信息。
确认后,CA 证书将用于验证与 API 端点的后续通信。
点 Create provider 添加并保存该供应商。
供应商会出现在提供程序列表中。
10.3. 为 OpenShift Virtualization 供应商选择迁移网络
您可以在 Red Hat OpenShift Web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。
选择转让网络后,将其网络附加定义(NAD)与这个网络使用的网关相关联。
如果您没有选择迁移网络,则默认迁移网络为 pod
网络,这可能不是磁盘传输的最佳选择。
您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration > Providers for virtualization。
点您要更改迁移网络的 OpenShift Virtualization 供应商。
当 Providers 详情页面 打开时:
- 点 Networks 标签页。
- 单击 Set default transfer network。
- 从列表中选择默认传输网络,然后单击 Save。
通过完成以下步骤,在网络中配置用于 MTV 迁移的网关:
- 在 Red Hat OpenShift Web 控制台中,点 Networking > NetworkAttachmentDefinitions。
- 选择适当的默认传输网络 NAD。
- 点 YAML 标签。
将
forklift.konveyor.io/route
添加到 YAML 的 metadata:annotations 部分,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: localnet-network namespace: mtv-test annotations: forklift.konveyor.io/route: <IP address>
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 地址可让接口访问配置的网关。
- 点击 Save。
10.4. 创建迁移计划
使用 Red Hat OpenShift Web 控制台创建迁移计划。指定源供应商、您要迁移的虚拟机(VM)和其他计划详情。
不要包括带有客户机初始化存储连接的虚拟机,如互联网小型计算机系统接口(iSCSI)连接或网络文件系统(NFS)挂载。这需要在迁移前进行额外的规划,或在迁移后进行重新配置。
这可防止客户端指向的存储并发磁盘访问。
计划不能包含 500 多个虚拟机或 500 个磁盘。
流程
在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization,然后单击 Create Plan。
Create migration plan 向导会打开 Select source provider 接口。
选择您要迁移的虚拟机的源供应商。
此时会打开 Select virtual machine 界面。
选择您要迁移的虚拟机,然后点 Next。
Create migration plan 窗格将打开。它显示目标供应商和命名空间、网络映射和存储映射的源供应商名称和建议。
- 输入 Plan 名称。
- 要更改 Target provider、Target namespace 或 Network map 或 Storage map 的元素,请从相关列表中选择一个项目。
- 要添加 网络映射 或存储映射,请单击 + 符号并添加映射。
点 Create migration plan。
MTV 验证迁移计划,并打开 Plan 详情页面,指示计划是否准备就绪,或包含错误。
列出计划的详细信息,您可以编辑在上一页上填写的项目。如果您进行任何更改,则 MTV 会再次验证计划。
检查页面的 Settings 部分中的以下项:
transfer Network: 用于将虚拟机传送到 OpenShift Virtualization 的网络。这是提供程序的默认传输网络。验证传输网络是否在所选目标命名空间中。
要编辑传输网络,请执行以下操作:
- 点 Edit 图标。
- 从列表中选择一个不同的传输网络。
- 点击 Save。
可选: 要在 OpenShift Web 控制台中配置 OpenShift 网络,点 Networking > NetworkAttachmentDefinitions。
如需了解更多有关 OpenShift 支持的不同类型的网络的信息,请参阅 OpenShift Container Platform 中的 额外网络。
- 可选: 要调整 OpenShift 传输网络的最大传输单元(MTU),还必须更改 VMware 迁移网络的 MTU。如需更多信息,请参阅为 VMware 源供应商选择迁移网络。
目标命名空间 :所有迁移的虚拟机的目标命名空间。默认情况下,目标命名空间是当前或活跃的命名空间。
要编辑命名空间,请执行以下操作:
- 点 Edit 图标。
- 从打开的窗口中的列表中选择不同的目标命名空间。
- 点击 Save。
如果计划有效,您可以执行以下操作之一:
- 现在,点 Start migration 来运行计划。
- 稍后,在 Plans for virtualization 页面上选择计划并遵循 运行迁移计划 中的步骤来运行计划。
开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。
10.5. 运行迁移计划
您可以运行迁移计划,并在 Red Hat OpenShift Web 控制台中查看其进度。
先决条件
- 有效的迁移计划。
流程
在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization。
Plans 列表显示源和目标供应商、正在迁移的虚拟机数量、状态、迁移的日期以及每个计划的描述。
- 点迁移计划旁边的 Start 来启用迁移。
在打开的确认窗口中,单击 Start。
计划 的状态更改为 Running,并显示迁移的进度。
警告开始迁移后不要对虚拟机进行快照。在迁移启动后进行 snaphot 可能会导致迁移失败。
可选:点迁移的 Status 中的链接查看其整体状态和每个虚拟机的状态:
- 左侧的链接表示迁移失败、成功还是持续。它还会报告迁移成功、失败或被取消的虚拟机数量。
右侧的链接会打开 Plan Details 页面的 Virtual Machines 选项卡。对于每个虚拟机,标签会显示以下数据:
- 虚拟机的名称
- 迁移的开始和结束时间
- 复制的数据量
虚拟机迁移的进度管道
警告对于正在导入的虚拟机,必须禁用 vMotion,包括 svMotion 和 relocate,以避免数据崩溃。
可选: 要在迁移的运行时或完成后查看迁移的日志,请执行以下操作:
- 点 Virtual Machines 标签页。
点击您要检查的虚拟机左侧的箭头(>)。
此时会显示虚拟机的详情。
在 Pod link 列中的 Pods 部分,点 Logs 链接。
Logs 选项卡将打开。
注意日志并不总是可用。以下是日志不可用的常见原因:
-
迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及
virt-v2v
,因此不需要 pod。 - 没有创建 pod。
- pod 已被删除。
- 迁移在运行 pod 前失败。
-
迁移是从 OpenShift Virtualization 迁移到 OpenShift Virtualization。在这种情况下,不涉及
- 要查看原始日志,请点 Raw 链接。
- 要下载日志,请点 Download 链接。
10.6. 迁移计划选项
在 Red Hat OpenShift web 控制台的 Plans for virtualization 页面中,点迁移计划旁边的 Options 菜单
访问以下选项:
编辑计划 :编辑迁移计划的详细信息。如果计划正在运行或成功完成,则无法编辑以下选项:
- 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)的迁移。
流程
- 在 Red Hat OpenShift web 控制台中,单击 Plans for virtualization。
- 点正在运行的迁移计划的名称查看迁移详情。
- 选择一个或多个虚拟机,点 Cancel。
点 Yes, cancel 确认取消。
在 Migration details by VM 列表中,取消的虚拟机的状态为 Canceled。未迁移且迁移的虚拟机不受影响。
您可以通过点 Migration Plan 页的迁移计划旁的 Restart 重启迁移。
第 11 章 从命令行迁移虚拟机
您可以使用命令行将虚拟机迁移到 OpenShift Virtualization。
您必须确保 满足所有先决条件。
11.1. 非管理员用户使用迁移计划组件所需的权限
如果您是管理员,您可以处理迁移计划的所有组件(如供应商、网络映射和迁移计划)。
默认情况下,非管理员用户对迁移计划及其组件具有有限的能力。作为管理员,您可以修改其角色,以允许他们完全访问所有组件,或者授予它们有限的权限。
例如,管理员可以为迁移计划分配一个或多个以下集群角色:
角色 | 描述 |
---|---|
| 可以查看迁移计划,但不能创建、删除或修改它们 |
|
可以创建、删除或修改( |
|
所有 |
请注意,预定义的集群角色包括资源(例如,计划
)、API 组(如 forklift.konveyor.io-v1beta1)
和一个操作(例如,查看
、编辑
)。
作为更全面的示例,您可以为每个命名空间授予以下非管理员用户集:
- 为有权访问的命名空间创建和修改存储映射、网络映射和迁移计划
- 将管理员创建的提供程序附加到存储映射、网络映射和迁移计划
- 无法创建供应商或更改系统设置
Actions | API 组 | 资源 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 空字符串 |
|
非管理员用户需要具有作为网络映射 的编辑
角色以及存储映射的一部分的 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),请参阅使用 共享磁盘迁移虚拟机。
流程
为源供应商凭证创建
Secret
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: vsphere createdForResourceType: providers type: Opaque stringData: user: <user> password: <password> insecureSkipVerify: <"true"/"false"> cacert: | <ca_certificate> url: <api_end_point> EOF
$ 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
。
为源供应商创建
Provider
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> settings: vddkInitImage: <VDDK_image> sdkEndpoint: vcenter secret: name: <secret> namespace: <namespace> EOF
$ 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
创建
主机清单
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> id: <source_host_mor> ipAddress: <source_network_ip> EOF
$ 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 地址。
创建
NetworkMap
清单来映射源和目标网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 source: id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> 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
$ 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
- 允许的值有
pod
、multus
,并忽略
。使用忽略
以避免在此迁移中将虚拟机附加到这个网络。 - 2
- 您可以使用
id
或name
参数来指定源网络。对于id
,指定 VMware vSphere 网络受管对象参考(moRef)。要检索 moRef,请参阅 检索 VMware vSphere moRef。 - 3
- 为每个额外 OpenShift Virtualization 网络指定网络附加定义。
- 4
- 仅在
类型
multus
时才需要。指定 OpenShift Virtualization 网络附加定义的命名空间。
创建
StorageMap
清单来映射源和目标存储:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> source: id: <source_datastore> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ 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
- 允许的值有
ReadWriteOnce
和ReadWriteMany
。 - 2
- 指定 VMware vSphere 数据存储 moRef。例如,
f2737930-b567-451a-9ceb-2887f6207009
。要检索 moRef,请参阅 检索 VMware vSphere moRef。
可选:在
Plan
CR 中指定的阶段创建一个Hook
清单以在虚拟机中运行自定义代码:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> playbook: | LS0tCi0gbm... EOF
$ 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
注意您可以使用默认
hook-runner
镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。
输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。
您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。
配置 IP 地址可让接口访问配置的网关。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
$ 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>
为迁移创建
Plan
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> spec: warm: false provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> preserveStaticIPs: networkNameTemplate: <network_interface_template> pvcNameTemplate: <pvc_name_template> pvcNameTemplateUseGenerateName: true targetNamespace: <target_namespace> volumeNameTemplate: <volume_name_template> vms: - id: <source_vm1> - name: <source_vm2> networkNameTemplate: <network_interface_template_for_this_vm> pvcNameTemplate: <pvc_name_template_for_this_vm> volumeNameTemplate: <volume_name_template_for_this_vm> targetName: <target_name> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ 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
:指定网络类型。选项:multus
或pod
。 .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
- 您可以使用
id
或name
参数指定源虚拟机。 - 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 配置无法正常工作。
创建运行
Plan
CR 的Migration
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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 的参考。
流程
为项目检索路由:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route -n openshift-mtv
oc get route -n openshift-mtv
检索
Inventory
服务路由:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route <inventory_service> -n openshift-mtv
$ oc get route <inventory_service> -n openshift-mtv
检索访问令牌:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TOKEN=$(oc whoami -t)
$ TOKEN=$(oc whoami -t)
检索 VMware vSphere 供应商的 moRef :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere -k
检索 VMware vSphere 源供应商的数据存储:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow [ { "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" }, ...
[ { "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.3. 使用命令行界面取消迁移
您可以使用命令行界面(CLI)在迁移过程中取消整个迁移或特定虚拟机的迁移。
取消整个迁移
删除
Migration
CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete migration <migration> -n <namespace>
$ oc delete migration <migration> -n <namespace>
1 - 1
- 指定
Migration
CR 的名称。
取消特定虚拟机的迁移
将特定的虚拟机添加到
Migration
清单的spec.cancel
块中:取消两个虚拟机的迁移的 YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> namespace: <namespace> ... spec: cancel: - id: vm-102 - id: vm-203 name: rhel8-vm EOF
$ 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)。检索
Migration
CR 以监控剩余的虚拟机的进度:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get migration/<migration> -n <namespace> -o yaml
$ 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,这可能会导致数据崩溃。
流程
为源供应商凭证创建
Secret
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: ovirt createdForResourceType: providers type: Opaque stringData: user: <user> password: <password> insecureSkipVerify: <"true"/"false"> cacert: | <ca_certificate> url: <api_end_point> EOF
$ 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
。
为源供应商创建
Provider
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> secret: name: <secret> namespace: <namespace> EOF
$ 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
创建
NetworkMap
清单来映射源和目标网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 source: id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> 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
$ 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
创建
StorageMap
清单来映射源和目标存储:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> source: id: <source_storage_domain> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ 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
可选:在
Plan
CR 中指定的阶段创建一个Hook
清单以在虚拟机中运行自定义代码:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> playbook: | LS0tCi0gbm... EOF
$ 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
注意您可以使用默认
hook-runner
镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。
输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。
您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。
配置 IP 地址可让接口访问配置的网关。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
$ 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>
为迁移创建
Plan
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> preserveClusterCpuModel: true spec: warm: false provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> targetNamespace: <target_namespace> vms: - id: <source_vm1> - name: <source_vm2> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ 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
- 您可以使用
id
或name
参数指定源虚拟机。 - 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 模型设置虚拟机。
-
如果
创建运行
Plan
CR 的Migration
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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 Copied! Toggle word wrap Toggle overflow oc delete migration <migration> -n <namespace>
$ oc delete migration <migration> -n <namespace>
1 - 1
- 指定
Migration
CR 的名称。
取消特定虚拟机的迁移
将特定的虚拟机添加到
Migration
清单的spec.cancel
块中:取消两个虚拟机的迁移的 YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> namespace: <namespace> ... spec: cancel: - id: vm-102 - id: vm-203 name: rhel8-vm EOF
$ 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)。检索
Migration
CR 以监控剩余的虚拟机的进度:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get migration/<migration> -n <namespace> -o yaml
$ oc get migration/<migration> -n <namespace> -o yaml
11.5. 从 OpenStack 源供应商迁移
您可以使用命令行界面(CLI)从 OpenStack 源提供程序迁移。
流程
为源供应商凭证创建
Secret
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: openstack createdForResourceType: providers type: Opaque stringData: user: <user> password: <password> insecureSkipVerify: <"true"/"false"> domainName: <domain_name> projectName: <project_name> regionName: <region_name> cacert: | <ca_certificate> url: <api_end_point> EOF
$ 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
为源供应商创建
Provider
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> secret: name: <secret> namespace: <namespace> EOF
$ 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
创建
NetworkMap
清单来映射源和目标网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 source: id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> 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
$ 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
创建
StorageMap
清单来映射源和目标存储:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> source: id: <source_volume_type> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ 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
可选:在
Plan
CR 中指定的阶段创建一个Hook
清单以在虚拟机中运行自定义代码:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> playbook: | LS0tCi0gbm... EOF
$ 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
注意您可以使用默认
hook-runner
镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。
输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。
您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。
配置 IP 地址可让接口访问配置的网关。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
$ 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>
为迁移创建
Plan
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> spec: provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> targetNamespace: <target_namespace> vms: - id: <source_vm1> - name: <source_vm2> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ 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
- 您可以使用
id
或name
参数指定源虚拟机。 - 8
- 指定 OpenStack VM UUID。
- 9
- 可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
- 10
- 指定
Hook
CR 的名称。 - 11
- 在迁移完成后,允许的值是
PreHook
、在迁移计划启动前或PostHook
。
创建运行
Plan
CR 的Migration
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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 Copied! Toggle word wrap Toggle overflow oc delete migration <migration> -n <namespace>
$ oc delete migration <migration> -n <namespace>
1 - 1
- 指定
Migration
CR 的名称。
取消特定虚拟机的迁移
将特定的虚拟机添加到
Migration
清单的spec.cancel
块中:取消两个虚拟机的迁移的 YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> namespace: <namespace> ... spec: cancel: - id: vm-102 - id: vm-203 name: rhel8-vm EOF
$ 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)。检索
Migration
CR 以监控剩余的虚拟机的进度:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get migration/<migration> -n <namespace> -o yaml
$ oc get migration/<migration> -n <namespace> -o yaml
11.6. 从开放虚拟设备(OVA)源提供商迁移
您可以使用命令行界面(CLI)从由 VMware vSphere 创建的开放虚拟设备(OVA)文件迁移到源供应商。
流程
为源供应商凭证创建
Secret
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - 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> EOF
$ 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
为源供应商创建
Provider
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> secret: name: <secret> namespace: <namespace> EOF
$ 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
创建
NetworkMap
清单来映射源和目标网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 source: id: <source_network_id> - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> type: multus source: id: <source_network_id> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ 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
创建
StorageMap
清单来映射源和目标存储:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> source: name: Dummy storage for source provider <provider_name> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ 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
可选:在
Plan
CR 中指定的阶段创建一个Hook
清单以在虚拟机中运行自定义代码:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> playbook: | LS0tCi0gbm... EOF
$ 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
注意您可以使用默认
hook-runner
镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。
输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。
您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。
配置 IP 地址可让接口访问配置的网关。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
$ 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>
为迁移创建
Plan
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> spec: provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> targetNamespace: <target_namespace> vms: - id: <source_vm1> - name: <source_vm2> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ 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
- 您可以使用
id
或name
参数指定源虚拟机。 - 8
- 指定 OVA 虚拟机 UUID。
- 9
- 可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
- 10
- 指定
Hook
CR 的名称。 - 11
- 在迁移完成后,允许的值是
PreHook
、在迁移计划启动前或PostHook
。
创建运行
Plan
CR 的Migration
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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 Copied! Toggle word wrap Toggle overflow oc delete migration <migration> -n <namespace>
$ oc delete migration <migration> -n <namespace>
1 - 1
- 指定
Migration
CR 的名称。
取消特定虚拟机的迁移
将特定的虚拟机添加到
Migration
清单的spec.cancel
块中:取消两个虚拟机的迁移的 YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> namespace: <namespace> ... spec: cancel: - id: vm-102 - id: vm-203 name: rhel8-vm EOF
$ 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)。检索
Migration
CR 以监控剩余的虚拟机的进度:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get migration/<migration> -n <namespace> -o yaml
$ oc get migration/<migration> -n <namespace> -o yaml
11.7. 从 Red Hat OpenShift Virtualization 源供应商迁移
您可以使用 Red Hat OpenShift Virtualization 供应商作为源供应商,或作为目的地供应商。您可以使用命令行界面(CLI)从 OpenShift Virtualization 源供应商迁移。
流程
为源供应商凭证创建
Secret
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: openshift createdForResourceType: providers type: Opaque stringData: token: <token> password: <password> insecureSkipVerify: <"true"/"false"> cacert: | <ca_certificate> url: <api_end_point> EOF
$ 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
为源供应商创建
Provider
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> secret: name: <secret> namespace: <namespace> EOF
$ 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
创建
NetworkMap
清单来映射源和目标网络:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 source: name: <network_name> type: pod - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> 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
$ 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
创建
StorageMap
清单来映射源和目标存储:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> source: name: <storage_class> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ 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
- 允许的值有
ReadWriteOnce
和ReadWriteMany
。
可选:在
Plan
CR 中指定的阶段创建一个Hook
清单以在虚拟机中运行自定义代码:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> playbook: | LS0tCi0gbm... EOF
$ 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
注意您可以使用默认
hook-runner
镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。
输入以下命令为 MTV 迁移创建传输网络的网络附加定义(NAD)。
您可以使用此定义为接口配置 IP 地址,可以从 Dynamic Host Configuration Protocol (DHCP)或静态方式配置。
配置 IP 地址可让接口访问配置的网关。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
$ 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>
为迁移创建
Plan
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> spec: provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> targetNamespace: <target_namespace> vms: - name: <source_vm> namespace: <namespace> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ 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
创建运行
Plan
CR 的Migration
清单:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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 Copied! Toggle word wrap Toggle overflow oc delete migration <migration> -n <namespace>
$ oc delete migration <migration> -n <namespace>
1 - 1
- 指定
Migration
CR 的名称。
取消特定虚拟机的迁移
将特定的虚拟机添加到
Migration
清单的spec.cancel
块中:取消两个虚拟机的迁移的 YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> namespace: <namespace> ... spec: cancel: - id: vm-102 - id: vm-203 name: rhel8-vm EOF
$ 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)。检索
Migration
CR 以监控剩余的虚拟机的进度:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get migration/<migration> -n <namespace> -o yaml
$ oc get migration/<migration> -n <namespace> -o yaml
第 12 章 高级迁移选项
12.1. 为 warm 迁移更改预复制间隔
您可以通过修补 ForkliftController
自定义资源(CR)来更改快照间隔。
流程
对
ForkliftController
CR 进行补丁:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc patch forkliftcontroller/<forklift-controller> -n openshift-mtv -p '{"spec": {"controller_precopy_interval": <60>}}' --type=merge
$ 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 示例
package io.konveyor.forklift.vmware has_drs_enabled { input.host.cluster.drsEnabled } 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." } }
package io.konveyor.forklift.vmware
has_drs_enabled {
input.host.cluster.drsEnabled
}
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."
}
}
12.2.2. 检查默认验证规则
在创建自定义规则前,您必须检查 Validation
服务的默认规则,以确保您不会创建重新定义现有默认值的规则。
示例:如果默认规则包含行 default valid_input = false
,并且您创建一个包含行 default valid_input = true
,则 Validation
服务将不会启动。
流程
连接到
Validation
pod 的终端:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc rsh <validation_pod>
$ oc rsh <validation_pod>
进入您的供应商的 OPA 策略目录:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cd /usr/share/opa/policies/io/konveyor/forklift/<provider>
$ cd /usr/share/opa/policies/io/konveyor/forklift/<provider>
1 - 1
- 指定
vmware
或ovirt
。
搜索默认策略:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow grep -R "default" *
$ 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
服务使用列表值简化了此配置并返回一个可测试属性:
"numaNodeAffinity": [ "0", "1" ],
"numaNodeAffinity": [
"0",
"1"
],
您可以根据此属性创建一个 Rego 查询,并将其添加到 forklift-validation-config
配置映射中:
`count(input.numaNodeAffinity) != 0`
`count(input.numaNodeAffinity) != 0`
流程
根据以下示例创建配置映射 CR:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> has_multiple_disks { count(input.disks) > 1 } concerns[flag] { has_multiple_disks flag := { "category": "<Information>", "label": "Multiple disks detected", "assessment": "Multiple disks detected on this VM." } } EOF
$ 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
通过将
forklift-controller
部署扩展到0
来停止Validation
pod:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
$ oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
通过将
forklift-controller
部署扩展到1
来启动Validation
pod:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
$ oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
检查
Validation
pod 日志,以验证 pod 是否已启动:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs -f <validation_pod>
$ oc logs -f <validation_pod>
如果自定义规则与默认规则冲突,则
Validation
pod 将不会启动。删除源供应商:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete provider <provider> -n openshift-mtv
$ oc delete provider <provider> -n openshift-mtv
添加源供应商以应用新规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <provider> namespace: openshift-mtv spec: type: <provider_type> url: <api_end_point> secret: name: <secret> namespace: openshift-mtv EOF
$ 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
您必须在创建自定义规则后更新规则版本,以便 Inventory
服务检测到更改并验证虚拟机。
12.2.4. 更新清单规则版本
每次更新规则时,您必须更新 inventory 规则版本,以便 Provider Inventory
服务检测到更改并触发 Validation
服务。
规则版本记录在每个供应商的 rules_version.rego
文件中。
流程
检索当前的规则版本:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version
$ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version
1 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "result": { "rules_version": 5 } }
{ "result": { "rules_version": 5 } }
连接到
Validation
pod 的终端:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc rsh <validation_pod>
$ oc rsh <validation_pod>
-
更新
/usr/share/opa/policies/io/konveyor/forklift/<provider>/rules_version.rego
文件中的规则版本。 -
从
Validation
pod 终端注销。 验证更新的规则版本:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version
$ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version
1 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "result": { "rules_version": 6 } }
{ "result": { "rules_version": 6 } }
12.3. 检索库存服务 JSON
您可以通过向虚拟机发送一个 Inventory
服务查询来获取 Inventory
服务 JSON。输出中包含一个 "input"
键,其中包含由 Validation
服务规则查询的清单属性。
您可以根据 "input"
键中的任何属性(如 input.snapshot.kind
)创建验证规则。
流程
为项目检索路由:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route -n openshift-mtv
oc get route -n openshift-mtv
检索
Inventory
服务路由:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route <inventory_service> -n openshift-mtv
$ oc get route <inventory_service> -n openshift-mtv
检索访问令牌:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TOKEN=$(oc whoami -t)
$ TOKEN=$(oc whoami -t)
触发 HTTP GET 请求(例如,使用 Curl):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers -k
检索供应商的
UUID
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider> -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider> -k
1 检索供应商的虚拟机:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/vms -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/vms -k
检索虚拟机的详情:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/workloads/<vm> -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/workloads/<vm> -k
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "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 } } } }
{ "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 容器使用您选择的 ServiceAccount
在 openshift-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

Process:
输入您的 Ansible hook 和凭证。
使用 UI 或 CLI 将 Ansible hook 镜像输入到 MTV 控制器。
-
在 UI 中,指定
ansible-runner
并输入包含 hook 的playbook.yml
。 - 在 CLI 中,输入 hook 镜像,该镜像指定运行 hook 的 playbook。
-
在 UI 中,指定
如果您需要额外数据在 pod 中运行 playbook (如 SSH 数据),请创建一个包含虚拟机凭证的 Secret。Secret 不挂载到 pod,而是由 playbook 调用。
注意此 Secret 与包含源供应商凭证的
Secret
CR 不同。
MTV 控制器创建
ConfigMap
,其中包含:-
workload.yml
,其中包含有关虚拟机的信息。 -
playbook.yml
,这是您要执行的原始字符串 playbook。 plan.yml
,即Plan
CR。ConfigMap
包含虚拟机的名称,并指示 playbook 执行的操作。
-
MTV 控制器会创建一个启动用户指定镜像的作业。
将
ConfigMap
挂载到容器。Ansible hook 导入之前输入的用户的 Secret。
该作业运行迁移前 hook 或迁移后 hook,如下所示:
- 对于 pre-migration hook,作业会使用 SSH 登录到源供应商上的虚拟机,并运行 hook。
- 对于迁移后 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 上运行的虚拟机:启用远程执行
其他资源
有关创建服务帐户的说明,请参阅 了解并创建服务帐户。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration > Plans for virtualization,然后点击您要将 hook 添加到的迁移计划。
- 点 Hook。
对于 pre-migration hook,请执行以下步骤:
- 在 Pre migration hook 部分中,将 Enable hook 开关切换为 Enable pre migration hook。
-
输入 Hook 运行程序镜像。如果要指定
spec.playbook
,则需要使用具有ansible-runner
的镜像。 - 将 hook 粘贴到 Ansible playbook 文本框中的 YAML 文件。
对于迁移后 hook,请执行以下步骤:
- 在 Post migration hook 中,切换 Enable hook 开关 启用后迁移 hook。
-
输入 Hook 运行程序镜像。如果要指定
spec.playbook
,则需要使用具有ansible-runner
的镜像。 - 将 hook 粘贴到 Ansible playbook 文本框中的 YAML 文件。
- 在选项卡的顶部,单击 Update hook。
在终端中,输入以下命令将每个 hook 与 Red Hat OpenShift 服务帐户关联:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc -n openshift-mtv patch hook <name_of_hook> \ -p '{"spec":{"serviceAccount":"<service_account>"}}' --type merge
$ oc -n openshift-mtv patch hook <name_of_hook> \ -p '{"spec":{"serviceAccount":"<service_account>"}}' --type merge
以下迁移 hook 示例确保可以使用 SSH 访问虚拟机,创建 SSH 密钥并运行 2 个任务:停止 Maria 数据库并生成文本文件。
迁移 hook 示例
- 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
- 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 上运行的虚拟机:启用远程执行
其他资源
有关创建服务帐户的说明,请参阅 了解并创建服务帐户。
流程
如果需要,为虚拟机创建一个具有 SSH 私钥的 Secret。
- 选择现有密钥或生成密钥对。
- 在虚拟机上安装公钥。
将 Secret 中的私钥编码为 base64。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 data: key: VGhpcyB3YXMgZ2Vu... kind: Secret metadata: name: ssh-credentials namespace: openshift-mtv type: Opaque
apiVersion: v1 data: key: VGhpcyB3YXMgZ2Vu... kind: Secret metadata: name: ssh-credentials namespace: openshift-mtv type: Opaque
通过串联一个文件并以 Base64 编码方式对 playbook 进行编码,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat playbook.yml | base64 -w0
$ cat playbook.yml | base64 -w0
创建 Hook CR:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> playbook: | LS0tCi0gbm... EOF
$ 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
注意您可以使用默认
hook-runner
镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。注意要解码附加的 playbook,请使用自定义输出检索资源,并将其传送到 base64。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get -n konveyor-forklift hook playbook -o \ go-template='{{ .spec.playbook }}' | base64 -d
$ oc get -n konveyor-forklift hook playbook -o \ go-template='{{ .spec.playbook }}' | base64 -d
在迁移的
Plan
CR 中,对于每个虚拟机,请在 CR 的末尾添加以下部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow vms: - id: <vm_id> hooks: - hook: namespace: <namespace> name: <name_of_hook> step: <type_of_hook>
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 示例
- 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
- 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。
流程
- 在 Red Hat OpenShift web 控制台中,点 Operators → Installed Operators → Migration Toolkit for Virtualization Operator → Subscription。
将更新频道更改为正确的发行版本。
请参阅 Red Hat OpenShift 文档中的更改更新频道。
确认 Upgrade status 从 Up to date 变为 Upgrade available。如果没有,重启
CatalogSource
pod:-
记录目录源,如
redhat-operators
。 在命令行中检索目录源 pod:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pod -n openshift-marketplace | grep <catalog_source>
$ oc get pod -n openshift-marketplace | grep <catalog_source>
删除 Pod:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete pod -n openshift-marketplace <catalog_source_pod>
$ oc delete pod -n openshift-marketplace <catalog_source_pod>
升级状态从Up to date 改为 Upgrade available。
如果您在 Subscriptions 选项卡上将 Update approval 设置为 Automatic,则升级会自动启动。
-
记录目录源,如
如果您在 Subscriptions 标签页中将 Update approval 设置为 Manual,请批准升级。
请参阅 Red Hat OpenShift 文档中的 手动批准待处理的升级。
-
如果您要从 MTV 2.2 升级并定义了 VMware 源供应商,请添加 VDDK
init
镜像来编辑 VMware 供应商。否则,更新会将任何 VMware 供应商的状态更改为Critical
。如需更多信息,请参阅 添加 VMSphere 源供应商。 -
如果您在 MTV 2.2 中的 Red Hat OpenShift 目的地供应商中映射到 NFS,请编辑 NFS 存储配置文件中的
AccessModes
和VolumeMode
参数。否则,升级会使 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
权限的用户身份登录。
流程
- 在 Red Hat OpenShift web 控制台中,点 Operators > Installed Operators。
点 Migration Toolkit for Virtualization Operator。
Operator Details 页面在 Details 标签页中打开。
- 点 ForkliftController 选项卡。
单击 Actions,再选择 Delete ForkLiftController。
这会打开确认窗口。
点击 Delete。
控制器已被删除。
打开 Details 选项卡。
此时会出现 Create ForkliftController 按钮,而不是您删除的控制器。不需要点它。
在页面右上角,点 Actions 并选择 Uninstall Operator。
此时会打开确认窗口,显示任何操作对象实例。
要删除所有实例,请选中 Delete all operand instance for this operator 复选框。默认情况下清除复选框。
重要如果 Operator 配置了非集群资源,则这些应用程序将继续运行,需要手动清理。
点 Uninstall。
Installed Operators 页面将打开,并且 Migration Toolkit for Virtualization Operator 已从已安装的 Operator 列表中删除。
- 点 Home > Overview。
在页面的 Status 部分中,单击 Dynamic Plugins。
Dynamic Plugins 弹出将打开,将 forklift-console-plugin 列为失败的插件。如果 forklift-console-plugin 没有显示为失败的插件,请刷新 web 控制台。
单击 forklift-console-plugin。
ConsolePlugin 详情页面 会在 Details 选项卡中打开。
在页面的右上角,点 Actions,然后从列表中选择 Delete ConsolePlugin。
这会打开确认窗口。
点击 Delete。
该插件已从 Overview 页面上的 动态插件 列表中移除。如果插件仍然存在,重启 Overview 页面。
14.2. 从命令行卸载 MTV
您可以从命令行卸载 Migration Toolkit for Virtualization (MTV)。
此操作不会删除 MTV Operator 管理的资源,包括自定义资源定义(CRD)和自定义资源(CR)。要在卸载 MTV Operator 后删除它们,您可能需要手动删除 MTV Operator CRD。
先决条件
-
您必须以具有
cluster-admin
权限的用户身份登录。
流程
运行以下命令来删除
forklift
控制器:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete ForkliftController --all -n openshift-mtv
$ oc delete ForkliftController --all -n openshift-mtv
运行以下命令来删除 MTV Operator 的订阅:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get subscription -o name|grep 'mtv-operator'| xargs oc delete
$ oc get subscription -o name|grep 'mtv-operator'| xargs oc delete
运行以下命令,删除 MTV Operator 的
clusterserviceversion
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get clusterserviceversion -o name|grep 'mtv-operator'| xargs oc delete
$ oc get clusterserviceversion -o name|grep 'mtv-operator'| xargs oc delete
运行以下命令来删除插件控制台 CR:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete ConsolePlugin forklift-console-plugin
$ oc delete ConsolePlugin forklift-console-plugin
可选:运行以下命令来删除自定义资源定义(CRD):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get crd -o name | grep 'forklift.konveyor.io' | xargs oc delete
oc get crd -o name | grep 'forklift.konveyor.io' | xargs oc delete
可选:通过运行以下命令删除 MTV 项目来执行清理:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete project openshift-mtv
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
:
esxcli network ip interface tag add -t vSphereBackupNFC -i vmk2
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 缓冲仅适用于冷迁移用例。
- 在初始化 Warm Migration 前禁用 AIO 设置。如需了解更多详细信息,请参阅禁用 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
。
-
迁移时间缩短为 31.1%,从
- 在单一虚拟机上使用 AIO 缓冲设置时,无法显著改进。
- 当使用来自多个主机的多个虚拟机的 AIO 缓冲设置时,无法显著改进。
15.14.2. 启用 AIO 缓冲配置
验证 AIO 值的 Controller Pod 支持
确保
openshift-mtv
命名空间中的forklift-controller
pod 支持 AIO 缓冲值。由于 pod 名称前缀是动态的,因此运行以下命令首先检查 pod 名称:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n openshift-mtv | grep forklift-controller | awk '{print $1}'
oc get pods -n openshift-mtv | grep forklift-controller | awk '{print $1}'
输出示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow forklift-controller-667f57c8f8-qllnx
forklift-controller-667f57c8f8-qllnx
注意这是示例中的 pod 名称前缀:
forklift-controller-667f57c8f8-qllnx
运行以下命令,检查 pod 的环境变量:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pod forklift-controller-667f57c8f8-qllnx -n openshift-mtv -o yaml
oc get pod forklift-controller-667f57c8f8-qllnx -n openshift-mtv -o yaml
检查输出中的以下行:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... \- name: VIRT\_V2V\_EXTRA\_ARGS \- name: VIRT\_V2V\_EXTRA\_CONF\_CONFIG\_MAP ...
... \- name: VIRT\_V2V\_EXTRA\_ARGS \- name: VIRT\_V2V\_EXTRA\_CONF\_CONFIG\_MAP ...
编辑 ForkliftController 配置
在
openshift-mtv 命名空间中
,运行以下命令来编辑ForkliftController
对象使其包含 AIO 缓冲值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit forkliftcontroller -n openshift-mtv
oc edit forkliftcontroller -n openshift-mtv
在 spec 部分添加以下内容:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow virt_v2v_extra_args: "--vddk-config /mnt/extra-v2v-conf/input.conf" virt_v2v_extra_conf_config_map: "perf"
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 Copied! Toggle word wrap Toggle overflow oc -n openshift-mtv create cm perf
oc -n openshift-mtv create cm perf
准备 ConfigMap 内容
将所需的缓冲区配置值转换为 Base64。例如,对于 16/4:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow echo -e "VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nvixDiskLib.nfcAio.Session.BufCount=4" | base64
echo -e "VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nvixDiskLib.nfcAio.Session.BufCount=4" | base64
输出结果类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=
Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=
编辑 ConfigMap
使用
binaryData
部分下的 Base64 字符串更新 perf ConfigMap,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: ConfigMap binaryData: input.conf: Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo= metadata: name: perf namespace: openshift-mtv
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 Copied! Toggle word wrap Toggle overflow exec: /usr/bin/virt-v2v … --vddk-config /mnt/extra-v2v-conf/input.conf
exec: /usr/bin/virt-v2v … --vddk-config /mnt/extra-v2v-conf/input.conf
日志摘录示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 Copied! Toggle word wrap Toggle overflow cat /mnt/extra-v2v-conf/input.conf
cat /mnt/extra-v2v-conf/input.conf
输出示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VixDiskLib.nfcAio.Session.BufSizeIn64KB=16 vixDiskLib.nfcAio.Session.BufCount=4
VixDiskLib.nfcAio.Session.BufSizeIn64KB=16 vixDiskLib.nfcAio.Session.BufCount=4
启用调试(可选)
要启用调试日志,请将配置转换为 Base64,包括高级别:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow echo -e "`VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nVixDiskLib.nfcAio.Session.BufCount=4\nVixDiskLib.nfc.LogLevel=4`" | base64
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 Copied! Toggle word wrap Toggle overflow oc edit forkliftcontroller -n openshift-mtv
oc edit forkliftcontroller -n openshift-mtv
删除以下行:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow virt_v2v_extra_args: "`–vddk-config /mnt/extra-v2v-conf/input.conf`" virt_v2v_extra_conf_config_map: "`perf`"
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 Copied! Toggle word wrap Toggle overflow oc delete cm perf -n openshift-mtv
oc delete cm perf -n openshift-mtv
- 重启 Forklift Controller Pod (可选)。
如果需要,通过重启 forklift-controller pod 来确保更改生效。
15.14.4. AIO 缓冲(异步缓冲数)支持的关键要求
VDDK 和 vSphere 版本
支持基于使用以下版本执行的测试:
- vSphere : 7.0.3
- VDDK : 7.0.3
- 对于其他 VDDK 和 vSphere 版本,请查看 官方 VMware 文档中的 AIO 缓冲支持。
第 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 信息
-
进入存储
must-gather
数据的目录。 运行
oc adm must-gather
命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4
数据被保存为
/must-gather/must-gather.tar.gz
。您可以将此文件上传到红帽客户门户网站中的支持问题单中。可选:使用以下选项运行
oc adm must-gather
命令来收集过滤的数据:命名空间:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4 \ -- NS=<namespace> /usr/bin/targeted
$ 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 Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4 \ -- PLAN=<migration_plan> /usr/bin/targeted
$ 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 Copied! Toggle word wrap Toggle overflow 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
$ 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 Controller
和Containerized Data Import(CDI)Controller
服务处理大多数技术操作。
16.3.2. 高级别迁移工作流
高级别工作流显示用户视图的迁移过程:
- 您可以创建一个源供应商、目标供应商、网络映射和存储映射。
您可以创建一个包含以下资源的
Plan
自定义资源(CR):- 源供应商
- 目标供应商,如果目标集群上没有安装 MTV
- 网络映射
- 存储映射
- 一个或多个虚拟机 (VM)
您可以通过创建一个引用
Plan
CR 的Migration
CR 来运行迁移计划。如果出于某种原因无法迁移所有虚拟机,则可以为同一
Plan
CR 创建多个Migration
CR,直到虚拟机迁移为止。-
对于
Plan
CR 中的每个虚拟机,Migration Controller
服务会在Migration
CR 中记录虚拟机迁移进度。 当
Plan
CR 中每个虚拟机的数据传输完成后,Migration Controller
服务会创建一个VirtualMachine
CR。当迁移所有虚拟机时,
Migration Controller
服务会将Plan
CR 的状态更新为Completed
。每个源虚拟机的电源状态在迁移后会被维护。
16.3.3. 详细的迁移工作流
您可以使用详细的迁移工作流来排除迁移失败的问题。
工作流描述了以下步骤:
温迁移或迁移到远程 OpenShift 集群:
当您创建
Migration
自定义资源(CR)来运行迁移计划时,Migration Controller
服务会为每个源虚拟机磁盘创建一个DataVolume
CR。对于每个 VM 磁盘:
-
Containerized Data Importer(CDI)
控制器服务根据DataVolume
CR 中指定的参数创建一个持久性卷声明 (PVC)。 -
如果
StorageClass
有动态置备程序,则StorageClass
置备程序会动态置备持久性卷(PV)。 -
CDI Controller
服务创建一个importer
pod。 importer
pod 将虚拟机磁盘流传输到 PV。虚拟机磁盘传输后:
Migration Controller
服务在从 VMWare 导入时创建一个转换
pod,并附加 PVC。conversion
pod 运行virt-v2v
,它会在目标虚拟机的 PVC 中安装和配置设备驱动程序。-
Migration Controller
服务为每个源虚拟机(VM)创建一个VirtualMachine
CR,连接到 PVC。 如果虚拟机在源环境中运行,则虚拟机上的
Migration Controller
电源,KubeVirt Controller
服务会创建一个virt-launcher
pod 和VirtualMachineInstance
CR。virt-launcher
pod 运行QEMU-KVM
,并附加了作为 VM 磁盘的 PVC。
从 RHV 或 OpenStack 冷迁移到本地 OpenShift 集群:
当您创建
Migration
自定义资源(CR)来运行迁移计划时,Migration Controller
服务为每个源虚拟机磁盘创建一个PersistentVolumeClaim
CR,当源是 RHV 时,一个OvirtVolumePopulator
,或源是 OpenStack 时的OpenstackVolumePopulator
CR。对于每个 VM 磁盘:
-
Populator Controller
服务创建一个临时的持久性卷声明(PVC)。 如果
StorageClass
有动态置备程序,则StorageClass
置备程序会动态置备持久性卷(PV)。-
Migration Controller
服务创建一个 dummy pod 来绑定 所有 PVC。pod 的名称包含pvcinit
。
-
-
Populator Controller
服务创建一个填充器
pod。 填充器
pod 将磁盘数据传输到 PV。虚拟机磁盘传输后:
- 临时 PVC 被删除,初始 PVC 指向带有数据的 PV。
-
Migration Controller
服务为每个源虚拟机(VM)创建一个VirtualMachine
CR,连接到 PVC。 如果虚拟机在源环境中运行,则虚拟机上的
Migration Controller
电源,KubeVirt Controller
服务会创建一个virt-launcher
pod 和VirtualMachineInstance
CR。virt-launcher
pod 运行QEMU-KVM
,并附加了作为 VM 磁盘的 PVC。
从 VMWare 冷迁移到本地 OpenShift 集群:
当您创建
Migration
自定义资源(CR)来运行迁移计划时,Migration Controller
服务会为每个源虚拟机磁盘创建一个DataVolume
CR。对于每个 VM 磁盘:
-
Containerized Data Importer (CDI)
控制器服务会根据DataVolume
CR 中指定的参数创建一个空白的持久性卷声明(PVC)。 -
如果
StorageClass
有动态置备程序,则StorageClass
置备程序会动态置备持久性卷(PV)。
对于所有虚拟机磁盘:
-
Migration Controller
服务创建一个 dummy pod 来绑定 所有 PVC。pod 的名称包含pvcinit
。 -
Migration Controller
服务为所有 PVC 创建一个转换
pod。 conversion
pod 运行virt-v2v
,它将虚拟机转换为 KVM hypervisor,并将磁盘的数据传送到对应的 PV。虚拟机磁盘传输后:
-
Migration Controller
服务为每个源虚拟机(VM)创建一个VirtualMachine
CR,连接到 PVC。 如果虚拟机在源环境中运行,则虚拟机上的
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-4mx85
或plan2j-vm-3696-prehook-mwqnl
。注意must-gather
归档文件中不包含空的或排除的日志文件。
-
VMware 迁移计划的 must-gather 归档结构示例
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
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)的日志和信息。
流程
- 在 Red Hat OpenShift web 控制台中,点 Migration → Plans for virtualization。
- 点迁移计划名称旁的 Get logs。
在 Get logs 窗口中点 Get logs。
日志会被收集。此时会显示
Log collection complete
信息。- 点 Download logs 下载存档文件。
- 要下载迁移的虚拟机的日志,请点迁移计划名称,然后点 VM 的 Get logs。
16.4.3. 从命令行访问日志和自定义资源信息
您可以使用 must-gather
工具从命令行访问自定义资源(CR)的日志和信息。您必须将 must-gather
数据文件附加到所有客户问题单。
您可以使用过滤选项收集特定命名空间、完成、失败或取消迁移的虚拟机(VM)的数据。
如果您在过滤的 must-gather
命令中指定不存在的资源,则不会创建存档文件。
先决条件
-
您必须以具有
cluster-admin
角色的用户身份登录到 OpenShift Virtualization 集群。 -
已安装 Red Hat OpenShift CLI (
oc
)。
流程
-
进入要存储
must-gather
数据的目录。 运行
oc adm must-gather
命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4
数据被保存为
/must-gather/must-gather.tar.gz
。您可以将此文件上传到红帽客户门户网站中的支持问题单中。可选:使用以下选项运行
oc adm must-gather
命令来收集过滤的数据:命名空间:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4 \ -- NS=<namespace> /usr/bin/targeted
$ 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 Copied! Toggle word wrap Toggle overflow oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.8.4 \ -- PLAN=<migration_plan> /usr/bin/targeted
$ 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 Copied! Toggle word wrap Toggle overflow 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
$ 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。
测试问题单描述 | MTV | VDDK | max_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%)。
测试问题单描述 | MTV | VDDK | Max_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 来查找要迁移的最快网络。
结果显示,当所有接口和网络速度都相同时,使用管理不会造成降级。
测试问题单描述 | MTV | VDDK | max_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]
专用网络指的是非管理网络
|