11.3. 从 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/ESXi,例如
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: vcenter3 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- 1
- 指定 VMware vSphere
ProviderCR 的名称。 - 2
- 指定 VMware vSphere 主机的 Managed Object Reference (moRef)。要检索 moRef,请参阅 检索 VMware vSphere moRef。
- 3
- 指定 VMware vSphere 迁移网络的 IP 地址。
创建
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: pod1 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
- 允许的值是
pod和multus。 - 2
- 您可以使用
id或name参数来指定源网络。对于id,指定 VMware vSphere 网络受管对象参考(moRef)。要检索 moRef,请参阅 检索 VMware vSphere moRef。 - 3
- 为每个额外 OpenShift Virtualization 网络指定网络附加定义。
- 4
- 仅在
类型multus时才需要。指定 OpenShift Virtualization 网络附加定义的命名空间。
创建
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
- 允许的值有
ReadWriteOnce和ReadWriteMany。 - 2
- 指定 VMware vSphere 数据存储 moRef。例如,
f2737930-b567-451a-9ceb-2887f6207009。要检索 moRef,请参阅 检索 VMware vSphere moRef。
可选:在
PlanCR 中指定的阶段创建一个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注意您可以使用默认
hook-runner镜像或指定自定义镜像。如果指定自定义镜像,则不需要指定 playbook。
为迁移创建
Plan清单:$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan>1 namespace: <namespace> spec: warm: false2 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
- 指定
PlanCR 的名称。 - 2
- 指定迁移是 warm -
true- 或 cold -false。如果您指定了 warm 迁移,且没有为Migration清单中的cutover参数指定一个值,则只有 precopy 阶段将运行。 - 3
- 每个计划仅指定一个网络映射和一个存储映射。
- 4
- 指定一个网络映射,即使要迁移的虚拟机没有分配给网络。在这种情况下,映射可以为空。
- 5
- 指定
NetworkMapCR 的名称。 - 6
- 指定一个存储映射,即使要迁移的虚拟机没有使用磁盘镜像分配。在这种情况下,映射可以为空。
- 7
- 指定
StorageMapCR 的名称。 - 8
- 默认情况下,虚拟网络接口控制器(vNIC)在迁移过程中会改变。因此,使用链接到客户端虚拟机中接口名称的静态 IP 的 vNIC 会丢失其 IP。要避免这种情况,请将
preserveStaticIPs设置为true。MTV 对缺少 vNIC 属性的任何虚拟机发出警告消息。要检索任何缺少的 vNIC 属性,请在 vSphere 中运行这些虚拟机,以便向 MTV 报告 vNIC 属性。 - 9
- 您可以使用
id或name参数指定源虚拟机。 - 10
- 指定 VMware vSphere VM moRef。要检索 moRef,请参阅 检索 VMware vSphere moRef。
- 11
- 可选:为虚拟机指定最多两个 hook。每个 hook 必须在不同的迁移步骤中运行。
- 12
- 指定
HookCR 的名称。 - 13
- 在迁移完成后,允许的值是
PreHook、在迁移计划启动前或PostHook。
重要当您将 VMware 7 虚拟机迁移到使用 CentOS 7.9 的 OpenShift 4.13+ 平台时,网络接口的名称会改变,虚拟机的静态 IP 配置无法正常工作。
创建运行
PlanCR 的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 的参考。
流程
为项目检索路由:
oc get route -n openshift-mtv检索
Inventory服务路由:$ oc get route <inventory_service> -n openshift-mtv检索访问令牌:
$ TOKEN=$(oc whoami -t)检索 VMware vSphere 供应商的 moRef :
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere -k检索 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)在迁移过程中取消整个迁移或特定虚拟机的迁移。
取消整个迁移
删除
MigrationCR:$ oc delete migration <migration> -n <namespace>1 - 1
- 指定
MigrationCR 的名称。
取消特定虚拟机的迁移
将特定的虚拟机添加到
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-1021 - id: vm-203 - name: rhel8-vm EOF- 1
- 您可以使用
id键或name键指定虚拟机。
id键的值是受管对象的引用(VMware VM),或 VM UUID(RHV VM)。检索
MigrationCR 以监控剩余的虚拟机的进度:$ oc get migration/<migration> -n <namespace> -o yaml