搜索

5.2. 迁移虚拟机

download PDF

您可以通过创建 MTV 自定义资源(CR)从命令行(CLI)迁移虚拟机。CR 和迁移步骤因源供应商而异。

重要

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

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

要迁移到与迁移计划不同的 OpenShift 集群,您必须具有具有 cluster-admin 权限的 OpenShift Virtualization 服务帐户令牌。

5.2.1. 从 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/ESX,例如 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)。
    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
    您可以使用 id name 参数来指定源网络。对于 id,指定 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
  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
      playbook: |
        LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv
        YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s
        IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh
        cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr
        bG9hZAoK
    EOF

    其中:

    Playbook 指的是一个可选的 Base64 编码的 Ansible playbook。如果指定 playbook,image 必须是 hook-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>
      targetNamespace: <target_namespace>
      vms: 8
        - id: <source_vm> 9
        - name: <source_vm>
          hooks: 10
            - hook:
                namespace: <namespace>
                name: <hook> 11
              step: <step> 12
    EOF
    1
    指定 Plan CR 的名称。
    2
    指定迁移是 warm - true - 或 cold - false。如果您指定了 warm 迁移,且没有为 Migration 清单中的 cutover 参数指定一个值,则只有 precopy 阶段将运行。
    3
    每个计划仅指定一个网络映射和一个存储映射。
    4
    指定网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    5
    指定 NetworkMap CR 的名称。
    6
    即使要迁移的虚拟机没有使用磁盘镜像分配,请指定存储映射。在这种情况下,映射可以为空。
    7
    指定 StorageMap CR 的名称。
    8
    您可以使用 id name 参数来指定源虚拟机。
    9
    指定 VMware vSphere VM MoRef。
    10
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    11
    指定 Hook CR 的名称。
    12
    迁移完成后,允许的值是 PreHook,在迁移计划启动或 PostHook 之前。
  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

5.2.2. 从 Red Hat Virtualization 源供应商迁移

您可以使用 CLI 从 Red Hat Virtualization (RHV)源供应商迁移。

先决条件

如果您要迁移使用直接 LUN 磁盘的虚拟机,请确保虚拟机在 OpenShift Virtualization 目标集群中的节点可以访问后端存储。

注意
  • 与从源供应商 复制到目标 供应商的磁盘镜像不同,LUN会从 源供应商中的 虚拟机分离,然后附加到目标供应商中创建的虚拟机(VM)。
  • 如果需要回退到源供应商,则 LUN 不会在迁移过程中从源供应商中删除。但是,在将 LUN 重新附加到源供应商中的虚拟机之前,请确保目标环境中的虚拟机不会同时使用 LUN,这可能会导致数据崩溃。

