5.3. 仮想マシンの移行
MTV カスタムリソース (CR) を作成して、仮想マシン (VM) をコマンドライン (CLI) から移行します。
クラスタースコープの CR の名前を指定する必要があります。
namespace スコープの CR の名前と namespace の両方を指定する必要があります。
1 つ以上の Open Virtual Appliance (OVA) ファイルを移行元プロバイダーとして使用する移行は、テクノロジープレビュー機能となっています。
1 つ以上の Open Virtual Appliance (OVA) ファイルを移行元プロバイダーとして使用する移行は、テクノロジープレビュー機能のみとして提供されています。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。これらの機能により、近日発表予定の製品機能をリリースに先駆けてご提供でき、お客様は開発プロセス時に機能をテストして、フィードバックをお寄せいただくことができます。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
OpenStack 移行元プロバイダーを使用した移行では、Cinder ボリュームのみを使用する VM のみがサポートされます。
前提条件
- VMware のみ: すべてのクラスターがアクセスできるセキュアなレジストリーに VMware Virtual Disk Development Kit (VDDK) イメージを用意しておく。
- Red Hat Virtualization (RHV) のみ: ダイレクト LUN ディスクを使用して仮想マシンを移行する場合は、VM 実行先の OpenShift Virtualization クラスター内のノードがバックエンドストレージにアクセスできることを確認してください。
- 移行元プロバイダーから移行先プロバイダーに コピーされる ディスクイメージとは異なり、LUN は移行元プロバイダーの仮想マシンから 切り離されますが、削除されず、ターゲットプロバイダーで作成された仮想マシン (VM) にアタッチされます。
- 移行元プロバイダーへのフォールバックが必要な場合に備えて、移行中に LUN は移行元プロバイダーから削除されません。ただし、LUN を移行元プロバイダーの VM に再接続する前に、LUN がターゲット環境上の VM によって同時に使用されていないことを確認してください。同時に使用されていると、データの破損が発生する可能性があります。
- ファイバーチャネル LUN の移行はサポートされていません。
手順
移行元プロバイダーの認証情報の
Secret
マニフェストを作成します。$ 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: <provider_type> createdForResourceType: providers type: Opaque stringData: user: <user> password: <password> insecureSkipVerify: <true/false> domainName: <domain_name> projectName: <project_name> regionName: <region name> cacert: | <ca_certificate> url: <api_end_point> thumbprint: <vcenter_fingerprint> token: <service_account_bearer_token> 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: <provider_type>
2 createdForResourceType: providers type: Opaque stringData:
3 user: <user>
4 password: <password>
5 insecureSkipVerify: <true/false>
6 domainName: <domain_name>
7 projectName: <project_name>
8 regionName: <region name>
9 cacert: |
10 <ca_certificate> url: <api_end_point>
11 thumbprint: <vcenter_fingerprint>
12 token: <service_account_bearer_token>
13 EOF
Copy to Clipboard Copied! - 1
ownerReferences
セクションはオプションです。- 2
- 移行元プロバイダーのタイプを指定します。許可される値は、
ovirt
、vsphere
、openstack
、ova
、およびopenshift
です。このラベルは、リモートシステムにアクセスできる場合に認証情報が正しいことを確認するのに必要であり、RHV では、サードパーティーの証明書が指定されている場合に Manager CA 証明書を取得するのに必要です。 - 3
- OVA の
stringData
セクションは異なり、Secret
マニフェストの説明の後にあるメモに説明されています。 - 4
- vCenter ユーザー、RHV Manager ユーザー、または OpenStack ユーザーを指定します。
- 5
- ユーザーパスワードを指定します。
- 6
- 証明書の検証を省略するには、
<true>
を指定します。これにより、セキュアではない移行が行われ、証明書は不要になります。セキュアではない移行とは、転送されたデータがセキュアではない接続を介して送信され、機密性の高いデータが公開される可能性があることを意味します。<false>
を指定すると、証明書が検証されます。 - 7
- OpenStack のみ: ドメイン名を指定します。
- 8
- OpenStack のみ: プロジェクト名を指定します。
- 9
- OpenStack のみ: OpenStack リージョンの名前を指定します。
- 10
- RHV および OpenStack のみ: RHV の場合は、サードパーティーの証明書に置き換えられていない限り、Manager CA 証明書を入力します。サードパーティーの証明書に置き換えられた場合は、Manager Apache CA 証明書を入力します。Manager CA 証明書は、https://<engine_host>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA で取得できます。OpenStack の場合は、ソース環境に接続するための CA 証明書を入力します。
insecureSkipVerify
が<true>
に設定されている場合、証明書は使用されません。 - 11
- API エンドポイント URL を指定します。たとえば、vSphere の場合は
https://<vCenter_host>/sdk
、RHV の場合はhttps://<engine_host>/ovirt-engine/api
、OpenStack の場合はhttps://<identity_service>/v3
です。 - 12
- VMware のみ: vCenter SHA-1 フィンガープリントを指定します。
- 13
- OpenShift のみ:
cluster-admin
権限を持つサービスアカウントのトークン。
注記OVA
Secret
マニフェストのstringData
セクションは次のとおりです。stringData: url: <nfs_server:/nfs_path>
stringData: url: <nfs_server:/nfs_path>
Copy to Clipboard Copied! nfs_server
: 共有が作成されたサーバーの IP またはホスト名。nfs_path
: OVA ファイルが保存されているサーバー上のパス。移行元プロバイダーの
Provider
マニフェストを作成します。$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <source_provider> namespace: <namespace> spec: type: <provider_type> url: <api_end_point> settings: vddkInitImage: <registry_route_or_server_path>/vddk:<tag> 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: <provider_type>
1 url: <api_end_point>
2 settings: vddkInitImage: <registry_route_or_server_path>/vddk:<tag>
3 secret: name: <secret>
4 namespace: <namespace> EOF
Copy to Clipboard Copied! - 1
- 移行元プロバイダーのタイプを指定します。許可される値は、
ovirt
、vsphere
、openstack
、ova
、およびopenshift
です。 - 2
- API エンドポイント URL を指定します。たとえば、vSphere の場合は
https://<vCenter_host>/sdk
、RHV の場合はhttps://<engine_host>/ovirt-engine/api
、OpenStack の場合はhttps://<identity_service>/v3
です。 - 3
- VMware のみ: 作成した VDDK イメージを指定します。
- 4
- プロバイダー
Secret
CR の名前を指定します。
VMware のみ:
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> 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
Copy to Clipboard Copied! - 1
- VMware の
Provider
CR の名前を指定します。 - 2
- VMware ホストのマネージドオブジェクト参照 (MOR) を指定します。moRef を取得するには、Retrieving a VMware vSphere moRef を参照してください。
- 3
- VMware 移行ネットワークの 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: pod source: id: <source_network_id> name: <source_network_name> - destination: name: <network_attachment_definition> namespace: <network_attachment_definition_namespace> 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
$ 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>
3 name: <source_network_name> - destination: name: <network_attachment_definition>
4 namespace: <network_attachment_definition_namespace>
5 type: multus source: name: <network_attachment_definition>
6 namespace: <network_attachment_definition_namespace>
7 type: multus
8 provider: source: name: <source_provider> namespace: <namespace> destination: name: <destination_provider> namespace: <namespace> EOF
Copy to Clipboard Copied! - 1
- 使用できる値は
Pod
およびmultus
です。 - 2
id
パラメーター またはname
パラメーターのいずれかを使用して、ソースネットワークを指定できます。- 3
- VMware ネットワーク MOR、RHV ネットワーク UUID、または OpenStack ネットワーク UUID を指定します。moRef を取得するには、Retrieving a VMware vSphere moRef を参照してください。
- 4
- 追加の OpenShift Virtualization ネットワークごとにネットワークアタッチメント定義を指定します。
- 5
type
がmultus
の場合に限り必要です。OpenShift Virtualization のネットワークアタッチメント定義の namespace を指定します。- 6
- 追加の OpenShift Virtualization ネットワークごとにネットワークアタッチメント定義を指定します。
- 7
type
がmultus
の場合に限り必要です。ここで、namespace
は、namespace プロパティーを使用するか、<network_namespace>/<network_name>
のように構築された名前で指定できます。- 8
- OpenShift のみ
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> source: id: <source_datastore> - 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 - 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
Copy to Clipboard Copied! - 1
- 使用できる値は
ReadWriteOnce
およびReadWriteMany
です。 - 2
- VMware データストア moRef、RHV ストレージドメイン UUID、または OpenStack
volume_type
UUID を指定します。たとえば、f2737930-b567-451a-9ceb-2887f6207009
です。moRef を取得するには、Retrieving a VMware vSphere moRef を参照してください。
注記OVA の場合、
StorageMap
は、OVA のすべてのディスクが関連付けられている単一のストレージのみを移行先のストレージクラスにマップできます。このため、ストレージは UI では "Dummy storage for source provider <provider_name>" と呼ばれます。オプション:
Hook
マニフェストを作成し、Plan
CR で指定されたフェーズ中に仮想マシンでカスタムコードを実行します。$ 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
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Hook metadata: name: <hook> namespace: <namespace> spec: image: quay.io/konveyor/hook-runner
1 playbook: |
2 LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr bG9hZAoK EOF
Copy to Clipboard Copied! 移行の
Plan
マニフェストを作成します。$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Plan metadata: name: <plan> namespace: <namespace> spec: warm: true 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> targetNamespace: <target_namespace> vms: - id: <source_vm> - name: <source_vm> namespace: <namespace> 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: true
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> namespace: <namespace>
10 hooks:
11 - hook: namespace: <namespace> name: <hook>
12 step: <step>
13 EOF
Copy to Clipboard Copied! - 1
Plan
CR の名前を指定します。- 2
- 移行がウォームまたはコールドであるかどうかを指定します。
Migration
マニフェストでcutover
パラメーターの値を指定せずにウォーム移行を指定すると、プレコピーステージのみが実行します。 - 3
- プランごとにネットワークマップとストレージマップを 1 つだけ指定します。
- 4
- 移行する仮想マシンがネットワークに割り当てられていない場合でも、ネットワークマッピングを指定します。この場合、マッピングは空にできます。
- 5
NetworkMap
CR の名前を指定します。- 6
- 移行する仮想マシンにディスクイメージが割り当てられていない場合でも、ストレージマッピングを指定します。この場合、マッピングは空にできます。
- 7
StorageMap
CR の名前を指定します。- 8
- OpenShift Virtualization を除くすべてのソースプロバイダーでは、
id
パラメーター またはname
パラメーターを使用してソース VM を指定できます。
OpenShift Virtualization 移行元プロバイダーのみ: 移行元仮想マシンを指定するには、id.
パラメーターではなくname
パラメーターのみが使用できます。 - 9
- VMware VM MOR、RHV VM UUID、または OpenStack VM UUID を指定します。moRef を取得するには、Retrieving a VMware vSphere moRef を参照してください。
- 10
- OpenShift Virtualization 移行元プロバイダーのみ。
- 11
- オプション: 仮想マシンのフックを最大 2 つ指定できます。各フックは個別の移行ステップで実行する必要があります。
- 12
Hook
CR の名前を指定します。- 13
- 使用できる値は、移行計画が開始される前の
PreHook
、または移行が完了した後のPostHook
です。
Plan
CR を実行するためのMigration
マニフェストを作成します。$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration> namespace: <namespace> spec: plan: name: <plan> namespace: <namespace> cutover: <cutover_time> EOF
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Migration metadata: name: <migration>
1 namespace: <namespace> spec: plan: name: <plan>
2 namespace: <namespace> cutover: <cutover_time>
3 EOF
Copy to Clipboard Copied! 複数の
Migration
CR を単一のPlan
CR に関連付けることができます。移行が完了しない場合は、Plan
CR を変更せずに新規Migration
CR を作成して残りの仮想マシンを移行できます。移行の進捗をモニタリングするための
Migration
CR を取得します。oc get migration/<migration> -n <namespace> -o yaml
$ oc get migration/<migration> -n <namespace> -o yaml
Copy to Clipboard Copied!