安装并使用 Migration Toolkit for Virtualization

Migration Toolkit for Virtualization 2.3

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

Red Hat Modernization and Migration Documentation Team

摘要

Migration Toolkit for Virtualization(MTV)可让您将虚拟机从 VMware vSphere 或 Red Hat Virtualization 迁移到在 OpenShift Container Platform 上运行的 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 (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 权限

特权描述

Virtual machine.Interaction 权限:

Virtual machine.Interaction.Power Off

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

Virtual machine.Interaction.Power On

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

Virtual machine.Provisioning 权限:

注意

需要所有 Virtual machine.Provisioning 权限。

Virtual machine.Provisioning.Allow disk access

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

Virtual machine.Provisioning.Allow file access

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

Virtual machine.Provisioning.Allow read-only disk access

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

Virtual machine.Provisioning.Allow virtual machine download

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

Virtual machine.Provisioning.Allow virtual machine files upload

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

Virtual machine.Provisioning.Clone template

允许克隆模板。

Virtual machine.Provisioning.Clone virtual machine

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

Virtual machine.Provisioning.Create template from virtual machine

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

Virtual machine.Provisioning.Customize guest

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

Virtual machine.Provisioning.Deploy template

允许从模板部署虚拟机。

Virtual machine.Provisioning.Mark as template

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

Virtual machine.Provisioning.Mark as virtual machine

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

Virtual machine.Provisioning.Modify customization specification

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

Virtual machine.Provisioning.Promote disks

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

Virtual machine.Provisioning.Read customization specifications

允许读取自定义规格。

Virtual machine.Snapshot management 权限:

Virtual machine.Snapshot management.Create snapshot

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

Virtual machine.Snapshot management.Remove Snapshot

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

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 许可证条款。

先决条件

流程

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

    $ mkdir /tmp/<dir_name> && cd /tmp/<dir_name>
  2. 在浏览器中,进入 VMware VDDK 版本 7 下载页面
  3. 选择版本 7.0.3.2 并点 Download
  4. 将 VDDK 归档文件保存到临时目录中。
  5. 提取 VDDK 归档:

    $ tar -xzf VMware-vix-disklib-<version>.x86_64.tar.gz
  6. 创建 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
  7. 构建 VDDK 镜像:

    $ podman build . -t <registry_route_or_server_path>/vddk:<tag>
  8. 将 VDDK 镜像推送到 registry:

    $ podman push <registry_route_or_server_path>/vddk:<tag>
  9. 确保镜像可以被 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 个并行连接。

流程

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

    ...
          <nfcsvc>
             <path>libnfcsvc.so</path>
             <enabled>true</enabled>
             <maxMemory>1000000000</maxMemory>
             <maxStreamMemory>10485760</maxStreamMemory>
          </nfcsvc>
    ...
  3. 重启 hostd

    # /etc/init.d/hostd restart

    您不需要重启主机。

2.7. 软件兼容性指南

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

表 2.5. 兼容软件版本

Migration Toolkit for VirtualizationOpenShift Container PlatformOpenShift VirtualizationVMware vSphereRed 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 权限的用户身份登录。

流程

  1. 在 OpenShift Container Platform Web 控制台中,点击 OperatorsOperatorHub
  2. 使用 Filter by keyword 字段搜索 mtv-operator
  3. Virtualization Operator 的 Migration Tookit,然后点 Install
  4. Install Operator 页面中,点 Install
  5. OperatorsInstalled Operators 来验证 Migration Tookit for Virtualization Operator 出现在 openshift-mtv 项目中,其状态为 Succeeded
  6. Virtualization Operator 的 Migration Tookit
  7. Provided APIs 下,找到 ForkliftController,再点 Create Instance
  8. Create
  9. WorkloadsPods 来验证 MTV pod 是否正在运行。
  10. 登陆到 OpenShift Container Platform Web 控制台。
  11. NetworkingRoutes
  12. 选择 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 权限的用户身份登录。

流程

  1. 创建 openshift-mtv 项目:

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

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

    $ 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
  4. 创建一个 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
  5. 验证 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

  6. 使用以下命令获取 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 控制台,请按照以下步骤执行:

    1. 登陆到 OpenShift Container Platform Web 控制台。
    2. NetworkingRoutes
    3. 选择 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) 镜像。