流程

  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: ovirt
        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
    指定 RHV Manager 用户。
    3
    指定用户密码。
    4
    指定 "true" 来跳过证书验证,指定 "false" 来验证证书。如果没有指定,则默认为 "false "。跳过证书验证会进行不安全的迁移,然后不需要证书。不安全的迁移意味着传输的数据通过不安全的连接发送,并可能会公开敏感数据。
    5
    输入 Manager CA 证书,除非它被第三方证书替代,否则请输入 Manager Apache CA 证书。您可以在 https://<engine_host>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA 中检索 Manager CA 证书。
    6
    指定 API 端点 URL,例如 https://<engine_host>/ovirt-engine/api
  1. 为源供应商创建 Provider 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: ovirt
      url: <api_end_point> 1
      secret:
        name: <secret> 2
        namespace: <namespace>
    EOF
    1
    指定 API 端点的 URL,例如 https://<engine_host>/ovirt-engine/api
    2
    指定供应商 Secret CR 的名称。
  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
    您可以使用 id name 参数来指定源网络。对于 id,指定 RHV 网络通用唯一 ID (UUID)。
    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_storage_domain> 2
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 ReadWriteOnceReadWriteMany
    2
    指定 RHV 存储域 UUID。例如,f2737930-b567-451a-9ceb-2887f6207009
  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
      playbook: |
        LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv
        YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s
        IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh
        cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr
        bG9hZAoK
    EOF

    其中:

    Playbook 指的是一个可选的 Base64 编码的 Ansible playbook。如果指定 playbook,image 必须是 hook-runner

    注意

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

  1. 为迁移创建 Plan 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
    metadata:
      name: <plan> 1
      namespace: <namespace>
      preserveClusterCpuModel: true 2
    spec:
      warm: false 3
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
      map: 4
        network: 5
          name: <network_map> 6
          namespace: <namespace>
        storage: 7
          name: <storage_map> 8
          namespace: <namespace>
      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
    请参见以下备注。
    3
    指定迁移是温迁移还是冷迁移。如果您指定了 warm 迁移,且没有为 Migration 清单中的 cutover 参数指定一个值,则只有 precopy 阶段将运行。
    4
    每个计划仅指定一个网络映射和一个存储映射。
    5
    指定网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    6
    指定 NetworkMap CR 的名称。
    7
    即使要迁移的虚拟机没有使用磁盘镜像分配,请指定存储映射。在这种情况下,映射可以为空。
    8
    指定 StorageMap CR 的名称。
    9
    您可以使用 id name 参数来指定源虚拟机。
    10
    指定 RHV VM UUID。
    11
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    12
    指定 Hook CR 的名称。
    13
    迁移完成后,允许的值是 PreHook,在迁移计划启动或 PostHook 之前。
    注意
    • 如果使用自定义 CPU 模型设置了迁移的机器,它将在目标集群中使用该 CPU 模型设置,而不考虑 preserveClusterCpuModel 的设置。
    • 如果没有使用 自定义 CPU 模型设置迁移的机器:

      • 如果将 preserveClusterCpuModel 设置为 'true',则 MTV 会根据集群的配置在 RHV 中运行时检查虚拟机的 CPU 模型,然后使用该 CPU 模型设置迁移的虚拟机。
      • 如果将 preserveClusterCpuModel 设置为 'false',则 MTV 不会设置 CPU 类型,并使用目标集群的默认 CPU 模型设置虚拟机。
  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

5.2.3. 从 OpenStack 源供应商迁移

您可以使用 CLI 从 OpenStack 源供应商迁移。

流程

  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: openstack
        createdForResourceType: providers
    type: Opaque
    stringData:
      user: <user> 2
      password: <password> 3
      insecureSkipVerify: <"true"/"false"> 4
      domainName: <domain_name>
      projectName: <project_name>
      regionName: <region_name>
      cacert: | 5
        <ca_certificate>
      url: <api_end_point> 6
    EOF
    1
    ownerReferences 部分是可选的。
    2
    指定 OpenStack 用户。
    3
    指定用户 OpenStack 密码。
    4
    指定 "true" 来跳过证书验证,指定 "false" 来验证证书。如果没有指定,则默认为 "false "。跳过证书验证会进行不安全的迁移,然后不需要证书。不安全的迁移意味着传输的数据通过不安全的连接发送,并可能会公开敏感数据。
    5
    如果没有设置此字段 并跳过禁用了证书验证,MTV 会尝试使用系统 CA。
    6
    指定 API 端点 URL,例如 https://<identity_service>/v3
  1. 为源供应商创建 Provider 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: openstack
      url: <api_end_point> 1
      secret:
        name: <secret> 2
        namespace: <namespace>
    EOF
    1
    指定 API 端点的 URL。
    2
    指定供应商 Secret CR 的名称。
  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
    您可以使用 id name 参数来指定源网络。对于 id,指定 OpenStack 网络 UUID。
    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_volume_type> 2
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 ReadWriteOnceReadWriteMany
    2
    指定 OpenStack volume_type UUID。例如,f2737930-b567-451a-9ceb-2887f6207009
  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
      playbook: |
        LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv
        YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s
        IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh
        cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr
        bG9hZAoK
    EOF

    其中:

    Playbook 指的是一个可选的 Base64 编码的 Ansible playbook。如果指定 playbook,image 必须是 hook-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:
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
      map: 2
        network: 3
          name: <network_map> 4
          namespace: <namespace>
        storage: 5
          name: <storage_map> 6
          namespace: <namespace>
      targetNamespace: <target_namespace>
      vms: 7
        - id: <source_vm> 8
        - name: <source_vm>
          hooks: 9
            - hook:
                namespace: <namespace>
                name: <hook> 10
              step: <step> 11
    EOF
    1
    指定 Plan CR 的名称。
    2
    每个计划仅指定一个网络映射和一个存储映射。
    3
    指定网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    4
    指定 NetworkMap CR 的名称。
    5
    指定存储映射,即使要迁移的虚拟机没有使用磁盘镜像分配。在这种情况下,映射可以为空。
    6
    指定 StorageMap CR 的名称。
    7
    您可以使用 id name 参数来指定源虚拟机。
    8
    指定 OpenStack 虚拟机 UUID。
    9
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    10
    指定 Hook CR 的名称。
    11
    迁移完成后,允许的值是 PreHook,在迁移计划启动或 PostHook 之前。
  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

