11.3. 从 VMware vSphere 源供应商迁移


您可以使用命令行界面(CLI)从 VMware vSphere 源供应商迁移。

流程

  1. 为源供应商凭证创建 Secret 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret>
      namespace: <namespace>
      ownerReferences: 
    1
    
        - apiVersion: forklift.konveyor.io/v1beta1
          kind: Provider
          name: <provider_name>
          uid: <provider_uid>
      labels:
        createdForProviderType: vsphere
        createdForResourceType: providers
    type: Opaque
    stringData:
      user: <user> 
    2
    
      password: <password> 
    3
    
      insecureSkipVerify: <"true"/"false"> 
    4
    
      cacert: | 
    5
    
        <ca_certificate>
      url: <api_end_point> 
    6
    
    EOF
    1
    ownerReferences 部分是可选的。
    2
    指定 vCenter 用户或 ESX/ESXi 用户。
    3
    指定 vCenter 用户或 ESX/ESXi 用户的密码。
    4
    指定 "true" 以跳过证书验证,并指定 "false" 来验证证书。如果没有指定,则默认为 "false "。跳过证书验证会进行不安全的迁移,然后不需要证书。不安全的迁移意味着传输的数据通过安全连接发送,并可能会公开敏感数据。
    5
    如果没有设置此字段并禁用 跳过证书验证 时,MTV 会尝试使用系统 CA。
    6
    指定 vCenter 的 API 端点 URL 或 ESX/ESXi,例如 https://<vCenter_host>/sdk
  1. 为源供应商创建 Provider 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: vsphere
      url: <api_end_point> 
    1
    
      settings:
        vddkInitImage: <VDDK_image> 
    2
    
        sdkEndpoint: vcenter 
    3
    
      secret:
        name: <secret> 
    4
    
        namespace: <namespace>
    EOF
    1
    指定 API 端点的 URL,例如 https://<vCenter_host>/sdk
    2
    可选,但强烈建议创建一个 VDDK 镜像来加快迁移。按照 OpenShift 文档指定您创建的 VDDK 镜像。
    3
    选项: vcenteresxi
    4
    指定供应商 Secret CR 的名称。
  1. 创建 主机清单

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Host
    metadata:
      name: <vmware_host>
      namespace: <namespace>
    spec:
      provider:
        namespace: <namespace>
        name: <source_provider> 
    1
    
      id: <source_host_mor> 
    2
    
      ipAddress: <source_network_ip> 
    3
    
    EOF
    1
    指定 VMware vSphere Provider CR 的名称。
    2
    指定 VMware vSphere 主机的 Managed Object Reference (moRef)。要检索 moRef,请参阅 检索 VMware vSphere moRef
    3
    指定 VMware vSphere 迁移网络的 IP 地址。
  1. 创建 NetworkMap 清单来映射源和目标网络:

    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: NetworkMap
    metadata:
      name: <network_map>
      namespace: <namespace>
    spec:
      map:
        - destination:
            name: <network_name>
            type: pod 
    1
    
          source: 
    2
    
            id: <source_network_id>
            name: <source_network_name>
        - destination:
            name: <network_attachment_definition> 
    3
    
            namespace: <network_attachment_definition_namespace> 
    4
    
            type: multus
          source:
            id: <source_network_id>
            name: <source_network_name>
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值是 podmultus
    2
    您可以使用 idname 参数来指定源网络。对于 id,指定 VMware vSphere 网络受管对象参考(moRef)。要检索 moRef,请参阅 检索 VMware vSphere moRef
    3
    为每个额外 OpenShift Virtualization 网络指定网络附加定义。
    4
    仅在 类型 multus 时才需要。指定 OpenShift Virtualization 网络附加定义的命名空间。
  1. 创建 StorageMap 清单来映射源和目标存储:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: StorageMap
    metadata:
      name: <storage_map>
      namespace: <namespace>
    spec:
      map:
        - destination:
            storageClass: <storage_class>
            accessMode: <access_mode> 
    1
    
          source:
            id: <source_datastore> 
    2
    
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 ReadWriteOnceReadWriteMany
    2
    指定 VMware vSphere 数据存储 moRef。例如,f2737930-b567-451a-9ceb-2887f6207009。要检索 moRef,请参阅 检索 VMware vSphere moRef
  2. 可选:在 Plan CR 中指定的阶段创建一个 Hook 清单以在虚拟机中运行自定义代码:

    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Hook
    metadata:
      name: <hook>
      namespace: <namespace>
    spec:
      image: quay.io/konveyor/hook-runner
      serviceAccount:<service account> 
    1
    
      playbook: |
        LS0tCi0gbm... 
    2
    
    EOF
    1
    (可选)Red Hat OpenShift 服务帐户。如果要操作集群的任何资源,则必须提供 serviceAccount
    2
    base64 编码的 Ansible Playbook.如果指定了 playbook,镜像 必须包含 ansible-runner
    注意

    您可以使用默认 hook-runner 镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。

  1. 为迁移创建 Plan 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
    metadata:
      name: <plan> 
    1
    
      namespace: <namespace>
    spec:
      warm: false 
    2
    
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
      map: 
    3
    
        network: 
    4
    
          name: <network_map> 
    5
    
          namespace: <namespace>
        storage: 
    6
    
          name: <storage_map> 
    7
    
          namespace: <namespace>
      preserveStaticIPs: 
    8
    
      targetNamespace: <target_namespace>
      vms: 
    9
    
        - id: <source_vm> 
    10
    
        - name: <source_vm>
          hooks: 
    11
    
            - hook:
                namespace: <namespace>
                name: <hook> 
    12
    
              step: <step> 
    13
    
    EOF
    1
    指定 Plan CR 的名称。
    2
    指定迁移是 warm - true - 或 cold - false。如果您指定了 warm 迁移,且没有为 Migration 清单中的 cutover 参数指定一个值,则只有 precopy 阶段将运行。
    3
    每个计划仅指定一个网络映射和一个存储映射。
    4
    指定一个网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    5
    指定 NetworkMap CR 的名称。
    6
    指定一个存储映射,即使要迁移的虚拟机没有使用磁盘镜像分配。在这种情况下,映射可以为空。
    7
    指定 StorageMap CR 的名称。
    8
    默认情况下,虚拟网络接口控制器(vNIC)在迁移过程中会改变。因此,使用链接到客户端虚拟机中接口名称的静态 IP 的 vNIC 会丢失其 IP。要避免这种情况,请将 preserveStaticIPs 设置为 true。MTV 对缺少 vNIC 属性的任何虚拟机发出警告消息。要检索任何缺少的 vNIC 属性,请在 vSphere 中运行这些虚拟机,以便向 MTV 报告 vNIC 属性。
    9
    您可以使用 idname 参数指定源虚拟机。
    10
    指定 VMware vSphere VM moRef。要检索 moRef,请参阅 检索 VMware vSphere moRef
    11
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    12
    指定 Hook CR 的名称。
    13
    在迁移完成后,允许的值是 PreHook、在迁移计划启动前或 PostHook
    重要

    当您将 VMware 7 虚拟机迁移到使用 CentOS 7.9 的 OpenShift 4.13+ 平台时,网络接口的名称会改变,虚拟机的静态 IP 配置无法正常工作。

  2. 创建运行 Plan CR 的 Migration 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <name_of_migration_cr>
      namespace: <namespace>
    spec:
      plan:
        name: <name_of_plan_cr>
        namespace: <namespace>
      cutover: <optional_cutover_time>
    EOF
    注意

    如果您指定了一个截止时间,请使用 ISO 8601 格式以及 UTC 时间偏移,例如 2024-04-04T01:23:45.678+09:00