流程

  1. 在 MTV web 控制台中,点 Providers
  2. Add provider
  3. Type 列表中选择 VMware
  4. 填写以下字段:

    • 名称 :要在供应商列表中显示的名称
    • 主机名或 IP 地址 : vCenter 主机名或 IP 地址
    • 用户名 : vCenter 用户,例如 user@vsphere.local
    • 密码 : vCenter 用户密码
    • VDDK init 镜像 : VDDKInitImage 路径
    • Verify certificate
    • 选择 I trust the authenticity of this certificate 复选框。
  5. Add 添加并保存该提供程序。

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

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

您可以在 MTV web 控制台中选择源供应商的迁移网络,以降低源环境的风险并提高性能。

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

先决条件

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

    注意

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

  • 迁移网络必须启用巨型帧。

流程

  1. 在 MTV web 控制台中点 Providers
  2. VMware 标签页。
  3. 点供应商旁边的 Hosts 列中的主机编号,以查看主机列表。
  4. 选择一个或多个主机并点击 Select migration network
  5. 选择 网络

    您可以选择默认网络来清除选择。

  6. 如果您的源供应商是 VMware,请完成以下字段:

    • ESXi host admin username: 指定 ESXi 主机 admin 用户,例如 root
    • ESXi host admin password: 指定 ESXi 主机管理员密码。
  7. 如果您的源供应商是 Red Hat Virtualization,请完成以下字段:

    • 用户名 :指定 Manager 用户。
    • Password :指定 Manager 密码。
  8. Save
  9. 验证每个主机的状态是否为 Ready

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

4.1.1.2. 添加 Red Hat Virtualization 源供应商

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

先决条件

  • Manager 的 CA 证书。
  • Manager 的 Apache CA 证书,如果 Manager Apache CA 证书被第三方 CA 证书替代。

流程

  1. 在 MTV web 控制台中,点 Providers
  2. Add provider
  3. Type 列表中选择 Red Hat Virtualization
  4. 填写以下字段:

    • 名称 :要在供应商列表中显示的名称
    • 主机名或 IP 地址 :管理器主机名或 IP 地址
    • 用户名 : Manager 用户
    • 密码 : Manager 密码
    • CA 证书 :管理器的 CA 证书。如果 Manager Apache CA 证书被第三方 CA 证书替代,则需要指定两个 CA 证书。
  5. 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 服务帐户令牌

流程

  1. 在 MTV web 控制台中,点 Providers
  2. Add provider
  3. Type 列表中选择 OpenShift Virtualization
  4. 完成以下字段:

    • Cluster name :指定要在目标供应商列表中显示的集群名称。
    • URL :指定集群的 API 端点。
    • Service account token :指定 cluster-admin 服务帐户令牌。
  5. Check connection 来验证凭证。
  6. 点击 Add

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

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

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

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

注意

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

流程

  1. 在 MTV web 控制台中,点 Providers
  2. OpenShift Virtualization 选项卡。
  3. 选择供应商并点 Select migration network
  4. 从可用网络列表中选择网络,然后点 Select
  5. 点供应商旁边的网络栏中的网络号码,验证所选网络是否为默认迁移网络。

4.2. 创建网络映射

您可以使用 MTV Web 控制台将源网络映射到 OpenShift Virtualization 网络来创建一个或多个网络映射。

先决条件

  • 添加到 web 控制台的源和目标供应商。
  • 如果映射多个源和目标网络,则每个额外 OpenShift Virtualization 网络都需要其自身的 网络附加定义