5.2.4. 从开放虚拟设备(OVA)源供应商迁移

您可以使用 CLI 从 VMware vSphere 创建的开放虚拟设备(OVA)文件迁移为源供应商。

流程

  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: ova
        createdForResourceType: providers
    type: Opaque
    stringData:
      url: <nfs_server:/nfs_path> 2
    EOF
    1
    ownerReferences 部分是可选的。
    2
    其中: nfs_server 是创建共享的服务器的 IP 或主机名,nfs_path 是存储 OVA 文件在服务器上的路径。
  1. 为源供应商创建 Provider 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: ova
      url:  <nfs_server:/nfs_path> 1
      secret:
        name: <secret> 2
        namespace: <namespace>
    EOF
    1
    其中: nfs_server 是创建共享的服务器的 IP 或主机名,nfs_path 是存储 OVA 文件在服务器上的路径。
    2
    指定供应商 Secret CR 的名称。
  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:
            id: <source_network_id> 2
        - destination:
            name: <network_attachment_definition> 3
            namespace: <network_attachment_definition_namespace> 4
            type: multus
          source:
            id: <source_network_id>
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值是 podmultus
    2
    指定 OVA 网络通用唯一 ID (UUID)。
    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:
            name:  Dummy storage for source provider <provider_name> 2
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 ReadWriteOnceReadWriteMany
    2
    对于 OVA,StorageMap 只能将单个存储(来自 OVA 的所有磁盘都与之关联)映射到目的地上的存储类。因此,存储在 UI 中被称为 "Dummy storage for source provider <provider_name>"。在 YAML 中,按上面显示的编写短语,没有引号,并将 <provider_name> 替换为供应商的实际名称。
  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
      playbook: |
        LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv
        YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s
        IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh
        cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr
        bG9hZAoK
    EOF

    其中:

    Playbook 指的是一个可选的 Base64 编码的 Ansible playbook。如果指定 playbook,image 必须是 hook-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:
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
      map: 2
        network: 3
          name: <network_map> 4
          namespace: <namespace>
        storage: 5
          name: <storage_map> 6
          namespace: <namespace>
      targetNamespace: <target_namespace>
      vms: 7
        - id: <source_vm> 8
        - name: <source_vm>
          hooks: 9
            - hook:
                namespace: <namespace>
                name: <hook> 10
              step: <step> 11
    EOF
    1
    指定 Plan CR 的名称。
    2
    每个计划仅指定一个网络映射和一个存储映射。
    3
    指定网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    4
    指定 NetworkMap CR 的名称。
    5
    即使要迁移的虚拟机没有使用磁盘镜像分配,请指定存储映射。在这种情况下,映射可以为空。
    6
    指定 StorageMap CR 的名称。
    7
    您可以使用 id name 参数来指定源虚拟机。
    8
    指定 OVA 虚拟机 UUID。
    9
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    10
    指定 Hook CR 的名称。
    11
    迁移完成后,允许的值是 PreHook,在迁移计划启动或 PostHook 之前。
  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

