5.2. 迁移虚拟机
您可以通过创建 MTV 自定义资源(CR)从命令行(CLI)迁移虚拟机。CR 和迁移步骤因源供应商而异。
您必须为集群范围的 CR 指定一个名称。
您必须为命名空间范围 CR 指定名称和命名空间。
要迁移到与迁移计划不同的 OpenShift 集群,您必须具有具有 cluster-admin
权限的 OpenShift Virtualization 服务帐户令牌。
5.2.1. 从 VMware vSphere 源供应商迁移
您可以使用 CLI 从 VMware vSphere 源供应商迁移。
流程
为源供应商凭证创建
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
。
为源供应商创建
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
创建
主机清单
:$ 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
创建
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
创建
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
可选:在
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。
为迁移创建
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
之前。
创建运行
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,这可能会导致数据崩溃。
流程
为源供应商凭证创建
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
。
为源供应商创建
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
创建
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
创建
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
可选:在
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。
为迁移创建
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 模型设置虚拟机。
-
如果将
创建运行
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 源供应商迁移。
流程
为源供应商凭证创建
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
为源供应商创建
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
创建
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
创建
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
可选:在
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。
为迁移创建
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
之前。
创建运行
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)文件迁移为源供应商。
流程
为源供应商凭证创建
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
为源供应商创建
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
创建
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
创建
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
可选:在
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。
为迁移创建
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
之前。
创建运行
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 供应商作为源供应商和目标供应商。
流程
为源供应商凭证创建
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
为源供应商创建
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
创建
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
创建
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
- 允许的值有
ReadWriteOnce
和ReadWriteMany
。
可选:在
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。
为迁移创建
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
创建运行
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
。