流程

  1. Mappings
  2. Network 选项卡,然后点 Create mapping
  3. 完成以下字段:

    • 名称 :输入要在网络映射列表中显示的名称。
    • Source provider :选择源供应商。
    • 目标供应商 :选择一个目标供应商。
    • 源网络 :选择源网络。
    • 目标命名空间/网络 :选择一个目标网络。
  4. 可选:点击 Add 来创建额外网络映射,或将多个源网络映射到一个目标网络。
  5. 如果您创建额外网络映射,请选择网络附加定义作为目标网络。
  6. Create

    网络映射显示在网络映射屏幕上。

4.3. 创建存储映射

您可以使用 MTV Web 控制台将源数据存储映射到 OpenShift Virtualization 存储类来创建存储映射。

先决条件

  • 添加到 web 控制台的源和目标供应商。
  • 支持虚拟机迁移的本地和共享的持久性存储。

流程

  1. Mappings
  2. Storage 选项卡,然后点 Create mapping
  3. 输入存储映射的 Name
  4. 选择 Source providerTarget provider
  5. 如果您的源供应商是 VMware,请选择 Source datastoreTarget storage class
  6. 如果您的源供应商是 Red Hat Virtualization,请选择 Source 存储域目标存储类
  7. 可选:点 Add 来创建额外的存储映射,或者将多个源数据存储或存储域映射到单个存储类。
  8. Create

    映射显示在 Storage mappings 页面中。

4.4. 创建迁移计划

您可以使用 MTV web 控制台创建迁移计划。

迁移计划允许您将虚拟机分组在一起或具有相同迁移参数,例如,一个集群成员或完整应用程序的百分比。

您可以配置 hook 在迁移计划的指定阶段运行 Ansible playbook 或自定义容器镜像。

先决条件

  • 如果目标集群上没有安装 MTV,您必须在 web 控制台的 Providers 页面中添加目标供应商。

流程

  1. 在 web 控制台中,点 Migration Plan,然后点 Create migration plan
  2. 完成以下字段:

    • 计划名称 :输入要在迁移计划列表中显示的迁移计划名称。
    • 计划描述: 可选:计划的简单描述。
    • Source provider :选择源供应商。
    • 目标供应商 :选择一个目标供应商。
    • 目标命名空间 : 您可以键入来搜索现有目标命名空间或创建新命名空间。
    • 您可以击 Select a different network、从列表中选择网络并点 Select 来更改此计划的迁移转让网络。

      如果您为 OpenShift Virtualization 供应商定义了迁移传输网络,并且网络位于目标命名空间中,则网络是所有迁移计划的默认网络。否则会使用 pod 网络。

  3. Next
  4. 选择选项来过滤源虚拟机列表,然后点 Next
  5. 选择要迁移的虚拟机,然后点 Next
  6. 选择现有网络映射或创建新网络映射。

    要创建新网络映射:

    • 为每个源网络选择一个目标网络。
    • 可选: 选择 Save mapping to use again 并输入网络映射名称。
  7. Next
  8. 选择现有存储映射或创建新存储映射。

    要创建新存储映射:

    • 为每个 VMware 数据存储或 Red Hat Virtualization 存储域选择一个目标存储类。
    • 可选: 选择 Save mapping to use again 并输入存储映射名称。
  9. Next
  10. 选择迁移类型并点 Next

    • 冷(cold)迁移:源虚拟机在复制数据时停止。
    • 温(warm)迁移:源虚拟机在以递增方式复制时运行。之后,您将运行 cutover,这将停止虚拟机并复制剩余的虚拟机数据和元数据。
  11. 可选:您可以创建一个迁移 hook 在迁移前或之后运行 Ansible playbook:

    1. Add hook
    2. 选择 hook 将运行时的步骤。
    3. 选择 hook 定义:

      • Ansible playbook :浏览 Ansible playbook 或将其粘贴到字段中。
      • 自定义容器镜像:如果您不想使用默认的 hook-runner 镜像,请输入镜像路径 : <registry_path>/<image_name>:<tag>.

        注意

        registry 必须可以被 OpenShift Container Platform 集群访问。

  12. Next
  13. 检查您的迁移计划并点完成

    迁移计划保存在迁移计划列表中。

  14. 点击迁移计划 kebab 的 Options 菜单并选择 View details 来验证迁移计划详情。

