安装并使用 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)将虚拟机从 VMware vSphere 或 Red Hat Virtualization 迁移到 OpenShift Virtualization。
其他资源
1.1. 关于冷和热迁移
MTV 支持从 Red Hat Virtualization 进行冷迁移,以及 VMware vSphere 的后续迁移。
1.1.1. 冷迁移
冷迁移是默认的迁移类型。源虚拟机在复制数据时关闭。
1.1.2. 热迁移
在源虚拟机(VM)正在运行时,大多数数据都会在 precopy 阶段复制。
然后,虚拟机将关闭,并在 剪切 阶段复制剩余的数据。
Precopy stage
在 precopy 阶段不会关闭虚拟机。
VM 磁盘使用 更改的块跟踪(CBT) 快照逐步复制。快照默认以一小时的间隔创建。您可以通过更新 forklift-controller 部署来更改快照间隔。
您必须为每个源虚拟机和每个虚拟机磁盘启用 CBT。
虚拟机可以最多支持 28 CBT 快照。如果源虚拟机有太多 CBT 快照,且 Migration Controller 服务无法创建新快照,则 warm 迁移可能会失败。当不再需要快照时,Migration Controller 服务会删除每个快照。
precopy 阶段会运行,直到手动启动或计划启动 cutover 阶段为止。
cutover 阶段
虚拟机在 cutover 阶段关闭,剩余的数据被迁移。存储在 RAM 中的数据不会迁移。
您可以使用 MTV 控制台手动启动 cutover 阶段,或者在 Migration 清单中调度剪切时间。
第 2 章 先决条件
查看以下先决条件,以确保您的环境为迁移准备。
2.1. 软件要求
您必须安装 兼容版本的 OpenShift Container Platform 和 OpenShift Virtualization。
2.2. 存储支持和默认模式
MTV 对支持的存储使用以下默认卷和访问模式。
如果 OpenShift Virtualization 存储不支持 动态置备,MTV 应用默认设置:
文件系统卷模式文件系统卷模式比Block卷模式慢。ReadWriteOnce访问模式ReadWriteOnce访问模式不支持实时迁移。
表 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 nodes | VMware vCenter | VMware 供应商清单 磁盘传输身份验证 |
| 443 | TCP | OpenShift nodes | VMware ESXi 主机 | 磁盘传输身份验证 |
| 902 | TCP | OpenShift nodes | VMware ESXi 主机 | 磁盘传输数据复制 |
表 2.3. 从 Red Hat Virtualization 迁移所需的网络端口
| 端口 | 协议 | 源 | 目的地 | 用途 |
|---|---|---|---|---|
| 443 | TCP | OpenShift nodes | RHV Engine | RHV 供应商清单 磁盘传输身份验证 |
| 443 | TCP | OpenShift nodes | RHV 主机 | 磁盘传输身份验证 |
| 54322 | TCP | OpenShift nodes | RHV 主机 | 磁盘传输数据复制 |
2.4. 源虚拟机先决条件
以下先决条件适用于所有迁移:
- 必须卸载 ISO/CDROM 磁盘。
- 每个 NIC 必须包含一个 IPv4 和/或一个 IPv6 地址。
-
虚拟机名称必须仅包含小写字母(
a-z)、数字(0-9)或连字符(-),最多 253 个字符。第一个和最后一个字符必须为字母数字。名称不得包含大写字母、空格、句点 (.) 或特殊字符。 - 虚拟机名称不得在 OpenShift Virtualization 环境中复制虚拟机的名称。
-
虚拟机操作系统必须经过认证并可作为 带 OpenShift Virtualization 的客户机操作系统,并使用
virt-v2v转换为 KVM。
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 证书。
2.6. VMware 的先决条件
以下先决条件适用于 VMware 迁移:
- 您必须使用 兼容 VMware vSphere 版本。
- 您必须在所有源虚拟机(VM)上安装 VMware Tools。
- 如果您正运行 warm 迁移,则必须在虚拟机和 VM 磁盘中启用 已更改的块跟踪(CBT)。
- 您必须创建一个 VMware Virtual Disk Development Kit(VDDK)镜像。
- 您必须获取 vCenter 主机的 SHA-1 指纹。
- 如果您要从同一迁移计划中的 ESXi 主机迁移超过 10 个虚拟机,您必须增加主机的 NFC 服务内存。
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 镜像添加到 HyperConverged 自定义资源(CR)。
在公共 registry 中存储 VDDK 镜像可能会违反 VMware 许可证条款。
先决条件
- OpenShift Container Platform image registry
-
已安装
podman。 - 如果使用外部 registry,OpenShift Virtualization 必须能够访问它。
流程
创建并导航到临时目录:
$ mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
- 在浏览器中,导航到 VMware VDDK 下载页面。
- 选择最新的 VDDK 版本并点 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 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.4. 兼容软件版本
| Migration Toolkit for Virtualization | OpenShift Container Platform | OpenShift Virtualization | VMware vSphere | Red Hat Virtualization |
|---|---|---|---|---|
| 2.2 | 4.9 | 4.9.1 | 6.5 或更高版本 | 4.3 或更高版本 |
第 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.9。
- 安装了 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 来验证 openshift-mtv 项目中是否出现在 openshift-mtv 项目中,状态为 Succeeded。
- 点 Virtualization Operator 的 Migration Tookit。
- 在 Provided APIs 下,找到 ForkliftController,再单击 Create Instance。
- 点 Create。
- 点 Workloads → Pods 来验证 MTV pod 是否正在运行。
获取 MTV Web 控制台 URL
您可以使用 OpenShift Container Platform Web 控制台获取 MTV Web 控制台 URL。
先决条件
- 已安装 OpenShift Virtualization Operator。
- 已安装 MTV Operator。
-
您必须以具有
cluster-admin权限的用户身份登录。
流程
- 登陆到 OpenShift Container Platform Web 控制台。
- 点 Networking → Routes。
-
选择 Project: 列表中的
openshift-mtv项目。 -
单击
forklift-ui服务的 URL,以打开 MTV Web 控制台的登录页面。
3.2. 使用命令行界面安装 MTV Operator
您可以使用命令行界面(CLI)安装 MTV Operator。
先决条件
- 安装了 OpenShift Container Platform 4.9。
- 安装了 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的OperatorGroupCR:$ cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: migration namespace: openshift-mtv spec: targetNamespaces: - openshift-mtv EOF为 Operator 创建
SubscriptionCR:$ cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: mtv-operator namespace: openshift-mtv spec: channel: release-v2.2.0 installPlanApproval: Automatic name: mtv-operator source: redhat-operators sourceNamespace: openshift-marketplace startingCSV: "mtv-operator.2.2.0" EOF
创建一个
ForkliftControllerCR:$ 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
获取 MTV Web 控制台 URL
您可以从命令行获取 MTV web 控制台 URL。
先决条件
- 已安装 OpenShift Virtualization Operator。
- 已安装 MTV Operator。
-
您必须以具有
cluster-admin权限的用户身份登录。
流程
获取 MTV Web 控制台 URL:
$ oc get route virt -n openshift-mtv \ -o custom-columns=:.spec.host
输出示例
https://virt-openshift-mtv.apps.cluster.openshift.com.
- 启动浏览器并导航到 MTV Web 控制台。
第 4 章 使用 MTV web 控制台迁移虚拟机
您可以使用 MTV web 控制台将虚拟机迁移到 OpenShift Virtualization。
您必须确保满足所有 先决条件。
4.1. 添加供应商
您可以使用 MTV web 控制台添加供应商。
4.1.1. 添加 VMware 源供应商
您可以使用 MTV web 控制台添加 VMware 源供应商。
先决条件
- 您必须具有 VMware admin 权限。
- vCenter SHA-1 指纹.
- 在所有集群可以访问的安全 registry 中的 VMware Virtual Disk Development Kit(VDDK)镜像。
流程
将 VDDK 镜像添加到
HyperConvergedCR:$ cat << EOF | oc apply -f - apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: vddkInitImage: <registry_route_or_server_path>/vddk:<tag> 1 EOF- 1
- 指定您创建的 VDDK 镜像。
- 在 MTV web 控制台中,单击 Providers。
- 点 Add provider。
- 从 Type 列表中选择 VMware。
填写以下字段:
- 名称 :要在供应商列表中显示的名称
- 主机名或 IP 地址 : vCenter 主机名或 IP 地址
-
用户名 : vCenter admin 用户,例如
administrator@vsphere.local - 密码 : vCenter admin 密码
- SHA-1 指纹 : vCenter SHA-1 指纹
点 Add 添加并保存该提供程序。
源供应商会出现在提供程序列表中。
4.1.1.1. 为 VMware 源供应商选择迁移网络
您可以在 MTV web 控制台中为 VMware 源供应商选择迁移网络,以降低源环境的风险并提高性能。
将默认网络用于迁移可能会导致性能降低,因为网络可能没有足够的带宽。这种情形可以对源平台产生负面影响,因为磁盘传输操作可能会使网络饱和。
先决条件
- 迁移网络必须具有足够的吞吐量,最小 10 Gbps 的速度用于磁盘传输。
OpenShift Virtualization 节点必须可通过默认网关访问迁移网络。
注意源虚拟磁盘由连接到目标命名空间的 pod 网络的 pod 复制。
- 迁移网络必须启用巨型帧。
流程
- 在 MTV web 控制台中点 Providers
- 点 VMware 标签页。
- 单击提供程序旁边的 Hosts 列中的主机编号,以查看主机列表。
- 选择一个或多个主机并点击 Select migration network。
选择 网络。
您可以选择默认网络来清除选择。
如果您的源供应商是 VMware,请完成以下字段:
-
ESXi 主机 admin 用户名 :指定 ESXi 主机 admin 用户,例如
root。 - ESXi 主机管理员密码 :指定 ESXi 主机管理员密码。
-
ESXi 主机 admin 用户名 :指定 ESXi 主机 admin 用户,例如
如果您的源供应商是 Red Hat Virtualization,请完成以下字段:
- 用户名 :指定 Manager 用户。
- Password :指定 Manager 密码。
- 点击 Save。
验证每个主机的状态是否为 Ready。
如果主机状态为 Ready,则在迁移网络上可能无法访问主机,或者凭证可能不正确。您可以修改主机配置并保存更改。
4.1.2. 添加 Red Hat Virtualization 源供应商
您可以使用 MTV web 控制台添加 Red Hat Virtualization 源供应商。
先决条件
- Manager 的 CA 证书。
流程
- 在 MTV web 控制台中,单击 Providers。
- 点 Add provider。
- 从 Type 列表中选择 Red Hat Virtualization。
填写以下字段:
- 名称 :要在供应商列表中显示的名称
- 主机名或 IP 地址 :管理器主机名或 IP 地址
- 用户名 : Manager 用户
- 密码 : Manager 密码
- CA 证书 : Manager 的 CA 证书
点 Add 添加并保存该提供程序。
源供应商会出现在提供程序列表中。
4.1.3. 添加 OpenShift Virtualization 供应商
除了默认的 OpenShift Virtualization 供应商(这是安装 MTV)的供应商,您还可以在 MTV web 控制台中添加 OpenShift Virtualization 供应商。
先决条件
-
您必须具有具有
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.3.1. 为 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 数据存储和目标存储类。
- 如果您的源供应商是 Red Hat Virtualization,请选择 Source 存储域 和 目标存储类。
- 可选:点击 Add 来创建额外的存储映射,或者将多个源数据存储或存储域映射到单个存储类。
点 Create。
映射显示在 Storage mappings 页面中。
4.4. 创建迁移计划
您可以使用 MTV web 控制台创建迁移计划。
迁移计划允许您将虚拟机分组在一起或具有相同迁移参数,例如,一个集群成员或完整应用程序的百分比。
您可以配置 hook 在迁移计划的指定阶段运行 Ansible playbook 或自定义容器镜像。
先决条件
- 如果目标集群上没有安装 MTV,您必须在 web 控制台的 Providers 页面中添加目标供应商。
流程
- 在 web 控制台中,点 Migration Plan,然后点 Create migration plan。
完成以下字段:
- 计划名称 :输入要在迁移计划列表中显示的迁移计划名称。
- 计划描述: Optional: brief description of the plan.
- Source provider :选择源供应商。
- 目标供应商 :选择一个目标供应商。
- 目标命名空间 : 您可以键入 来搜索现有目标命名空间或创建新命名空间。
您可以点击 Select a different network、从列表中选择网络并点 Select 来更改此计划的迁移转让网络。
如果您为 OpenShift Virtualization 供应商定义了迁移传输网络,并且网络位于目标命名空间中,则网络是所有迁移计划的默认网络。否则会使用
pod网络。
- 点击 Next。
- 选择选项来过滤源虚拟机列表,然后点 Next。
- 选择要迁移的虚拟机,然后点 Next。
选择现有网络映射或创建新网络映射。
要创建新网络映射:
- 为每个源网络选择一个目标网络。
- 可选: 选择 保存映射以再次使用 并输入网络映射名称。
- 点击 Next。
选择现有存储映射或创建新存储映射。
要创建新存储映射:
- 为每个 VMware 数据存储或 Red Hat Virtualization 存储域选择一个目标存储类。
- 可选: 选择 保存映射来再次使用 并输入存储映射名称。
- 点击 Next。
选择迁移类型并点 Next。
- 冷迁移:源虚拟机在复制数据时停止。
- warm 迁移:源虚拟机在以递增方式复制时运行。之后,您将运行 cutover,这将停止虚拟机并复制剩余的虚拟机数据和元数据。Red Hat Virtualization 不支持 warm 迁移。
可选:您可以创建一个迁移 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 be started migration。
仅限 warm 迁移:
- precopy 阶段会启动。
- 点 Cutover 完成迁移。
扩展迁移计划来查看迁移计划。
迁移详情屏幕会显示迁移启动和结束时间、复制数据的数量以及迁移的每个虚拟机的进度管道。
- 扩展虚拟机以查看迁移步骤、每个步骤所经过的时间及其状态。
4.6. 迁移计划选项
在 MTV web 控制台的 Migration Plan 页面中,点迁移计划
旁边的 Options 菜单并选择以下选项:
- 编辑 :编辑迁移计划的详情。您无法在迁移计划正在运行或成功完成后编辑迁移计划。
副本 :创建一个与现有计划相同的虚拟机(VM)、参数、映射和 hook 的新迁移计划。您可以将此功能用于以下任务:
- 将虚拟机迁移到不同的命名空间。
- 编辑归档的迁移计划。
- 编辑具有不同状态的迁移计划,如 failed、canceled、running、critical 或 ready。
归档 :删除迁移计划的日志、历史记录和元数据。计划不能编辑或重启。只能查看它。
注意Archive 选项不可逆。但是,您可以复制归档的计划。
删除 :永久删除迁移计划。您不能删除正在运行的迁移计划。
注意Delete 选项不可逆。
删除迁移计划不会删除临时资源,如
导入程序Pod、转换pod、配置映射、secret、失败的虚拟机和数据卷。(BZ#2018974)您必须在删除迁移计划前归档迁移计划,才能清理临时资源。- 查看详情 :显示迁移计划的详细信息。
- 重启 :重启失败或取消的迁移计划。
- 取消计划的 cutover :取消计划的过渡计划。
4.7. 取消迁移
在使用 MTV web 控制台,当迁移计划正在进行时,您可以取消一些或所有虚拟机(VM)。
流程
- 点 Migration Plans。
- 点正在运行的迁移计划的名称查看迁移详情。
- 选择一个或多个虚拟机,点 Cancel。
单击 Yes,取消 确认取消。
在 VM 列表的 Migration 详情 中,取消的虚拟机的状态将变为 Canceled。未迁移且迁移的虚拟机不受影响。
您可以通过点 Migration Plan 页的迁移计划旁的 Restart 重启迁移。
第 5 章 从命令行迁移虚拟机
您可以使用命令行将虚拟机迁移到 OpenShift Virtualization。
您必须确保满足所有 先决条件。
5.1. 迁移虚拟机
您可以通过创建 MTV 自定义资源(CR)从命令行(CLI)迁移虚拟机。
您必须为集群范围的 CR 指定一个名称。
您必须为命名空间范围 CR 指定名称和命名空间。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 仅 VMware:在所有集群可以访问的安全 registry 中必须有 VMware Virtual Disk Development Kit(VDDK)镜像。
流程
仅 VMware:将 VDDK 镜像添加到
HyperConvergedCR:$ cat << EOF | oc apply -f - apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: vddkInitImage: <registry_route_or_server_path>/vddk:<tag> 1 EOF- 1
- 指定您创建的 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: <engine_ca_certificate> 3 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 secret: name: <secret> 3 namespace: openshift-mtv EOF
仅 VMware:创建一个
主机清单:$ 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可选:在
PlanCR 中指定的阶段创建一个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
- 指定
PlanCR 的名称。 - 2
- 仅 VMware:指定迁移是 warm 还是冷。如果您指定了 warm 迁移,且没有为
Migration清单中的cutover参数指定一个值,则只有 precopy 阶段将运行。RHV 不支持 warm 迁移。 - 3
- 您可以添加多个网络映射。
- 4
- 指定
NetworkMapCR 的名称。 - 5
- 指定
StorageMapCR 的名称。 - 6
- 您可以使用
id或name参数来指定源虚拟机。 - 7
- 指定 VMware VM MOR 或 RHV VM UUID。
- 8
- 可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
- 9
- 指定
HookCR 的名称。 - 10
- 在迁移完成后,允许的值为
PreHook(migation 计划启动或PostHook)。
创建运行
PlanCR 的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
您可以将多个
MigrationCR 与一个PlanCR 关联。如果迁移没有完成,您可以在不更改PlanCR 的情况下创建新的MigrationCR,以迁移剩余的虚拟机。检索
MigrationCR 以监控迁移的进度:$ oc get migration/<migration> -n openshift-mtv -o yaml
5.2. 取消迁移
在从命令行界面(CLI)进行迁移时,您可以取消整个迁移或单独的虚拟机。
取消整个迁移
删除
MigrationCR:$ oc delete migration <migration> -n openshift-mtv 1- 1
- 指定
MigrationCR 的名称。
取消单个虚拟机的迁移
将独立虚拟机添加到
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 虚拟机的 受管对象引用,或 RHV 虚拟机的虚拟机 UUID。检索
MigrationCR 以监控剩余的虚拟机的进度:$ oc get migration/<migration> -n openshift-mtv -o yaml
第 6 章 高级迁移选项
6.1. 为 warm 迁移更改预复制间隔
您可以通过修补 ForkliftController 自定义资源(CR)来更改快照间隔。
流程
对
ForkliftControllerCR 进行补丁:$ oc patch forkliftcontroller/<forklift-controller> -n openshift-mtv -p '{"spec": {"controller_precopy_interval": <60>}}' --type=merge 1- 1
- 以分钟为单位指定 precopy 间隔。默认值为
60。
您不需要重启
forklift-controllerpod。
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 键中。Web 控制台显示供应商清单中每个虚拟机的 concerns 键的内容。
以下 .rego 文件示例检查在 VMware 虚拟机的集群中启用了分布式资源调度:
drs_enabled.rego example
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 服务的默认规则,以确保您不会创建重新定义现有默认值的规则。
示例:如果默认规则包含默认 默认值 valid_input = false,并且您创建一个包含 默认值 valid_input = true 的自定义规则,则 Validation 服务将不会启动。
流程
连接到
Validationpod 的终端:$ 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
您可以通过将 库存服务 查询发送到虚拟机(VM)来检索库存服务 JSON。输出中包含一个 "input" 键,其中包含由 Validation 服务规则查询的清单属性。
您可以根据 "input" 键中的任何属性(如 input.snapshot.kind )创建验证规则。
流程
检索
Inventory服务路由:$ oc get route <inventory_service> -n openshift-mtv
检索供应商的
UUID:$ GET https://<inventory_service_route>/providers/<provider> 1- 1
- 供应商允许的值有
vsphere和ovirt。
检索供应商的虚拟机:
$ GET https://<inventory_service_route>/providers/<provider>/<UUID>/vms
检索虚拟机的详情:
$ GET https://<inventory_service_route>/providers/<provider>/<UUID>/workloads/<vm>
输出示例
{ "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 服务来创建验证规则。
-
如果您创建与现有规则 相同的规则,验证服务
将使用规则执行OR操作。 -
如果您创建使用默认规则迭代的规则,则
Validation服务将不会启动。
验证规则示例
验证规则基于由 Provider Inventory 服务收集的虚拟机(VM)属性。
例如,VMware API 使用此路径来检查 VMware 虚拟机是否配置了 NUMA 节点关联性: MOR:VirtualMachine.config.extraConfig["numa.nodeAffinity"]。
Provider Inventory 服务使用列表值简化了此配置并返回 testable 属性:
"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来停止Validationpod:$ oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
通过将forklift-controller部署扩展到1:$ oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
检查
Validationpod 日志,以验证 pod 是否已启动:$ oc logs -f <validation_pod>
如果自定义规则与默认规则冲突,则
Validationpod 将不会启动。删除源供应商:
$ 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 } }连接到
Validationpod 的终端:$ oc rsh <validation_pod>
-
更新
/usr/share/opa/policies/io/konveyor/forklift/<provider>/rules_version.rego 文件中的规则版本。 -
从
Validationpod 终端注销。 验证更新的规则版本:
$ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version 1输出示例
{ "result": { "rules_version": 6 } }
第 7 章 升级虚拟化的 Migration Toolkit
您可以使用 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。
将更新频道更改为 release-v2.2.0。
请参阅 OpenShift Container Platform 文档中的更改更新频道。
确认 Upgrade status 从 Up to date 变为 Upgrade available。如果没有,重启
CatalogSourcepod:-
记录目录源,如
redhat-operators。 在命令行中检索目录源 pod:
$ oc get pod -n openshift-marketplace | grep <catalog_source> 1删除 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-uipod 是否处于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
第 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.konveyor.io组中。 -
在每个 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. 架构
本节论述了 MTV 自定义资源、服务和工作流。
9.1.1. MTV 自定义资源和服务
Migration Toolkit for Virtualization(MTV)作为 OpenShift Container Platform Operator 提供。它将创建和管理以下自定义资源(CR)和服务。
MTV 自定义资源
-
provider CR 存储启用 MTV 连接到并与源和目标供应商交互的属性。
-
NetworkMappingCR 映射源供应商的网络。 -
StorageMappingCR 会映射源和目标供应商的存储。 -
provisionerCR 存储存储存储置备程序的配置,如支持的卷和访问模式。 -
计划CR 包含具有相同迁移参数和相关网络和存储映射的虚拟机列表。 迁移CR 运行一个迁移计划。每个迁移计划只能有一个
MigrationCR 可以在指定时间运行。您可以为单个PlanCR 创建多个MigrationCR。
MTV 服务
Inventory服务执行以下操作:- 连接到源和目标供应商。
- 维护本地清单以进行映射和计划。
- 存储虚拟机配置。
-
如果检测到虚拟机配置更改,则运行
Validation服务。
-
Validation服务通过应用规则检查虚拟机是否适合迁移。 用户界面服务执行以下操作:- 可让您创建和配置 MTV CR。
- 显示 CR 的状态和迁移的进度。
Migration Controller服务编配迁移。当您创建迁移计划时,
Migration Controller服务会验证计划并添加状态标签。如果计划无法验证,计划状态为Not ready,则计划无法用于执行迁移。如果计划通过验证,计划状态为Ready,它可用于执行迁移。迁移成功后,Migration Controller服务会将计划状态更改为Completed。-
Kubevirt Controller和Containerized Data Import(CDI)Controller服务处理大多数技术操作。
9.1.2. 高级别迁移工作流
高级别工作流显示用户视图的迁移过程:
- 您可以创建一个源供应商、目标供应商、网络映射和存储映射。
您可以创建一个包含以下资源的
Plan自定义资源(CR):- 源供应商
- 目标供应商,如果目标集群上没有安装 MTV
- 网络映射
- 存储映射
- 一个或多个虚拟机(VM)
您可以通过创建一个引用
PlanCR 的MigrationCR 来运行迁移计划。如果出于某种原因无法迁移所有虚拟机,则可以为同一
PlanCR 创建多个MigrationCR,直到虚拟机迁移为止。对于
PlanCR 中的每个虚拟机,Migration Controller服务会创建一个VirtualMachineCR,并在MigrationCR 中记录虚拟机迁移进度。当迁移所有虚拟机时,
Migration Controller服务会将PlanCR 的状态更新为Completed。每个源虚拟机的电源状态在迁移后会被维护。
9.1.3. 详细的迁移工作流
您可以使用详细的迁移工作流来排除迁移失败的问题。
工作流描述了以下步骤:
当您创建一个
Migration自定义资源(CR)来运行迁移计划时,Migration Controller服务为每个源虚拟机(VM)和DataVolumeCR 创建一个VirtualMachineCR。对于每个 VM 磁盘:
-
Containerized Data Importer(CDI)控制器服务根据DataVolumeCR 中指定的参数创建一个持久性卷声明(PVC)。 -
如果
StorageClass有一个动态置备程序,则持久性卷(PV)由StorageClass置备程序动态置备。 -
CDI Controller服务创建一个导入程序pod。 importerpod 将虚拟机磁盘流传输到 PV。虚拟机磁盘传输后:
Migration Controller服务创建一个转换pod,并附加了 PVC。转换pod 运行virt-v2v,它会在目标虚拟机的 PVC 中安装和配置设备驱动程序。当目标虚拟机开机时,
KubeVirt Controller服务会创建一个virt-launcherpod 和VirtualMachineInstanceCR。virt-launcherpod 运行QEMU-KVM,并附加了作为 VM 磁盘的 PVC。
9.2. 日志和自定义资源
您可以下载日志和自定义资源(CR)信息以进行故障排除。如需更多信息,请参阅 详细的迁移工作流。
9.2.1. 收集日志和自定义资源信息
您可以使用 MTV web 控制台或命令行界面(CLI)为以下目标下载日志和自定义资源(CR) yaml 文件:
- 迁移计划:Web 控制台或 CLI。
- 虚拟机:Web 控制台或 CLI.
- namespace:仅限 CLI。
must-gather 工具会在存档文件中收集以下日志和 CR 文件:
CR:
-
DataVolumeCR:代表在迁移的虚拟机中挂载的磁盘。 -
VirtualMachineCR:代表一个迁移的虚拟机。 -
计划CR:定义 VM 和存储和网络映射。
-
日志:
-
Importerpod: Disk-to-data-volume 转换日志。importerpod 命名规则是importer-<migration_plan>-<vm_id><5_char_id>,例如importer-mig-plan-pig-plan-90dfc6-9a17-4a8btnfh,其中ed90dfc6-9a17-4a8是经过截断的 RHV VM ID,btnfh是 5 个字符生成的 ID。 -
转换pod:虚拟机转换日志.转换pod 运行virt-v2v,它会在虚拟机的 PVC 中安装和配置设备驱动程序。转换pod 命名约定是 <migration_plan>-<vm_id><5_char_id>。 -
virt-launcherpod:VM launcher 日志.当迁移的虚拟机被开启后,virt-launcherPod 运行QEMU-KVM,并附加了作为虚拟机磁盘的 PVC。 -
forklift-controllerpod:针对must-gather命令指定的迁移计划、虚拟机或命名空间过滤日志。 forklift-must-gather-apipod:日志针对must-gather命令指定的迁移计划、虚拟机或命名空间过滤。注意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.2.2. 从 web 控制台下载日志和自定义资源信息
您可以使用 MTV web 控制台下载有关已完成的、失败或取消迁移计划的自定义资源(VM)的日志和信息。
流程
- 在 web 控制台中点 Migration Plan。
- 点迁移计划名称旁的 Get logs。
在 Get logs 窗口中点击 Get logs。
日志会被收集。此时会显示
Log collection complete信息。- 点 Download logs 下载存档文件。
- 要下载迁移的虚拟机的日志,请点击迁移计划名称,然后点击 VM 的 Get 日志。
9.2.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.2.0
数据被保存为
/must-gather/must-gather.tar.gz。您可以将此文件上传到红帽客户门户网站中的支持问题单中。可选:使用以下选项运行
oc adm must-gather命令来收集过滤的数据:Namespace:
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.2.0 \ -- NS=<namespace> /usr/bin/targeted
迁移计划:
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.2.0 \ -- PLAN=<migration_plan> /usr/bin/targeted
虚拟机:
$ oc adm must-gather --image=registry.redhat.io/migration-toolkit-virtualization/mtv-must-gather-rhel8:2.2.0 \ -- VM=<vm_name> NS=<namespace> /usr/bin/targeted 1- 1
- 您必须指定 虚拟机名称,而不是虚拟机 ID,因为它出现在
PlanCR 中。