5.2.5. 从 Red Hat OpenShift Virtualization 源供应商迁移

您可以使用 Red Hat OpenShift Virtualization 供应商作为源供应商和目标供应商。

流程

  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: openshift
        createdForResourceType: providers
    type: Opaque
    stringData:
      token: <token> 2
      password: <password> 3
      insecureSkipVerify: <"true"/"false"> 4
      cacert: | 5
        <ca_certificate>
      url: <api_end_point> 6
    EOF
    1
    ownerReferences 部分是可选的。
    2
    为具有 cluster-admin 权限的服务帐户指定令牌。如果 令牌和 url 都留空,则使用本地 OpenShift 集群。
    3
    指定用户密码。
    4
    指定 "true" 来跳过证书验证,指定 "false" 来验证证书。如果没有指定,则默认为 "false "。跳过证书验证会进行不安全的迁移,然后不需要证书。不安全的迁移意味着传输的数据通过不安全的连接发送,并可能会公开敏感数据。
    5
    如果没有设置此字段 并跳过禁用了证书验证,MTV 会尝试使用系统 CA。
    6
    指定 API 服务器端点的 URL。
  1. 为源供应商创建 Provider 清单:

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <source_provider>
      namespace: <namespace>
    spec:
      type: openshift
      url: <api_end_point> 1
      secret:
        name: <secret> 2
        namespace: <namespace>
    EOF
    1
    指定 API 服务器端点的 URL。
    2
    指定供应商 Secret CR 的名称。
  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:
            name: <network_name>
            type: pod
        - destination:
            name: <network_attachment_definition> 2
            namespace: <network_attachment_definition_namespace> 3
            type: multus
          source:
            name: <network_attachment_definition>
            namespace: <network_attachment_definition_namespace>
            type: multus
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值是 podmultus
    2
    为每个额外 OpenShift Virtualization 网络指定网络附加定义。使用 namespace 属性 或构建的名称来指定命名空间: <network_ namespace>/<network_name >。
    3
    仅在 类型为 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:
            name: <storage_class>
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
    EOF
    1
    允许的值有 ReadWriteOnceReadWriteMany
  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
      playbook: |
        LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv
        YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s
        IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh
        cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr
        bG9hZAoK
    EOF

    其中:

    Playbook 指的是一个可选的 Base64 编码的 Ansible playbook。如果指定 playbook,image 必须是 hook-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:
      provider:
        source:
          name: <source_provider>
          namespace: <namespace>
        destination:
          name: <destination_provider>
          namespace: <namespace>
      map: 2
        network: 3
          name: <network_map> 4
          namespace: <namespace>
        storage: 5
          name: <storage_map> 6
          namespace: <namespace>
      targetNamespace: <target_namespace>
      vms:
        - name: <source_vm>
          namespace: <namespace>
          hooks: 7
            - hook:
                namespace: <namespace>
                name: <hook> 8
              step: <step> 9
    EOF
    1
    指定 Plan CR 的名称。
    2
    每个计划仅指定一个网络映射和一个存储映射。
    3
    指定网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
    4
    指定 NetworkMap CR 的名称。
    5
    指定存储映射,即使要迁移的虚拟机没有使用磁盘镜像分配。在这种情况下,映射可以为空。
    6
    指定 StorageMap CR 的名称。
    7
    可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
    8
    指定 Hook CR 的名称。
    9
    迁移完成后,允许的值是 PreHook,在迁移计划启动或 PostHook 之前。
  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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.