4.5. 运行迁移计划

您可以运行迁移计划,并在 MTV web 控制台中查看其进度。

先决条件

  • 有效的迁移计划。

流程

  1. Migration Plan

    Migration Plan 列表显示源和目标供应商、正在迁移的虚拟机数量以及计划的状态。

  2. 点迁移计划旁边的 Start 来启用迁移。

    仅限 warm 迁移:

    • precopy 阶段会启动。
    • Cutover 完成迁移。
  3. 扩展迁移计划来查看迁移计划。

    迁移详情屏幕会显示迁移启动和结束时间、复制数据的数量以及迁移的每个虚拟机的进度管道。

  4. 扩展虚拟机以查看迁移步骤、每个步骤所经过的时间及其状态。

4.6. 迁移计划选项

在 MTV web 控制台的 Migration Plan 页面中,点迁移计划 kebab 旁边的 Options 菜单来访问以下选项:

  • 编辑 :编辑迁移计划的详情。您无法在迁移计划正在运行或成功完成后编辑迁移计划。
  • 副本 :创建一个与现有计划相同的虚拟机 (VM)、参数、映射和 hook 的新迁移计划。您可以将此功能用于以下任务:

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

    注意

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

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

    注意

    Delete 选项不可逆。

    删除迁移计划不会删除 importer pod、conversion pod、配置映射、secret、失败的虚拟机和数据卷等临时资源。(BZ#2018974) 您必须在删除迁移计划前归档迁移计划来清理临时资源。

  • 查看详情 :显示迁移计划的详细信息。
  • 重启 :重启失败或取消的迁移计划。
  • 取消调度的 cutover :取消计划的过渡计划。

4.7. 取消迁移

在使用 MTV web 控制台,当迁移计划正在进行时,您可以取消一些或所有虚拟机 (VM)。

流程

  1. Migration Plans
  2. 点正在运行的迁移计划的名称查看迁移详情。
  3. 选择一个或多个虚拟机,点 Cancel
  4. Yes, cancel 确认取消。

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

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

第 5 章 从命令行迁移虚拟机

您可以使用命令行将虚拟机迁移到 OpenShift Virtualization。

重要

5.1. 迁移虚拟机

您可以通过创建 MTV 自定义资源(CR)从命令行(CLI)迁移虚拟机。

重要

您必须为集群范围的 CR 指定一个名称。

您必须为命名空间范围 CR 指定名称和命名空间。

先决条件

  • 您必须以具有 cluster-admin 权限的用户身份登录。
  • 仅 VMware:在所有集群可以访问的安全 registry 中必须有 VMware Virtual Disk Development Kit(VDDK)镜像。

流程

  1. 为源供应商凭证创建 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
    1
    指定 vCenter 用户或 RHV Manager 用户。
    2
    指定用户密码。
    3
    仅 RHV:指定 Manager 的 CA 证书。您可以在 https://<engine_host>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA 中检索它。
    4
    仅 VMware:指定 vCenter SHA-1 指纹。
  2. 为源供应商创建 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
    1
    允许的值是 ovirtvsphere
    2
    指定 API 端点 URL。例如 https://<vCenter_host>/sdk 用于 vSphere,或 https://<engine_host>/ovirt-engine/api/ 用于 RHV。
    3
    仅 VMware:指定您创建的 VDDK 镜像。
    4
    指定供应商 Secret CR 的名称。
  3. 仅限 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
    1
    指定 VMware Provider CR 的名称。
    2
    指定 VMware 主机的受管对象引用 (MOR)。
    3
    指定 VMware 迁移网络的 IP 地址。
  4. 创建 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
    1
    允许的值是 podmultus
    2
    您可以使用 id name 参数来指定源网络。
    3
    指定 VMware 网络 MOR 或 RHV 网络 UUID。
    4
    为每个额外 OpenShift Virtualization 网络指定网络附加定义。
    5
    指定 OpenShift Virtualization 网络附加定义的命名空间。
  5. 创建 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
    1
    允许的值有 ReadWriteOnceReadWriteMany
    2
    指定 VMware 数据存储 MOR 或 RHV 存储域 UUID,例如 f2737930-b567-451a-9ceb-2887f6207009
  6. 可选:在 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
    1
    您可以使用默认 hook-runner 镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。
    2
    可选: Base64 编码的 Ansible playbook。如果指定 playbook,image 必须是 hook-runner
  7. 为迁移创建 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)。
  8. 创建运行 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
    1
    指定 Migration CR 的名称。
    2
    指定正在运行的 Plan CR 的名称。Migration CR 为每个迁移的虚拟机创建一个 VirtualMachine CR。
    3
    可选:指定 ISO 8601 格式的大约带有 UTC 时间偏移的时间,例如 2021-04-04T01:23:45.678+09:00

    您可以将多个 Migration CR 与一个 Plan CR 关联。如果迁移没有完成,您可以在不更改 Plan CR 的情况下创建新的 Migration CR,以迁移剩余的虚拟机。

  9. 检索 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 的名称。

