11.3. VMware vSphere 移行元プロバイダーからの移行
コマンドラインインターフェイス (CLI) を使用して、VMware vSphere ソースプロバイダーから移行できます。
ウイルス対策ソフトウェアが原因で移行が失敗する可能性があります。移行を開始する前に、ソース仮想マシンからこのようなソフトウェアを削除することを強く推奨します。
MTV は、VMware Non-Volatile Memory Express (NVMe) ディスクの移行をサポートしていません。
共有ディスクを持つ仮想マシンを移行する場合は、共有ディスクを持つ仮想マシンの移行 を参照してください。
手順
移行元プロバイダーの認証情報の
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
- このフィールドが設定されておらず、skip certificate verification が無効になっている場合、MTV はシステム CA の使用を試みます。
- 6
- vCenter または ESX/ESXi の API エンドポイント URL を指定します (例:
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
Hostマニフェストを作成します。$ 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、および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マニフェストを作成し、移行元ストレージと移行先ストレージをマッピングします。$ 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マニフェストを作成し、PlanCR で指定されたフェーズ中に仮想マシンでカスタムコードを実行します。$ 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 アドレスを設定すると、インターフェイスが設定されたゲートウェイに到達できるようになります。
$ 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マニフェストを作成します。$ 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 networkNameTemplate: <network_interface_template>9 pvcNameTemplate: <pvc_name_template>10 pvcNameTemplateUseGenerateName: true11 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
PlanCR の名前を指定します。- 2
- 移行がウォーム (
true) かコールド (false) かを指定します。Migrationマニフェストでcutoverパラメーターの値を指定せずにウォーム移行を指定すると、プレコピーステージのみが実行します。 - 3
- プランごとにネットワークマップとストレージマップを 1 つだけ指定します。
- 4
- 移行する仮想マシンがネットワークに割り当てられていない場合でも、ネットワークマッピングを指定します。この場合、マッピングは空にできます。
- 5
NetworkMapCR の名前を指定します。- 6
- 移行する仮想マシンにディスクイメージが割り当てられていない場合でも、ストレージマッピングを指定します。この場合、マッピングは空にできます。
- 7
StorageMapCR の名前を指定します。- 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
HookCR の名前を指定します。- 21
- 使用できる値は、移行計画が開始される前の
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注記カットオーバー時間を指定する場合は、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 を取得するための参照として使用できます。
手順
プロジェクトのルートを取得します。
oc get route -n openshift-mtvInventoryサービスルートを取得します。$ 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 -kVMware 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.3. コマンドラインインターフェイスからの移行のキャンセル リンクのコピーリンクがクリップボードにコピーされました!
移行の進行中に、コマンドラインインターフェイス (CLI) を使用して、移行全体または特定の仮想マシン (VM) の移行をキャンセルできます。
移行全体のキャンセル
MigrationCR を削除します。$ oc delete migration <migration> -n <namespace>1 - 1
MigrationCR の名前を指定します。
特定の仮想マシンの移行のキャンセル
Migrationマニフェストのspec.cancelブロックに特定の仮想マシンを追加します。2 つの仮想マシンの移行をキャンセルするための 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 仮想マシンの場合は Managed Object Reference、RHV 仮想マシンの場合は VM UUID です。残りの仮想マシンの進捗をモニタリングするための
MigrationCR を取得します。$ oc get migration/<migration> -n <namespace> -o yaml