安装并使用 Migration Toolkit for Virtualization
从 VMware vSphere 或 Red Hat Virtualization 迁移到 Red Hat OpenShift Virtualization
Red Hat Modernization and Migration Documentation Team
ccs-mms-docs@redhat.com
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
第 1 章 关于 Migration Toolkit for Virtualization
您可以使用 Migration Toolkit for Virtualization(MTV) 将虚拟机从 VMware vSphere 或 Red Hat Virtualization 迁移到 OpenShift Virtualization。
其他资源
1.1. 关于冷迁移和温迁移
MTV 支持从 Red Hat Virtualization (RHV) 进行的冷迁移,以及从 VMware vSphere 和 RHV 进行的温迁移。
1.1.1. 冷迁移
冷迁移是默认的迁移类型。源虚拟机会在复制数据期间被关闭。
1.1.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.1. 软件要求
您必须安装 兼容版本的 OpenShift Container Platform 和 OpenShift Virtualization。
2.2. 存储支持和默认模式
MTV 对支持的存储使用以下默认卷和访问模式。
如果 OpenShift Virtualization 存储不支持 动态置备,您必须应用以下设置:
文件系统
卷模式文件系统
卷模式比Block
卷模式慢。ReadWriteOnce
访问模式ReadWriteOnce
访问模式不支持实时迁移。
有关编辑存储配置集的详情,请参阅启用静态置备的存储类。
如果您的迁移使用块存储和持久性卷,使用 EXT4 文件系统创建的持久性卷,请将 CDI 中的文件系统开销增加到大于 10%。CDI 假设的默认开销不会完全包括 root 分区保留的位置。如果您没有增加 CDI 中的文件系统开销,您的迁移可能会失败。
表 2.1. 默认卷和访问模式
Provisioner | 卷模式 | 访问模式 |
---|---|---|
kubernetes.io/aws-ebs | Block | ReadWriteOnce |
kubernetes.io/azure-disk | Block | ReadWriteOnce |
kubernetes.io/azure-file | Filesystem | ReadWriteMany |
kubernetes.io/cinder | Block | ReadWriteOnce |
kubernetes.io/gce-pd | Block | ReadWriteOnce |
kubernetes.io/hostpath-provisioner | Filesystem | ReadWriteOnce |
manila.csi.openstack.org | Filesystem | ReadWriteMany |
openshift-storage.cephfs.csi.ceph.com | Filesystem | ReadWriteMany |
openshift-storage.rbd.csi.ceph.com | Block | ReadWriteOnce |
kubernetes.io/rbd | Block | ReadWriteOnce |
kubernetes.io/vsphere-volume | Block | ReadWriteOnce |
2.3. 网络先决条件
以下先决条件适用于所有迁移:
- 在迁移之前或期间不得更改 IP 地址、VLAN 和其他网络配置设置。在迁移过程中保留虚拟机的 MAC 地址。
- 源环境、OpenShift Virtualization 集群和复制存储库之间的网络连接必须可靠且不会中断。
- 如果要映射多个源和目的地网络,您必须为每个额外目标网络创建一个网络附加定义。
2.3.1. 端口
防火墙必须启用以下端口的流量:
表 2.2. 从 VMware vSphere 迁移所需的网络端口
端口 | 协议 | 源 | 目的地 | 用途 |
---|---|---|---|---|
443 | TCP | OpenShift 节点 | VMware vCenter | VMware 供应商清单 磁盘传输身份验证 |
443 | TCP | OpenShift 节点 | VMware ESXi 主机 | 磁盘传输身份验证 |
902 | TCP | OpenShift 节点 | VMware ESXi 主机 | 磁盘传输数据复制 |
表 2.3. 从 Red Hat Virtualization 迁移所需的网络端口
端口 | 协议 | 源 | 目的地 | 用途 |
---|---|---|---|---|
443 | TCP | OpenShift 节点 | RHV Engine | RHV 供应商清单 磁盘传输身份验证 |
443 | TCP | OpenShift 节点 | RHV 主机 | 磁盘传输身份验证 |
54322 | TCP | OpenShift 节点 | RHV 主机 | 磁盘传输数据复制 |
2.4. 源虚拟机先决条件
以下先决条件适用于所有迁移:
- 必须卸载 ISO/CDROM 磁盘。
- 每个 NIC 必须包含一个 IPv4 和/或一个 IPv6 地址。
-
虚拟机操作系统必须经过认证并支持作为 带有 OpenShift Virtualization 的客户机操作系统使用以及 使用
virt-v2v
转换为 KVM。 -
虚拟机名称只能包含小写字母 (
a-z
)、数字 (0-9
) 或连字符 (-
),最多 253 个字符。第一个和最后一个字符必须为字母数字。名称不得包含大写字母、空格、句点 (.
) 或特殊字符。 虚拟机名称不能与 OpenShift Virtualization 环境中的虚拟机的名称重复。
注意Migration Toolkit for Virtualization 会自动为不遵循规则的虚拟机分配新名称。
Migration Toolkit for Virtualization 在自动生成新虚拟机名称时进行以下更改:
- 排除的字符被删除。
- 大写字母切换到小写字母。
-
所有下划线 (
_
) 都被更改为短划线 (-
)。
此功能允许迁移平稳进行,即使某人输入了不符合规则的虚拟机名称。
2.5. Red Hat Virtualization 的先决条件
以下先决条件适用于 Red Hat Virtualization 迁移:
- 您必须使用兼容版本的 Red Hat Virtualization。
您必须具有 Manager 的 CA 证书。
您可以在浏览器中进入到
https://<engine_host>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA
获取 CA 证书。如果 Manager Apache CA 证书被第三方 CA 证书替代,则必须同时具有 Manager Apache CA 证书和管理器 CA 证书。
2.6. VMware 的先决条件
以下先决条件适用于 VMware 迁移:
- 您必须使用兼容版本的 VMware vSphere 。
- 您必须以至少最小组的 VMware 权限的用户身份登录。
- 您必须在所有源虚拟机 (VM) 上安装 VMware Tools。
- 如果您正运行 warm 迁移,则必须在虚拟机和 VM 磁盘中启用 已更改的块跟踪 (CBT)。
- 您必须创建一个 VMware Virtual Disk Development Kit (VDDK) 镜像。
- 您必须获取 vCenter 主机的 SHA-1 指纹。
- 如果您要从同一迁移计划中的 ESXi 主机迁移超过 10 个虚拟机,您必须增加主机的 NFC 服务内存。
- 强烈建议您禁用休眠,因为 Migration Toolkit for Virtualization (MTV)不支持迁移休眠的虚拟机。
如果出现电源中断,则禁用休眠的虚拟机可能会丢失数据。但是,如果没有禁用休眠,迁移将失败
MTV 和 OpenShift Virtualization 支持转换 Btrfs 从 VMWare 迁移虚拟机。
VMware 权限
要使用 Migration Toolkit for Virtualization (MTV) 将虚拟机迁移到 OpenShift Virtualization 需要以下最小 VMware 权限集合。
表 2.4. VMware 权限
特权 | 描述 |
---|---|
| |
| 允许关闭一个已启动的虚拟机。此操作关闭客户端操作系统。 |
| 允许打开已关闭的虚拟机并恢复暂停的虚拟机。 |
注意
需要所有 | |
| 允许在虚拟机上打开磁盘以实现随机读写访问。主要用于远程磁盘挂载。 |
| 允许操作与虚拟机相关的文件,包括 VMX、磁盘、日志和 NVRAM。 |
| 允许在虚拟机上打开一个磁盘以实现随机读取访问。主要用于远程磁盘挂载。 |
| 允许对与虚拟机关联的文件读取操作,包括 VMX、磁盘、日志和 NVRAM。 |
| 允许对与虚拟机关联的文件写操作,包括 VMX、磁盘、日志和 NVRAM。 |
| 允许克隆模板。 |
| 允许克隆现有虚拟机并分配资源。 |
| 允许从虚拟机创建新模板。 |
| 允许自定义虚拟机的客户机操作系统,而无需移动虚拟机。 |
| 允许从模板部署虚拟机。 |
| 允许将现有的关机虚拟机标记为模板。 |
| 允许将现有模板标记为虚拟机。 |
| 允许创建、修改或删除自定义规格。 |
| 允许对虚拟机磁盘提升操作。 |
| 允许读取自定义规格。 |
| |
| 允许从虚拟机当前状态创建快照。 |
| 允许从快照历史记录中移除快照。 |
2.6.1. 创建 VDDK 镜像
Migration Toolkit for Virtualization(MTV) 使用 VMware Virtual Disk Development Kit(VDDK) SDK 从 VMware vSphere 传输虚拟磁盘。
您必须下载 VMware Virtual Disk Development Kit (VDDK),构建 VDDK 镜像,并将 VDDK 镜像推送到您的镜像 registry。您需要 VDDK init 镜像路径来添加 VMware 源供应商。
在公共 registry 中存储 VDDK 镜像可能会违反 VMware 许可证条款。
先决条件
- OpenShift Container Platform 镜像 registry。
-
已安装
podman
。 - 如果使用外部 registry,OpenShift Virtualization 必须能够访问它。
流程
创建并导航到临时目录:
$ mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
- 在浏览器中,进入 VMware VDDK 版本 7 下载页面。
- 选择版本 7.0.3.2 并点 Download。
- 将 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 环境访问。
2.6.2. 获取 vCenter 主机的 SHA-1 指纹
您必须获取 vCenter 主机的 SHA-1 指纹,才能创建 Secret
CR。
流程
运行以下命令:
$ openssl s_client \ -connect <vcenter_host>:443 \ 1 < /dev/null 2>/dev/null \ | openssl x509 -fingerprint -noout -in /dev/stdin \ | cut -d '=' -f 2
- 1
- 指定 vCenter 主机的 IP 地址或 FQDN。
输出示例
01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF:01:23:45:67
2.6.3. 增加 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
您不需要重启主机。
2.7. 软件兼容性指南
您必须安装兼容软件版本。
表 2.5. 兼容软件版本
Migration Toolkit for Virtualization | OpenShift Container Platform | OpenShift Virtualization | VMware vSphere | Red Hat Virtualization |
---|---|---|---|---|
2.3.3 | 4.10 或更高版本 | 4.10 或更高版本 | 6.5 或更高版本 | 4.4.9 或更高版本 |
第 3 章 安装 MTV Operator
您可以使用 OpenShift Container Platform Web 控制台或命令行界面 (CLI) 安装 MTV Operator。
3.1. 使用 OpenShift Container Platform Web 控制台安装 MTV Operator
您可以使用 OpenShift Container Platform Web 控制台安装 MTV Operator。
先决条件
- 已安装 OpenShift Container Platform 4.10 或更高版本。
- 在 OpenShift 迁移目标集群上安装的 OpenShift Virtualization Operator。
-
您必须以具有
cluster-admin
权限的用户身份登录。
流程
- 在 OpenShift Container Platform Web 控制台中,点击 Operators → OperatorHub。
- 使用 Filter by keyword 字段搜索 mtv-operator。
- 点 Virtualization Operator 的 Migration Tookit,然后点 Install。
- 在 Install Operator 页面中,点 Install。
- 点 Operators → Installed Operators 来验证 Migration Tookit for Virtualization Operator 出现在 openshift-mtv 项目中,其状态为 Succeeded。
- 点 Virtualization Operator 的 Migration Tookit。
- 在 Provided APIs 下,找到 ForkliftController,再点 Create Instance。
- 点 Create。
- 点 Workloads → Pods 来验证 MTV pod 是否正在运行。
- 登陆到 OpenShift Container Platform Web 控制台。
- 点 Networking → Routes。
选择 Project: 列表中的
openshift-mtv
项目。此时会显示打开 MTV Web 控制台的登录页面的
forklift-ui
服务的 URL。点 URL 进入 MTV web 控制台。
3.2. 使用命令行界面安装 MTV Operator
您可以使用命令行界面 (CLI) 安装 MTV Operator。
先决条件
- 已安装 OpenShift Container Platform 4.10 或更高版本。
- 在 OpenShift 迁移目标集群上安装的 OpenShift Virtualization Operator。
-
您必须以具有
cluster-admin
权限的用户身份登录。
流程
创建 openshift-mtv 项目:
$ cat << EOF | oc apply -f - apiVersion: project.openshift.io/v1 kind: Project metadata: name: openshift-mtv EOF
创建名为
migration
的OperatorGroup
CR:$ 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:$ cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: mtv-operator namespace: openshift-mtv spec: channel: release-v2.3.0 installPlanApproval: Automatic name: mtv-operator source: redhat-operators sourceNamespace: openshift-marketplace startingCSV: "mtv-operator.2.3.0" EOF
创建一个
ForkliftController
CR:$ 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 是否正在运行:
$ oc get pods -n openshift-mtv
输出示例
NAME READY STATUS RESTARTS AGE forklift-controller-788bdb4c69-mw268 2/2 Running 0 2m forklift-operator-6bf45b8d8-qps9v 1/1 Running 0 5m forklift-ui-7cdf96d8f6-xnw5n 1/1 Running 0 2m
使用以下命令获取 Forklift Web 控制台 URL:
$ oc get route virt -n openshift-mtv \ -o custom-columns=:.spec.host
此时会显示打开 MTV Web 控制台的登录页面的
forklift-ui
服务的 URL。输出示例
https://virt-openshift-mtv.apps.cluster.openshift.com.
3.3. 获取 MTV Web 控制台 URL
您可以使用 OpenShift Container Platform Web 控制台或命令行随时获取 MTV Web 控制台 URL。
先决条件
- 安装了 OpenShift Virtualization Operator。
- 已安装 MTV Operator。
-
您必须以具有
cluster-admin
权限的用户身份登录。
流程
如果使用 OpenShift Container Platform Web 控制台,请按照以下步骤执行:
- 登陆到 OpenShift Container Platform Web 控制台。
- 点 Networking → Routes。
选择 Project: 列表中的
openshift-mtv
项目。此时会显示打开 MTV Web 控制台的登录页面的
forklift-ui
服务的 URL。点 URL 进入 MTV web 控制台。
如果您使用命令行,使用以下命令获取 MTV Web 控制台 URL:
$ oc get route virt -n openshift-mtv \ -o custom-columns=:.spec.host
此时会显示打开 MTV Web 控制台的登录页面的
forklift-ui
服务的 URL。输出示例
https://virt-openshift-mtv.apps.cluster.openshift.com.
现在,您可以启动浏览器并进入到 MTV web 控制台。
第 4 章 使用 MTV web 控制台迁移虚拟机
您可以使用 MTV web 控制台将虚拟机迁移到 OpenShift Virtualization。
您必须确保满足所有先决条件。
仅 VMware:您必须拥有最少的 VMware 权限集合。
仅 VMware:您必须创建一个 VMware Virtual Disk Development Kit(VDDK) 镜像。
4.1. 添加供应商
您可以使用 MTV web 控制台为虚拟机迁移添加源供应商和目的地供应商。
4.1.1. 添加源供应商
您可以使用 MTV web 控制台添加 Red Hat Virtualization 源供应商或 VMware 源供应商。
4.1.1.1. 添加 VMware 源供应商
您可以使用 MTV web 控制台添加 VMware 源供应商。
先决条件
- 在所有集群可以访问的安全 registry 中的 VMware Virtual Disk Development Kit (VDDK) 镜像。
流程
- 在 MTV web 控制台中,点 Providers。
- 点 Add provider。
- 从 Type 列表中选择 VMware。
填写以下字段:
- 名称 :要在供应商列表中显示的名称
- 主机名或 IP 地址 : vCenter 主机名或 IP 地址
-
用户名 : vCenter 用户,例如
user@vsphere.local
- 密码 : vCenter 用户密码
- VDDK init 镜像 : VDDKInitImage 路径
- 点 Verify certificate。
- 选择 I trust the authenticity of this certificate 复选框。
点 Add 添加并保存该提供程序。
源供应商会出现在提供程序列表中。
4.1.1.1.1. 为 VMware 源供应商选择迁移网络
您可以在 MTV web 控制台中选择源供应商的迁移网络,以降低源环境的风险并提高性能。
将默认网络用于迁移可能会导致性能降低,因为网络可能没有足够的带宽。这种情形可以对源平台产生负面影响,因为磁盘传输操作可能会使网络饱和。
先决条件
- 迁移网络必须具有足够的吞吐量,最小 10 Gbps 的速度用于磁盘传输。
OpenShift Virtualization 节点必须可通过默认网关访问迁移网络。
注意源虚拟磁盘由连接到目标命名空间的 pod 网络的 pod 复制。
- 迁移网络必须启用巨型帧。
流程
- 在 MTV web 控制台中点 Providers
- 点 VMware 标签页。
- 点供应商旁边的 Hosts 列中的主机编号,以查看主机列表。
- 选择一个或多个主机并点击 Select migration network。
选择 网络。
您可以选择默认网络来清除选择。
如果您的源供应商是 VMware,请完成以下字段:
-
ESXi host admin username: 指定 ESXi 主机 admin 用户,例如
root
。 - ESXi host admin password: 指定 ESXi 主机管理员密码。
-
ESXi host admin username: 指定 ESXi 主机 admin 用户,例如
如果您的源供应商是 Red Hat Virtualization,请完成以下字段:
- 用户名 :指定 Manager 用户。
- Password :指定 Manager 密码。
- 点 Save。
验证每个主机的状态是否为 Ready。
如果主机状态为 Ready,则在迁移网络上可能无法访问主机,或者凭证可能不正确。您可以修改主机配置并保存更改。
4.1.1.2. 添加 Red Hat Virtualization 源供应商
您可以使用 MTV web 控制台添加 Red Hat Virtualization 源供应商。
先决条件
- Manager 的 CA 证书。
- Manager 的 Apache CA 证书,如果 Manager Apache CA 证书被第三方 CA 证书替代。
流程
- 在 MTV web 控制台中,点 Providers。
- 点 Add provider。
- 从 Type 列表中选择 Red Hat Virtualization。
填写以下字段:
- 名称 :要在供应商列表中显示的名称
- 主机名或 IP 地址 :管理器主机名或 IP 地址
- 用户名 : Manager 用户
- 密码 : Manager 密码
- CA 证书 :管理器的 CA 证书。如果 Manager Apache CA 证书被第三方 CA 证书替代,则需要指定两个 CA 证书。
点 Add 添加并保存该提供程序。
源供应商会出现在提供程序列表中。
4.1.2. 添加目的地供应商
您可以使用 MTV web 控制台添加 OpenShift Virtualization 目的地供应商。
4.1.2.1. 添加 OpenShift Virtualization 目的地供应商
除了默认的 OpenShift Virtualization 目的地供应商,您还可以在 MTV web 控制台中添加 OpenShift Virtualization 目的地供应商,这是您安装 MTV 的供应商。
先决条件
-
您必须具有带有
cluster-admin
权限的 OpenShift Virtualization 服务帐户令牌。
流程
- 在 MTV web 控制台中,点 Providers。
- 点 Add provider。
- 从 Type 列表中选择 OpenShift Virtualization。
完成以下字段:
- Cluster name :指定要在目标供应商列表中显示的集群名称。
- URL :指定集群的 API 端点。
-
Service account token :指定
cluster-admin
服务帐户令牌。
- 点 Check connection 来验证凭证。
点击 Add。
供应商会出现在提供程序列表中。
4.1.2.2. 为 OpenShift Virtualization 供应商选择迁移网络
您可以在 MTV web 控制台中为 OpenShift Virtualization 供应商选择默认迁移网络,以提高性能。默认迁移网络用于将磁盘传输到其配置的命名空间。
如果您没有选择迁移网络,则默认迁移网络为 pod
网络,这可能不是磁盘传输的最佳选择。
您可以在创建迁移计划时选择不同的网络来覆盖供应商的默认迁移网络。
流程
- 在 MTV web 控制台中,点 Providers。
- 点 OpenShift Virtualization 选项卡。
- 选择供应商并点 Select migration network。
- 从可用网络列表中选择网络,然后点 Select。
- 点供应商旁边的网络栏中的网络号码,验证所选网络是否为默认迁移网络。
4.2. 创建网络映射
您可以使用 MTV Web 控制台将源网络映射到 OpenShift Virtualization 网络来创建一个或多个网络映射。
先决条件
- 添加到 web 控制台的源和目标供应商。
- 如果映射多个源和目标网络,则每个额外 OpenShift Virtualization 网络都需要其自身的 网络附加定义。
流程
- 点 Mappings。
- 点 Network 选项卡,然后点 Create mapping。
完成以下字段:
- 名称 :输入要在网络映射列表中显示的名称。
- Source provider :选择源供应商。
- 目标供应商 :选择一个目标供应商。
- 源网络 :选择源网络。
- 目标命名空间/网络 :选择一个目标网络。
- 可选:点击 Add 来创建额外网络映射,或将多个源网络映射到一个目标网络。
- 如果您创建额外网络映射,请选择网络附加定义作为目标网络。
点 Create。
网络映射显示在网络映射屏幕上。
4.3. 创建存储映射
您可以使用 MTV Web 控制台将源数据存储映射到 OpenShift Virtualization 存储类来创建存储映射。
先决条件
- 添加到 web 控制台的源和目标供应商。
- 支持虚拟机迁移的本地和共享的持久性存储。
流程
- 点 Mappings。
- 点 Storage 选项卡,然后点 Create mapping。
- 输入存储映射的 Name。
- 选择 Source provider 和 Target provider。
- 如果您的源供应商是 VMware,请选择 Source datastore 和 Target storage class。
- 如果您的源供应商是 Red Hat Virtualization,请选择 Source 存储域 和 目标存储类。
- 可选:点 Add 来创建额外的存储映射,或者将多个源数据存储或存储域映射到单个存储类。
点 Create。
映射显示在 Storage mappings 页面中。
4.4. 创建迁移计划
您可以使用 MTV web 控制台创建迁移计划。
迁移计划允许您将虚拟机分组在一起或具有相同迁移参数,例如,一个集群成员或完整应用程序的百分比。
您可以配置 hook 在迁移计划的指定阶段运行 Ansible playbook 或自定义容器镜像。
先决条件
- 如果目标集群上没有安装 MTV,您必须在 web 控制台的 Providers 页面中添加目标供应商。
流程
- 在 web 控制台中,点 Migration Plan,然后点 Create migration plan。
完成以下字段:
- 计划名称 :输入要在迁移计划列表中显示的迁移计划名称。
- 计划描述: 可选:计划的简单描述。
- Source provider :选择源供应商。
- 目标供应商 :选择一个目标供应商。
- 目标命名空间 : 您可以键入来搜索现有目标命名空间或创建新命名空间。
您可以击 Select a different network、从列表中选择网络并点 Select 来更改此计划的迁移转让网络。
如果您为 OpenShift Virtualization 供应商定义了迁移传输网络,并且网络位于目标命名空间中,则网络是所有迁移计划的默认网络。否则会使用
pod
网络。
- 点 Next。
- 选择选项来过滤源虚拟机列表,然后点 Next。
- 选择要迁移的虚拟机,然后点 Next。
选择现有网络映射或创建新网络映射。
要创建新网络映射:
- 为每个源网络选择一个目标网络。
- 可选: 选择 Save mapping to use again 并输入网络映射名称。
- 点 Next。
选择现有存储映射或创建新存储映射。
要创建新存储映射:
- 为每个 VMware 数据存储或 Red Hat Virtualization 存储域选择一个目标存储类。
- 可选: 选择 Save mapping to use again 并输入存储映射名称。
- 点 Next。
选择迁移类型并点 Next。
- 冷(cold)迁移:源虚拟机在复制数据时停止。
- 温(warm)迁移:源虚拟机在以递增方式复制时运行。之后,您将运行 cutover,这将停止虚拟机并复制剩余的虚拟机数据和元数据。
可选:您可以创建一个迁移 hook 在迁移前或之后运行 Ansible playbook:
- 点 Add hook。
- 选择 hook 将运行时的步骤。
选择 hook 定义:
- Ansible playbook :浏览 Ansible playbook 或将其粘贴到字段中。
自定义容器镜像:如果您不想使用默认的
hook-runner
镜像,请输入镜像路径: <registry_path>/<image_name>:<tag>
.注意registry 必须可以被 OpenShift Container Platform 集群访问。
- 点 Next。
检查您的迁移计划并点完成。
迁移计划保存在迁移计划列表中。
- 点击迁移计划 的 Options 菜单并选择 View details 来验证迁移计划详情。
4.5. 运行迁移计划
您可以运行迁移计划,并在 MTV web 控制台中查看其进度。
先决条件
- 有效的迁移计划。
流程
点 Migration Plan。
Migration Plan 列表显示源和目标供应商、正在迁移的虚拟机数量以及计划的状态。
点迁移计划旁边的 Start 来启用迁移。
仅限 warm 迁移:
- precopy 阶段会启动。
- 点 Cutover 完成迁移。
扩展迁移计划来查看迁移计划。
迁移详情屏幕会显示迁移启动和结束时间、复制数据的数量以及迁移的每个虚拟机的进度管道。
- 扩展虚拟机以查看迁移步骤、每个步骤所经过的时间及其状态。
4.6. 迁移计划选项
在 MTV web 控制台的 Migration Plan 页面中,点迁移计划 旁边的 Options 菜单来访问以下选项:
- 编辑 :编辑迁移计划的详情。您无法在迁移计划正在运行或成功完成后编辑迁移计划。
副本 :创建一个与现有计划相同的虚拟机 (VM)、参数、映射和 hook 的新迁移计划。您可以将此功能用于以下任务:
- 将虚拟机迁移到不同的命名空间。
- 编辑归档的迁移计划。
- 编辑具有不同状态的迁移计划,如 failed、canceled、running、critical 或 ready。
归档 :删除迁移计划的日志、历史记录和元数据。计划不能编辑或重启。只能查看它。
注意Archive 选项不可逆。但是,您可以复制归档的计划。
删除 :永久删除迁移计划。您不能删除正在运行的迁移计划。
注意Delete 选项不可逆。
删除迁移计划不会删除
importer
pod、conversion
pod、配置映射、secret、失败的虚拟机和数据卷等临时资源。(BZ#2018974) 您必须在删除迁移计划前归档迁移计划来清理临时资源。- 查看详情 :显示迁移计划的详细信息。
- 重启 :重启失败或取消的迁移计划。
- 取消调度的 cutover :取消计划的过渡计划。
4.7. 取消迁移
在使用 MTV web 控制台,当迁移计划正在进行时,您可以取消一些或所有虚拟机 (VM)。
流程
- 点 Migration Plans。
- 点正在运行的迁移计划的名称查看迁移详情。
- 选择一个或多个虚拟机,点 Cancel。
点 Yes, cancel 确认取消。
在 Migration details by VM 列表中,取消的虚拟机的状态为 Canceled。未迁移且迁移的虚拟机不受影响。
您可以通过点 Migration Plan 页的迁移计划旁的 Restart 重启迁移。
第 5 章 从命令行迁移虚拟机
您可以使用命令行将虚拟机迁移到 OpenShift Virtualization。
-
您必须以具有
cluster-admin
权限的用户身份登录。 - 仅 VMware:您必须拥有最少的 VMware 权限集合。
- 仅 VMware:您必须具有 vCenter SHA-1 指纹。
- 仅 VMware:您必须创建一个 VMware Virtual Disk Development Kit(VDDK) 镜像。
- 您必须确保满足所有先决条件。
5.1. 迁移虚拟机
您可以通过创建 MTV 自定义资源(CR)从命令行(CLI)迁移虚拟机。
您必须为集群范围的 CR 指定一个名称。
您必须为命名空间范围 CR 指定名称和命名空间。
先决条件
-
您必须以具有
cluster-admin
权限的用户身份登录。 - 仅 VMware:在所有集群可以访问的安全 registry 中必须有 VMware Virtual Disk Development Kit(VDDK)镜像。
流程
为源供应商凭证创建
Secret
清单:$ cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: openshift-mtv type: Opaque stringData: user: <user> 1 password: <password> 2 cacert: | 3 <engine_ca_certificate> thumbprint: <vcenter_fingerprint> 4 EOF
为源供应商创建
Provider
清单:$ 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 settings: vddkInitImage: <registry_route_or_server_path>/vddk:<tag> 3 secret: name: <secret> 4 namespace: openshift-mtv EOF
仅限 VMware:创建一个
Host
清单:$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Host metadata: name: <vmware_host> namespace: openshift-mtv spec: provider: namespace: openshift-mtv name: <source_provider> 1 id: <source_host_mor> 2 ipAddress: <source_network_ip> 3 EOF
创建
NetworkMap
清单来映射源和目标网络:$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: NetworkMap metadata: name: <network_map> namespace: openshift-mtv spec: map: - destination: name: <pod> namespace: openshift-mtv type: pod 1 source: 2 id: <source_network_id> 3 name: <source_network_name> - destination: name: <network_attachment_definition> 4 namespace: <network_attachment_definition_namespace> 5 type: multus source: id: <source_network_id> name: <source_network_name> provider: source: name: <source_provider> namespace: openshift-mtv destination: name: <destination_cluster> namespace: openshift-mtv EOF
创建
StorageMap
清单来映射源和目标存储:$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: StorageMap metadata: name: <storage_map> namespace: openshift-mtv spec: map: - destination: storageClass: <storage_class> accessMode: <access_mode> 1 source: id: <source_datastore> 2 - destination: storageClass: <storage_class> accessMode: <access_mode> source: id: <source_datastore> provider: source: name: <source_provider> namespace: openshift-mtv destination: name: <destination_cluster> namespace: openshift-mtv EOF
可选:在
Plan
CR 中指定的阶段创建一个Hook
清单以在虚拟机中运行自定义代码:$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: openshift-mtv spec: image: quay.io/konveyor/hook-runner 1 playbook: | 2 LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
为迁移创建
Plan
清单:$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> 1 namespace: openshift-mtv spec: warm: true 2 provider: source: name: <source_provider> namespace: openshift-mtv destination: name: <destination_cluster> namespace: openshift-mtv map: network: 3 name: <network_map> 4 namespace: openshift-mtv storage: name: <storage_map> 5 namespace: openshift-mtv targetNamespace: openshift-mtv vms: 6 - id: <source_vm> 7 - name: <source_vm> hooks: 8 - hook: namespace: openshift-mtv name: <hook> 9 step: <step> 10 EOF
- 1
- 指定
Plan
CR 的名称。 - 2
- 指定迁移是温迁移还是冷迁移。如果您指定了 warm 迁移,且没有为
Migration
清单中的cutover
参数指定一个值,则只有 precopy 阶段将运行。 - 3
- 您可以添加多个网络映射。
- 4
- 指定
NetworkMap
CR 的名称。 - 5
- 指定
StorageMap
CR 的名称。 - 6
- 您可以使用
id
或name
参数来指定源虚拟机。 - 7
- 指定 VMware VM MOR 或 RHV VM UUID。
- 8
- 可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
- 9
- 指定
Hook
CR 的名称。 - 10
- 在迁移完成后,允许的值为
PreHook
(migation 计划启动或PostHook
)。
创建运行
Plan
CR 的Migration
清单:$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> 1 namespace: openshift-mtv spec: plan: name: <plan> 2 namespace: openshift-mtv cutover: <cutover_time> 3 EOF
您可以将多个
Migration
CR 与一个Plan
CR 关联。如果迁移没有完成,您可以在不更改Plan
CR 的情况下创建新的Migration
CR,以迁移剩余的虚拟机。检索
Migration
CR 以监控迁移的进度:$ oc get migration/<migration> -n openshift-mtv -o yaml
5.2. 获取 vCenter 主机的 SHA-1 指纹
您必须获取 vCenter 主机的 SHA-1 指纹,才能创建 Secret
CR。
流程
运行以下命令:
$ openssl s_client \ -connect <vcenter_host>:443 \ 1 < /dev/null 2>/dev/null \ | openssl x509 -fingerprint -noout -in /dev/stdin \ | cut -d '=' -f 2
- 1
- 指定 vCenter 主机的 IP 地址或 FQDN。
输出示例
01:23:45:67:89:AB:CD:EF:01:23:45:67:89:AB:CD:EF:01:23:45:67
5.3. 取消迁移
在从命令行界面 (CLI) 进行迁移时,您可以取消整个迁移或单独的虚拟机。
取消整个迁移
删除
Migration
CR:$ oc delete migration <migration> -n openshift-mtv 1
- 1
- 指定
Migration
CR 的名称。
取消单个虚拟机的迁移
将独立虚拟机添加到
Migration
清单的spec.cancel
块中:$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> namespace: openshift-mtv ... 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 以监控剩余的虚拟机的进度:$ oc get migration/<migration> -n openshift-mtv -o yaml
第 6 章 高级迁移选项
6.1. 为 warm 迁移更改预复制间隔
您可以通过修补 ForkliftController
自定义资源(CR)来更改快照间隔。
流程
对
ForkliftController
CR 进行补丁:$ oc patch forkliftcontroller/<forklift-controller> -n openshift-mtv -p '{"spec": {"controller_precopy_interval": <60>}}' --type=merge 1
- 1
- 以分钟为单位指定 precopy 间隔。默认值为
60
。
您不需要重启
forklift-controller
pod。
6.2. 为 Validation 服务创建自定义规则
Validation
服务使用 Open Policy Agent(OPA)策略规则来检查要迁移的每个虚拟机(VM)的适用性。Validation
服务为每个虚拟机生成 问题 列表,它们作为虚拟机属性存储在 Provider Inventory
服务中。Web 控制台显示供应商清单中的每个虚拟机的顾虑。
您可以创建自定义规则来扩展 Validation
服务的默认规则集。例如,您可以创建一个规则来检查虚拟机是否有多个磁盘。
6.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 1 has_drs_enabled { input.host.cluster.drsEnabled 2 } concerns[flag] { has_drs_enabled flag := { "category": "Information", "label": "VM running in a DRS-enabled cluster", "assessment": "Distributed resource scheduling is not currently supported by OpenShift Virtualization. The VM can be migrated but it will not have this feature in the target environment." } }
6.2.2. 检查默认验证规则
在创建自定义规则前,您必须检查 Validation
服务的默认规则,以确保您不会创建重新定义现有默认值的规则。
示例:如果默认规则包含行 default valid_input = false
,并且您创建一个包含行 default valid_input = true
,则 Validation
服务将不会启动。
流程
连接到
Validation
pod 的终端:$ oc rsh <validation_pod>
进入您的供应商的 OPA 策略目录:
$ cd /usr/share/opa/policies/io/konveyor/forklift/<provider> 1
- 1
- 指定
vmware
或ovirt
。
搜索默认策略:
$ grep -R "default" *
6.2.3. 检索库存服务 JSON
您可以通过向虚拟机发送一个 Inventory
服务查询来获取 Inventory
服务 JSON。输出中包含一个 "input"
键,其中包含由 Validation
服务规则查询的清单属性。
您可以根据 "input"
键中的任何属性(如 input.snapshot.kind
)创建验证规则。
流程
为项目检索路由:
oc get route -n openshift-mtv
检索
Inventory
服务路由:$ oc get route <inventory_service> -n openshift-mtv
检索访问令牌:
$ TOKEN=$(oc whoami -t)
触发 HTTP GET 请求(例如,使用 Curl):
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers -k
检索供应商的
UUID
:$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider> -k 1
- 1
- 供应商允许的值有
vsphere
和ovirt
。
检索供应商的虚拟机:
$ 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>/workloads/<vm> -k
输出示例
{ "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 } } } }
6.2.4. 创建验证规则
您可以通过将包含规则的配置映射自定义资源(CR)应用到 Validation
服务来创建验证规则。
-
如果您创建与现有规则相同的规则,
Validation
服务将使用规则执行OR
操作。 -
如果您创建使用默认规则迭代的规则,则
Validation
服务将不会启动。
验证规则示例
验证规则基于由 Provider Inventory
服务收集的虚拟机(VM)属性。
例如,VMware API 使用此路径来检查 VMware 虚拟机是否配置了 NUMA 节点关联性:MOR:VirtualMachine.config.extraConfig["numa.nodeAffinity"]
。
Provider Inventory
服务使用列表值简化了此配置并返回一个可测试属性:
"numaNodeAffinity": [ "0", "1" ],
您可以根据此属性创建一个 Rego 查询,并将其添加到 forklift-validation-config
配置映射中:
`count(input.numaNodeAffinity) != 0`
流程
根据以下示例创建配置映射 CR:
$ 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:$ oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
通过将
forklift-controller
部署扩展到1
来启动Validation
pod:$ oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
检查
Validation
pod 日志,以验证 pod 是否已启动:$ oc logs -f <validation_pod>
如果自定义规则与默认规则冲突,则
Validation
pod 将不会启动。删除源供应商:
$ oc delete provider <provider> -n openshift-mtv
添加源供应商以应用新规则:
$ 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
服务检测到更改并验证虚拟机。
6.2.5. 更新清单规则版本
每次更新规则时,您必须更新 inventory 规则版本,以便 Provider Inventory
服务检测到更改并触发 Validation
服务。
规则版本记录在每个供应商的 rules_version.rego
文件中。
流程
检索当前的规则版本:
$ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version 1
输出示例
{ "result": { "rules_version": 5 } }
连接到
Validation
pod 的终端:$ oc rsh <validation_pod>
-
更新
/usr/share/opa/policies/io/konveyor/forklift/<provider>/rules_version.rego
文件中的规则版本。 -
从
Validation
pod 终端注销。 验证更新的规则版本:
$ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version 1
输出示例
{ "result": { "rules_version": 6 } }
第 7 章 升级 Migration Toolkit for Virtualization
您可以使用 OpenShift Container Platform Web 控制台安装新版本,以此升级 MTV Operator。
您必须在不跳过发行版本的情况下升级到下一个版本,例如从 2.0 升级到 2.1 或从 2.1 升级到 2.2。
流程
- 在 OCP web 控制台中,点 Operators → Installed Operators → Migration Tookit for Virtualization Operator → Subscription。
将更新频道更改为正确的发行版本。
请参阅 OpenShift Container Platform 文档中的更改更新频道。
确认 Upgrade status 从 Up to date 变为 Upgrade available。如果没有,重启
CatalogSource
pod:-
记录目录源,如
redhat-operators
。 在命令行中检索目录源 pod:
$ oc get pod -n openshift-marketplace | grep <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,请批准升级。
请参阅 OpenShift Container Platform 文档中的手动批准待处理的升级。
登录 web 控制台前,验证
forklift-ui
pod 是否处于Ready
状态:$ oc get pods -n openshift-mtv
输出示例
NAME READY STATUS RESTARTS AGE forklift-controller-788bdb4c69-mw268 2/2 Running 0 2m forklift-operator-6bf45b8d8-qps9v 1/1 Running 0 5m forklift-ui-7cdf96d8f6-xnw5n 1/1 Running 0 2m
-
如果您将 VMware 源供应商添加到 MTV 2.2,升级到 MTV 2.3 将任何 VMware 供应商的状态更改为 Critical。要解决这个问题,请添加 VDDK
init
镜像并验证 VMware 供应商的证书来编辑虚拟机。如需更多信息,请参阅添加 VMSphere 源供应商。 -
如果您在 MTV 2.2 中的 OpenShift Container Platform 目的地供应商中映射到 NFS,则升级到 MTV 2.3 会导致 NFS 映射无效。要解决这个问题,请编辑 NFS 存储配置集中的
AccessModes
和VolumeMode
参数。如需更多信息,请参阅自定义存储配置集。
第 8 章 卸载 Migration Toolkit for Virtualization
您可以使用 OpenShift Container Platform Web 控制台或命令行界面(CLI)卸载 Virtualization(MTV)。
8.1. 使用 OpenShift Container Platform Web 控制台卸载 MTV
您可以使用 OpenShift Container Platform Web 控制台删除 openshift-mtv
项目及自定义资源定义(CRD)来卸载 Virtualization(MTV)。
先决条件
-
您必须以具有
cluster-admin
权限的用户身份登录。
流程
- 点 Home → Projects。
- 找到 openshift-mtv 项目。
- 在项目右侧,从 Options 菜单 中选择 Delete Project。
- 在 Delete Project 窗格中,输入项目名称,再点 Delete。
- 点 Administration → CustomResourceDefinitions。
-
在 Search 字段中输入
forklift
在forklift.konveyor.io
组中查找 CRD。 - 在每个 CRD 右侧,从 Options 菜单 中选择 Delete CustomResourceDefinition。
8.2. 使用命令行界面卸载 MTV
您可以通过删除 openshift-mtv
项目和 forklift.konveyor.io
自定义资源定义(CRD)从命令行界面(CLI)卸载 Migration Toolkit for Virtualization(MTV)。
先决条件
-
您必须以具有
cluster-admin
权限的用户身份登录。
流程
删除项目:
$ oc delete project openshift-mtv
删除 CRD:
$ oc get crd -o name | grep 'forklift' | xargs oc delete
删除 OAuthClient:
$ oc delete oauthclient/forklift-ui
第 9 章 故障排除
本节提供有关对常见迁移问题进行故障排除的信息。
9.1. 错误信息
本节论述了错误消息以及如何解决它们。
已达到温导入重试的限制
如果在 precopy 阶段一个 VMware 虚拟机 (VM) 已达到最大的改变的块跟踪(CBT)快照的数量 (28),则会在温迁移中会显 warm import retry limit reached
错误消息。
要解决这个问题,请从虚拟机中删除一些 CBT 快照并重启迁移计划。
无法将磁盘镜像调整为所需的大小
迁移失败时会显示 Unable to resize disk image to required size
错误消息,因为目标供应商的虚拟机使用块存储上带有 EXT4 文件系统的持久性卷。出现这个问题的原因是 CDI 假设的默认开销没有完全包括根分区的保留位置。
要解决这个问题,将 CDI 中的文件系统开销增加到大于 10%。
9.2. 使用 must-gather 工具
您可以使用 must-gather
工具来收集 MTV 自定义资源 (CR) 的日志和信息。您必须将 must-gather
数据文件附加到所有客户问题单。
您可以使用过滤选项为特定命名空间、迁移计划或虚拟机 (VM) 收集数据。
如果您在过滤的 must-gather
命令中指定不存在的资源,则不会创建存档文件。
先决条件
-
您必须以具有
cluster-admin
角色的用户身份登录到 OpenShift Virtualization 集群。 -
已安装 OpenShift Container Platform CLI (
oc
)。
收集日志和 CR 信息
-
进入存储
must-gather
数据的目录。 运行
oc adm must-gather
命令:$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.3.0
数据被保存为
/must-gather/must-gather.tar.gz
。您可以将此文件上传到红帽客户门户网站中的支持问题单中。可选:使用以下选项运行
oc adm must-gather
命令来收集过滤的数据:命名空间:
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.3.0 \ -- NS=<namespace> /usr/bin/targeted
迁移计划:
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.3.0 \ -- PLAN=<migration_plan> /usr/bin/targeted
虚拟机:
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.3.0 \ -- VM=<vm_id> NS=<namespace> /usr/bin/targeted 1
9.3. 架构
本节论述了 MTV 自定义资源、服务和工作流。
9.3.1. MTV 自定义资源和服务
Migration Toolkit for Virtualization(MTV) 作为 OpenShift Container Platform Operator 提供。它将创建和管理以下自定义资源 (CR) 和服务。
MTV 自定义资源
-
Provider
CR 存储启用 MTV 连接到并与源和目标供应商交互的属性。 -
NetworkMapping
CR 映射源供应商的网络。 -
StorageMapping
CR 会映射源和目标供应商的存储。 -
Provisioner
CR 存储存储存储置备程序的配置,如支持的卷和访问模式。 -
Plan
CR 包含具有相同迁移参数和相关网络和存储映射的虚拟机列表。 Migration
CR 运行一个迁移计划。每个迁移计划只能有一个
Migration
CR 可以在指定时间运行。您可以为单个Plan
CR 创建多个Migration
CR。
MTV 服务
Inventory
服务执行以下操作:- 连接到源和目标供应商。
- 维护本地清单以进行映射和计划。
- 存储虚拟机配置。
-
如果检测到虚拟机配置更改,则运行
Validation
服务。
-
Validation
服务通过应用规则检查虚拟机是否适合迁移。 User Interface
服务执行以下操作:- 可让您创建和配置 MTV CR。
- 显示 CR 的状态和迁移的进度。
Migration Controller
服务编配迁移。当您创建迁移计划时,
Migration Controller
服务会验证计划并添加状态标签。如果计划无法验证,计划状态为Not ready
,则计划无法用于执行迁移。如果计划通过验证,计划状态为Ready
,它可用于执行迁移。迁移成功后,Migration Controller
服务会将计划状态更改为Completed
。-
Kubevirt Controller
和Containerized Data Import(CDI)Controller
服务处理大多数技术操作。
9.3.2. 高级别迁移工作流
高级别工作流显示用户视图的迁移过程:
- 您可以创建一个源供应商、目标供应商、网络映射和存储映射。
您可以创建一个包含以下资源的
Plan
自定义资源(CR):- 源供应商
- 目标供应商,如果目标集群上没有安装 MTV
- 网络映射
- 存储映射
- 一个或多个虚拟机 (VM)
您可以通过创建一个引用
Plan
CR 的Migration
CR 来运行迁移计划。如果出于某种原因无法迁移所有虚拟机,则可以为同一
Plan
CR 创建多个Migration
CR,直到虚拟机迁移为止。对于
Plan
CR 中的每个虚拟机,Migration Controller
服务会创建一个VirtualMachine
CR,并在Migration
CR 中记录虚拟机迁移进度。当迁移所有虚拟机时,
Migration Controller
服务会将Plan
CR 的状态更新为Completed
。每个源虚拟机的电源状态在迁移后会被维护。
9.3.3. 详细的迁移工作流
您可以使用详细的迁移工作流来排除迁移失败的问题。
工作流描述了以下步骤:
当您创建一个
Migration
自定义资源(CR)来运行迁移计划时,Migration Controller
服务为每个源虚拟机(VM)和DataVolume
CR 创建一个VirtualMachine
CR。对于每个 VM 磁盘:
-
Containerized Data Importer(CDI)
控制器服务根据DataVolume
CR 中指定的参数创建一个持久性卷声明 (PVC)。 -
如果
StorageClass
有动态置备程序,则StorageClass
置备程序会动态置备持久性卷(PV)。 -
CDI Controller
服务创建一个importer
pod。 importer
pod 将虚拟机磁盘流传输到 PV。虚拟机磁盘传输后:
Migration Controller
服务创建一个conversion
pod,并附加了 PVC。conversion
pod 运行virt-v2v
,它会在目标虚拟机的 PVC 中安装和配置设备驱动程序。当目标虚拟机开机时,
KubeVirt Controller
服务会创建一个virt-launcher
pod 和VirtualMachineInstance
CR。virt-launcher
pod 运行QEMU-KVM
,并附加了作为 VM 磁盘的 PVC。
9.4. 日志和自定义资源
您可以下载日志和自定义资源 (CR) 信息以进行故障排除。如需更多信息,请参阅详细的迁移工作流。
9.4.1. 收集日志和自定义资源信息
您可以使用 MTV 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
9.4.2. 从 web 控制台下载日志和自定义资源信息
您可以使用 MTV web 控制台下载有关已完成的、失败或取消迁移计划的自定义资源 (VM) 的日志和信息。
流程
- 在 web 控制台中点 Migration Plan。
- 点迁移计划名称旁的 Get logs。
在 Get logs 窗口中点 Get logs。
日志会被收集。此时会显示
Log collection complete
信息。- 点 Download logs 下载存档文件。
- 要下载迁移的虚拟机的日志,请点迁移计划名称,然后点 VM 的 Get logs。
9.4.3. 使用命令行界面访问日志和自定义资源信息
您可以使用 must-gather
工具从命令行界面访问自定义资源(CR)的日志和信息。您必须将 must-gather
数据文件附加到所有客户问题单。
您可以使用过滤选项收集特定命名空间、完成、失败或取消迁移的虚拟机(VM)的数据。
如果您在过滤的 must-gather
命令中指定不存在的资源,则不会创建存档文件。
先决条件
-
您必须以具有
cluster-admin
角色的用户身份登录到 OpenShift Virtualization 集群。 -
已安装 OpenShift Container Platform CLI (
oc
)。
流程
-
进入要存储
must-gather
数据的目录。 运行
oc adm must-gather
命令:$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.3.0
数据被保存为
/must-gather/must-gather.tar.gz
。您可以将此文件上传到红帽客户门户网站中的支持问题单中。可选:使用以下选项运行
oc adm must-gather
命令来收集过滤的数据:命名空间:
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.3.0 \ -- NS=<namespace> /usr/bin/targeted
迁移计划:
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.3.0 \ -- PLAN=<migration_plan> /usr/bin/targeted
虚拟机:
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.3.0 \ -- VM=<vm_name> NS=<namespace> /usr/bin/targeted 1
- 1
- 您必须指定虚拟机名称,而不是虚拟机 ID,因为它出现在
Plan
CR 中。