取消单个虚拟机的迁移

  1. 将独立虚拟机添加到 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)。

  2. 检索 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."
    }
}

1
每个验证规则都在软件包中定义。软件包命名空间是 io.konveyor.forklift.vmware(VMware)和 io.konveyor.forklift.ovirt(Red Hat Virtualization)。
2
查询参数基于 Validation 服务 JSON 的 input 键。

6.2.2. 检查默认验证规则

在创建自定义规则前,您必须检查 Validation 服务的默认规则,以确保您不会创建重新定义现有默认值的规则。

示例:如果默认规则包含行 default valid_input = false,并且您创建一个包含行 default valid_input = true,则 Validation 服务将不会启动。

流程

  1. 连接到 Validation pod 的终端:

    $ oc rsh <validation_pod>
  2. 进入您的供应商的 OPA 策略目录:

    $ cd /usr/share/opa/policies/io/konveyor/forklift/<provider> 1
    1
    指定 vmwareovirt
  3. 搜索默认策略:

    $ grep -R "default" *

6.2.3. 检索库存服务 JSON

您可以通过向虚拟机发送一个 Inventory 服务查询来获取 Inventory 服务 JSON。输出中包含一个 "input" 键,其中包含由 Validation 服务规则查询的清单属性。

您可以根据 "input" 键中的任何属性(如 input.snapshot.kind )创建验证规则。

流程

  1. 为项目检索路由:

    oc get route -n openshift-mtv
  2. 检索 Inventory 服务路由:

    $ oc get route <inventory_service> -n openshift-mtv
  3. 检索访问令牌:

    $ TOKEN=$(oc whoami -t)
  4. 触发 HTTP GET 请求(例如,使用 Curl):

    $ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers -k
  5. 检索供应商的 UUID

    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/<provider> -k 1
    1
    供应商允许的值有 vsphereovirt
  6. 检索供应商的虚拟机:

    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/<provider>/<UUID>/vms -k
  7. 检索虚拟机的详情:

    $ 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`

流程

  1. 根据以下示例创建配置映射 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
    1
    指定供应商软件包名称。允许的值是 VMware 的 io.konveyor.forklift.vmwareio.konveyor.forklift.ovirt
    2
    指定 concerns 名称和 Rego 查询。
    3
    指定 concerns 名称和 flag 参数值。
    4
    允许的值是 Critical, Warning, 和 Information
  2. 通过将 forklift-controller 部署扩展到 0 来停止 Validation pod:

    $ oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
  3. 通过将 forklift-controller 部署扩展到 1 来启动 Validation pod:

    $ oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
  4. 检查 Validation pod 日志,以验证 pod 是否已启动:

    $ oc logs -f <validation_pod>

    如果自定义规则与默认规则冲突,则 Validation pod 将不会启动。

  5. 删除源供应商:

    $ oc delete provider <provider> -n openshift-mtv
  6. 添加源供应商以应用新规则:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <provider>
      namespace: openshift-mtv
    spec:
      type: <provider_type> 1
      url: <api_end_point> 2
      secret:
        name: <secret> 3
        namespace: openshift-mtv
    EOF
    1
    允许的值是 ovirtvsphere
    2
    指定 API 端点 URL。例如 https://<vCenter_host>/sdk 用于 vSphere,或 https://<engine_host>/ovirt-engine/api/ 用于 RHV。
    3
    指定供应商 Secret CR 的名称。

您必须在创建自定义规则后更新规则版本,以便 Inventory 服务检测到更改并验证虚拟机。

6.2.5. 更新清单规则版本

每次更新规则时,您必须更新 inventory 规则版本,以便 Provider Inventory 服务检测到更改并触发 Validation 服务。

规则版本记录在每个供应商的 rules_version.rego 文件中。

流程

  1. 检索当前的规则版本:

    $ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version 1

    输出示例

    {
       "result": {
           "rules_version": 5
       }
    }

  2. 连接到 Validation pod 的终端:

    $ oc rsh <validation_pod>
  3. 更新 /usr/share/opa/policies/io/konveyor/forklift/<provider>/rules_version.rego 文件中的规则版本。
  4. Validation pod 终端注销。
  5. 验证更新的规则版本:

    $ 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。

流程

  1. 在 OCP web 控制台中,点 OperatorsInstalled OperatorsMigration Tookit for Virtualization OperatorSubscription
  2. 将更新频道更改为正确的发行版本。

    请参阅 OpenShift Container Platform 文档中的更改更新频道

  3. 确认 Upgrade statusUp to date 变为 Upgrade available。如果没有,重启 CatalogSource pod:

    1. 记录目录源,如 redhat-operators
    2. 在命令行中检索目录源 pod:

      $ oc get pod -n openshift-marketplace | grep <catalog_source>
    3. 删除 Pod。

      $ oc delete pod -n openshift-marketplace <catalog_source_pod>

      升级状态Up to date 改为 Upgrade available

      如果您在 Subscriptions 选项卡上将 Update approval 设置为 Automatic,则升级会自动启动。

  4. 如果您在 Subscriptions 标签页中将 Update approval 设置为 Manual,请批准升级。

    请参阅 OpenShift Container Platform 文档中的手动批准待处理的升级

  5. 登录 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

  6. 如果您将 VMware 源供应商添加到 MTV 2.2,升级到 MTV 2.3 将任何 VMware 供应商的状态更改为 Critical。要解决这个问题,请添加 VDDK init 镜像并验证 VMware 供应商的证书来编辑虚拟机。如需更多信息,请参阅添加 VMSphere 源供应商
  7. 如果您在 MTV 2.2 中的 OpenShift Container Platform 目的地供应商中映射到 NFS,则升级到 MTV 2.3 会导致 NFS 映射无效。要解决这个问题,请编辑 NFS 存储配置集中的 AccessModesVolumeMode 参数。如需更多信息,请参阅自定义存储配置集

第 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 权限的用户身份登录。

流程

  1. HomeProjects
  2. 找到 openshift-mtv 项目。
  3. 在项目右侧,从 Options 菜单 kebab 中选择 Delete Project
  4. Delete Project 窗格中,输入项目名称,再点 Delete
  5. AdministrationCustomResourceDefinitions
  6. Search 字段中输入 forkliftforklift.konveyor.io 组中查找 CRD。
  7. 在每个 CRD 右侧,从 Options 菜单 kebab 中选择 Delete CustomResourceDefinition

8.2. 使用命令行界面卸载 MTV

您可以通过删除 openshift-mtv 项目和 forklift.konveyor.io 自定义资源定义(CRD)从命令行界面(CLI)卸载 Migration Toolkit for Virtualization(MTV)。

先决条件

  • 您必须以具有 cluster-admin 权限的用户身份登录。

流程

  1. 删除项目:

    $ oc delete project openshift-mtv
  2. 删除 CRD:

    $ oc get crd -o name | grep 'forklift' | xargs oc delete
  3. 删除 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 命令中指定不存在的资源,则不会创建存档文件。

先决条件

收集日志和 CR 信息

  1. 进入存储 must-gather 数据的目录。
  2. 运行 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。您可以将此文件上传到红帽客户门户网站中的支持问题单中。

  3. 可选:使用以下选项运行 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
      1 1 1
      指定在 Plan CR 中显示的 VM ID

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 ControllerContainerized Data Import(CDI)Controller 服务处理大多数技术操作。

9.3.2. 高级别迁移工作流

高级别工作流显示用户视图的迁移过程:

  1. 您可以创建一个源供应商、目标供应商、网络映射和存储映射。
  2. 您可以创建一个包含以下资源的 Plan 自定义资源(CR):

    • 源供应商
    • 目标供应商,如果目标集群上没有安装 MTV
    • 网络映射
    • 存储映射
    • 一个或多个虚拟机 (VM)
  3. 您可以通过创建一个引用 Plan CR 的 Migration CR 来运行迁移计划。

    如果出于某种原因无法迁移所有虚拟机,则可以为同一 Plan CR 创建多个 Migration CR,直到虚拟机迁移为止。

  4. 对于 Plan CR 中的每个虚拟机,Migration Controller 服务会创建一个 VirtualMachine CR,并在 Migration CR 中记录虚拟机迁移进度。

    当迁移所有虚拟机时,Migration Controller 服务会将 Plan CR 的状态更新为 Completed。每个源虚拟机的电源状态在迁移后会被维护。

9.3.3. 详细的迁移工作流

您可以使用详细的迁移工作流来排除迁移失败的问题。

工作流描述了以下步骤:

  1. 当您创建一个 Migration 自定义资源(CR)来运行迁移计划时,Migration Controller 服务为每个源虚拟机(VM)和 DataVolume CR 创建一个 VirtualMachine CR。

    对于每个 VM 磁盘:

  2. Containerized Data Importer(CDI) 控制器服务根据 DataVolume CR 中指定的参数创建一个持久性卷声明 (PVC)。


  3. 如果 StorageClass 有动态置备程序,则 StorageClass 置备程序会动态置备持久性卷(PV)。
  4. CDI Controller 服务创建一个 importer pod。
  5. importer pod 将虚拟机磁盘流传输到 PV。

    虚拟机磁盘传输后:

  6. Migration Controller 服务创建一个 conversion pod,并附加了 PVC。

    conversion pod 运行 virt-v2v,它会在目标虚拟机的 PVC 中安装和配置设备驱动程序。

  7. 当目标虚拟机开机时,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-4mx85plan2j-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) 的日志和信息。

流程

  1. 在 web 控制台中点 Migration Plan
  2. 点迁移计划名称旁的 Get logs
  3. Get logs 窗口中点 Get logs

    日志会被收集。此时会显示 Log collection complete 信息。

  4. Download logs 下载存档文件。
  5. 要下载迁移的虚拟机的日志,请点迁移计划名称,然后点 VM 的 Get logs

9.4.3. 使用命令行界面访问日志和自定义资源信息

您可以使用 must-gather 工具从命令行界面访问自定义资源(CR)的日志和信息。您必须将 must-gather 数据文件附加到所有客户问题单。

您可以使用过滤选项收集特定命名空间、完成、失败或取消迁移的虚拟机(VM)的数据。

注意

如果您在过滤的 must-gather 命令中指定不存在的资源,则不会创建存档文件。

先决条件

流程

  1. 进入要存储 must-gather 数据的目录。
  2. 运行 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。您可以将此文件上传到红帽客户门户网站中的支持问题单中。

  3. 可选:使用以下选项运行 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 中。

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.