重要

forklift-controller 存在一个无法协调迁移计划的问题,然后返回一个 HTTP 500 错误。当您只在虚拟机上指定用户权限时,会导致此问题。

在 MTV 中,您需要在数据中心级别添加权限,其中包括虚拟机使用的存储、网络、交换机等。然后您必须将权限传播到子元素。

如果您不想添加这个级别的权限,您必须手动将权限添加到虚拟机主机上的每个对象。

11.3.1. 检索 VMware vSphere moRef

当您使用命令行使用 Migration Toolkit for Virtualization (MTV)迁移带有 VMware vSphere 源供应商的虚拟机时,您需要了解 vSphere 中特定实体的受管对象引用(moRef),如数据存储、网络和虚拟机。

您可以从 Inventory 服务检索一个或多个 vSphere 实体的 moRef。然后,您可以使用每个 moRef 作为检索另一个实体的 moRef 的参考。

流程

  1. 为项目检索路由:

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

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

    $ TOKEN=$(oc whoami -t)
  4. 检索 VMware vSphere 供应商的 moRef :

    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/vsphere -k
  5. 检索 VMware vSphere 源供应商的数据存储:

    $ curl -H "Authorization: Bearer $TOKEN"  https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k

    输出示例

    [
      {
        "id": "datastore-11",
        "parent": {
          "kind": "Folder",
          "id": "group-s5"
        },
        "path": "/Datacenter/datastore/v2v_general_porpuse_ISCSI_DC",
        "revision": 46,
        "name": "v2v_general_porpuse_ISCSI_DC",
        "selfLink": "providers/vsphere/01278af6-e1e4-4799-b01b-d5ccc8dd0201/datastores/datastore-11"
      },
      {
        "id": "datastore-730",
        "parent": {
          "kind": "Folder",
          "id": "group-s5"
        },
        "path": "/Datacenter/datastore/f01-h27-640-SSD_2",
        "revision": 46,
        "name": "f01-h27-640-SSD_2",
        "selfLink": "providers/vsphere/01278af6-e1e4-4799-b01b-d5ccc8dd0201/datastores/datastore-730"
      },
     ...

在本例中,数据存储 v2v_general_porpuse_ISCSI_DC 的 moRef 是 datastore-11,而数据存储 f01-h27-640-SSD_2 的 moRef 是 datastore-730

11.3.2. 使用命令行界面取消迁移

您可以使用命令行界面(CLI)在迁移过程中取消整个迁移或特定虚拟机的迁移。

取消整个迁移

  • 删除 Migration CR:

    $ oc delete migration <migration> -n <namespace> 
    1
    1
    指定 Migration CR 的名称。

取消特定虚拟机的迁移

  1. 将特定的虚拟机添加到 Migration 清单的 spec.cancel 块中:

    取消两个虚拟机的迁移的 YAML 示例

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <migration>
      namespace: <namespace>
    ...
    spec:
      cancel:
      - id: vm-102 
    1
    
      - id: vm-203
      - name: rhel8-vm
    EOF

    1
    您可以使用 id 键或 name 键指定虚拟机。

    id 键的值是受管对象的引用(VMware VM),或 VM UUID(RHV VM)。

  2. 检索 Migration CR 以监控剩余的虚拟机的进度:

    $ oc get migration/<migration> -n <namespace> -o yaml
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部