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)不支持迁移休眠虚拟机。
如果出现电源中断,则禁用休眠的虚拟机可能会丢失数据。但是,如果没有禁用休眠功能,迁移将失败。
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 必须能够访问它。
流程
创建并导航到临时目录:
$ 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 归档:
$ tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
创建
Dockerfile
:$ 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 镜像:
$ podman build . -t <registry_route_or_server_path>/vddk:<tag>
将 VDDK 镜像推送到 registry:
$ 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
:... <nfcsvc> <path>libnfcsvc.so</path> <enabled>true</enabled> <maxMemory>1000000000</maxMemory> <maxStreamMemory>10485760</maxStreamMemory> </nfcsvc> ...
重启
hostd
:# /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: