11.3. VMware vSphere 移行元プロバイダーからの移行
コマンドラインインターフェイス (CLI) を使用して、VMware vSphere ソースプロバイダーから移行できます。
ウイルス対策ソフトウェアが原因で移行が失敗する可能性があります。移行を開始する前に、ソース仮想マシンからこのようなソフトウェアを削除することを強く推奨します。
MTV は、VMware Non-Volatile Memory Express (NVMe) ディスクの移行をサポートしていません。
共有ディスクを持つ仮想マシンを移行する場合は、共有ディスクを持つ仮想マシンの移行 を参照してください。
手順
移行元プロバイダーの認証情報の
Secret
マニフェストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret> namespace: <namespace> ownerReferences: - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider name: <provider_name> uid: <provider_uid> labels: createdForProviderType: vsphere createdForResourceType: providers type: Opaque stringData: user: <user> password: <password> insecureSkipVerify: <"true"/"false"> cacert: | <ca_certificate> url: <api_end_point> EOF
$ 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
- このフィールドが設定されておらず、skip certificate verification が無効になっている場合、MTV はシステム CA の使用を試みます。
- 6
- vCenter または ESX/ESXi の API エンドポイント URL を指定します (例:
https://<vCenter_host>/sdk
)。
移行元プロバイダーの
Provider
マニフェストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> settings: vddkInitImage: <VDDK_image> sdkEndpoint: vcenter secret: name: <secret> namespace: <namespace> EOF
$ 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
Host
マニフェストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> id: <source_host_mor> ipAddress: <source_network_ip> 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
Provider
CR の名前を指定します。 - 2
- VMware vSphere ホストの Managed Object Reference (moRef) を指定します。moRef を取得するには、VMware vSphere moRef の取得 を参照してください。
- 3
- VMware vSphere 移行ネットワークの IP アドレスを指定します。
移行元ネットワークと移行先ネットワークをマッピングする
NetworkMap
マニフェストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 source: id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> 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
$ 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
- 許可される値は
pod
、multus
、およびignore
です。この移行では、このネットワークに仮想マシンをアタッチするのを避けるために、ignored
を使用します。 - 2
- ソースネットワークを指定するには、
id
またはname
パラメーターのいずれかを使用できます。id
には、VMware vSphere ネットワーク Managed Object Reference (moRef) を指定します。moRef を取得するには、VMware vSphere moRef の取得 を参照してください。 - 3
- 追加の OpenShift Virtualization ネットワークごとにネットワークアタッチメント定義を指定します。
- 4
type
がmultus
の場合に限り必要です。OpenShift Virtualization のネットワークアタッチメント定義の namespace を指定します。
StorageMap
マニフェストを作成し、移行元ストレージと移行先ストレージをマッピングします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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> source: id: <source_datastore> provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
$ 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 の取得 を参照してください。
オプション:
Hook
マニフェストを作成し、Plan
CR で指定されたフェーズ中に仮想マシンでカスタムコードを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/kubev2v/hook-runner serviceAccount:<service account> playbook: | LS0tCi0gbm... EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/kubev2v/hook-runner serviceAccount:<service account>
1 playbook: | LS0tCi0gbm...
2 EOF
注記デフォルトの
hook-runner
イメージを使用するか、カスタムイメージを指定することができます。カスタムイメージを指定する場合は、Playbook を指定する必要はありません。
次のコマンドを入力して、MTV 移行に使用される転送ネットワークのネットワーク接続定義 (NAD) を作成します。
この定義を使用して、Dynamic Host Configuration Protocol (DHCP) から、または静的に、インターフェイスの IP アドレスを設定します。
IP アドレスを設定すると、インターフェイスが設定されたゲートウェイに到達できるようになります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit>
$ oc edit NetworkAttachmentDefinitions <name_of_the_NAD_to_edit> apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: <name_of_transfer_network> namespace: <namespace> annotations: forklift.konveyor.io/route: <IP_address>
移行の
Plan
マニフェストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> spec: warm: false provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> map: network: name: <network_map> namespace: <namespace> storage: name: <storage_map> namespace: <namespace> preserveStaticIPs: networkNameTemplate: <network_interface_template> pvcNameTemplate: <pvc_name_template> pvcNameTemplateUseGenerateName: true targetNamespace: <target_namespace> volumeNameTemplate: <volume_name_template> vms: - id: <source_vm1> - name: <source_vm2> networkNameTemplate: <network_interface_template_for_this_vm> pvcNameTemplate: <pvc_name_template_for_this_vm> volumeNameTemplate: <volume_name_template_for_this_vm> targetName: <target_name> hooks: - hook: namespace: <namespace> name: <hook> step: <step> EOF
$ 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 networkNameTemplate: <network_interface_template>
9 pvcNameTemplate: <pvc_name_template>
10 pvcNameTemplateUseGenerateName: true
11 targetNamespace: <target_namespace> volumeNameTemplate: <volume_name_template>
12 vms:
13 - id: <source_vm1>
14 - name: <source_vm2> networkNameTemplate: <network_interface_template_for_this_vm>
15 pvcNameTemplate: <pvc_name_template_for_this_vm>
16 volumeNameTemplate: <volume_name_template_for_this_vm>
17 targetName: <target_name>
18 hooks:
19 - hook: namespace: <namespace> name: <hook>
20 step: <step>
21 EOF
- 1
Plan
CR の名前を指定します。- 2
- 移行がウォーム (
true
) かコールド (false
) かを指定します。Migration
マニフェストでcutover
パラメーターの値を指定せずにウォーム移行を指定すると、プレコピーステージのみが実行します。 - 3
- プランごとにネットワークマップとストレージマップを 1 つだけ指定します。
- 4
- 移行する仮想マシンがネットワークに割り当てられていない場合でも、ネットワークマッピングを指定します。この場合、マッピングは空にできます。
- 5
NetworkMap
CR の名前を指定します。- 6
- 移行する仮想マシンにディスクイメージが割り当てられていない場合でも、ストレージマッピングを指定します。この場合、マッピングは空にできます。
- 7
StorageMap
CR の名前を指定します。- 8
- デフォルトでは、仮想ネットワークインターフェイスコントローラー (vNIC) は移行プロセス中に変更されます。その結果、ゲスト仮想マシンのインターフェイス名にリンクされた静的 IP アドレスで設定された vNIC は、IP アドレスを失います。
これを回避するには、preserveStaticIPs
をtrue
に設定します。MTV は、vNIC プロパティーが欠落している仮想マシンに関する警告メッセージを発行します。不足している vNIC プロパティーを取得するには、vSphere で該当する仮想マシンを実行して、vNIC プロパティーが MTV に報告されるようにします。 - 9
- オプション。計画に含まれる仮想マシンのネットワークインターフェイス名のテンプレートを指定します。テンプレートは Go テンプレート構文に準拠し、次の変数にアクセスできます。
-
.NetworkName
: ターゲットネットワークがmultus
の場合は、Multus ネットワーク接続定義の名前を追加します。それ以外の場合は、この変数を空のままにします。 -
.NetworkNamespace
: ターゲットネットワークがmultus
の場合、Multus ネットワーク接続定義が配置されている namespace を追加します。 -
.NetworkType
: ネットワークタイプを指定します。オプション:multus
またはpod
。 .NetworkIndex
: ネットワークインターフェイスの連続インデックス (0-based)。例
-
"net-{{.NetworkIndex}}"
{{if eq .NetworkType "pod"}}pod{{else}}multus-{{.NetworkIndex}}{{end}}"
変数名は 63 文字以内でなければなりません。このルールは、ネットワーク名ネットワークテンプレート、PVC 名テンプレート、仮想マシン名テンプレート、およびボリューム名テンプレートに適用されます。
-
- 10
- オプション。計画の永続ボリューム要求 (PVC) 名のテンプレートを指定します。テンプレートは Go テンプレート構文に準拠し、次の変数にアクセスできます。
-
.VmName
: 仮想マシンの名前。 -
.PlanName
: 移行計画の名前。 -
.DiskIndex
: ディスクの初期ボリュームインデックス。 -
.RootDiskIndex
: ルートディスクのインデックス。 .Shared
: オプション: 共有ボリュームの場合はtrue
、非共有ボリュームの場合はfalse
。例
-
"{{.VmName}}-disk-{{.DiskIndex}}"
-
"{{if eq .DiskIndex .RootDiskIndex}}root{{else}}data{{end}}-{{.DiskIndex}}"
-
"{{if .Shared}}shared-{{end}}{{.VmName}}-{{.DiskIndex}}"
-
- 11
- オプション:
-
true
に設定すると、すべての PVC の名前が一意になるように、MTV によってランダムに生成された 1 つ以上の英数字が PVC の名前に追加されます。 false
に設定すると、pvcNameTemplate
を指定しても、そのような文字が MTV によって PVC の名前に追加されることはありません。警告pvcNameTemplateUseGenerateName
をfalse
に設定すると、生成された PVC 名が一意でなくなり、競合が発生する可能性があります。
-
- 12
- オプション: 計画に含まれる仮想マシンのボリュームインターフェイス名のテンプレートを指定します。テンプレートは Go テンプレート構文に準拠し、次の変数にアクセスできます。
-
.PVCName
: このボリュームを使用して仮想マシンにマウントされた PVC の名前。 .VolumeIndex
: ボリュームインターフェイスの連続インデックス (0-based)。例
-
"disk-{{.VolumeIndex}}"
-
"pvc-{{.PVCName}}"
-
- 13
id
パラメーターまたはname
パラメーターのいずれかを使用して、移行元の仮想マシンを指定できます。- 14
- VMware vSphere 仮想マシンの moRef を指定します。moRef を取得するには、VMware vSphere moRef の取得 を参照してください。
- 15
- オプション: 特定の仮想マシンのネットワークインターフェイス名を指定します。
spec:networkNameTemplate
で設定された値をオーバーライドします。変数と例は callout 9 と同じです。 - 16
- オプション: 特定の仮想マシンの PVC 名を指定します。
spec:pvcNameTemplate
で設定された値をオーバーライドします。変数と例は callout 10 と同じです。 - 17
- オプション: 特定の仮想マシンのボリューム名を指定します。
spec:volumeNameTemplate
で設定された値をオーバーライドします。変数と例は callout 12 と同じです。 - 18
- オプション: MTV はターゲット仮想マシンの名前を自動的に生成します。この名前は、このパラメーターを使用して新しい名前を入力すると、オーバーライドできます。入力する名前は一意であり、有効な Kubernetes サブドメインである必要があります。そうでない場合、移行が自動的に失敗します。
- 19
- オプション: 仮想マシンに最大 2 つのフックを指定します。各フックは個別の移行ステップで実行する必要があります。
- 20
Hook
CR の名前を指定します。- 21
- 使用できる値は、移行計画が開始される前の
PreHook
、または移行が完了した後のPostHook
です。重要VMware 7 仮想マシンを CentOS 7.9 を使用する OpenShift 4.13+ プラットフォームに移行すると、ネットワークインターフェイスの名前が変更され、仮想マシンの静的 IP 設定が機能しなくなります。
Plan
CR を実行するためのMigration
マニフェストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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
注記カットオーバー時間を指定する場合は、UTC 時間オフセットを含む ISO 8601 形式を使用します (例:
2024-04-04T01:23:45.678+09:00)
。
forklift-controller
が移行計画の調整に常に失敗し、その後 HTTP 500 エラーを返すという問題があります。この問題は、仮想マシン (VM) 上でのみユーザー権限を指定した場合に発生します。
MTV では、仮想マシンで使用されるストレージ、ネットワーク、スイッチなどを含むデータセンターレベルで権限を追加する必要があります。次に、権限を子要素に伝播する必要があります。
このレベルの権限を追加しない場合は、必要な仮想マシンホスト上の各オブジェクトに権限を手動で追加する必要があります。
11.3.1. VMware vSphere moRef の取得
コマンドラインインターフェイスから Migration Toolkit for Virtualization (MTV) を使用して VMware vSphere ソースプロバイダーで仮想マシンを移行する場合は、データストア、ネットワーク、仮想マシンなど、vSphere 内の特定のエンティティーのマネージドオブジェクト参照 (moRef) を知っておく必要があります。
インベントリーサービスから 1 つ以上の vSphere エンティティーの moRef を取得できます。その後、各 moRef を別のエンティティーの moRef を取得するための参照として使用できます。
手順
プロジェクトのルートを取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route -n openshift-mtv
oc get route -n openshift-mtv
Inventory
サービスルートを取得します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get route <inventory_service> -n openshift-mtv
$ oc get route <inventory_service> -n openshift-mtv
アクセストークンを取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TOKEN=$(oc whoami -t)
$ TOKEN=$(oc whoami -t)
VMware vSphere プロバイダーの moRef を取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere -k
VMware vSphere ソースプロバイダーのデータストアを取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/vsphere/<provider id>/datastores/ -k
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow [ { "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" }, ...
[ { "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.3. コマンドラインインターフェイスからの移行のキャンセル
移行の進行中に、コマンドラインインターフェイス (CLI) を使用して、移行全体または特定の仮想マシン (VM) の移行をキャンセルできます。
移行全体のキャンセル
Migration
CR を削除します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete migration <migration> -n <namespace>
$ oc delete migration <migration> -n <namespace>
1 - 1
Migration
CR の名前を指定します。
特定の仮想マシンの移行のキャンセル
Migration
マニフェストのspec.cancel
ブロックに特定の仮想マシンを追加します。2 つの仮想マシンの移行をキャンセルするための YAML の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> namespace: <namespace> ... spec: cancel: - id: vm-102 - id: vm-203 name: rhel8-vm EOF
$ 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 仮想マシンの場合は Managed Object Reference、RHV 仮想マシンの場合は VM UUID です。残りの仮想マシンの進捗をモニタリングするための
Migration
CR を取得します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get migration/<migration> -n <namespace> -o yaml
$ oc get migration/<migration> -n <namespace> -o yaml