第5章 コマンドラインからの仮想マシンの移行

コマンドラインから仮想マシンを OpenShift Virtualization に移行できます。

重要

すべての 前提条件 を満たしていることを確認する必要があります。

5.1. 仮想マシンの移行

MTV カスタムリソース (CR) を作成して、仮想マシン (VM) をコマンドライン (CLI) から移行します。

重要

クラスタースコープの CR の名前を指定する必要があります。

namespace スコープの CR の名前と namespace の両方を指定する必要があります。

前提条件

  • cluster-admin 権限を持つユーザーとしてログインしている。
  • VMware のみ: すべてのクラスターがアクセスできるセキュアなレジストリーに VMware Virtual Disk Development Kit (VDDK) イメージを用意しておく。

手順

  1. VMware のみ: VDDK イメージを HyperConverged CR に追加します。

    $ cat << EOF | oc apply -f -
    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      vddkInitImage: <registry_route_or_server_path>/vddk:<tag> 1
    EOF
    1
    作成した VDDK イメージを指定します。
  2. ソースプロバイダーの認証情報の Secret マニフェストを作成します。

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret>
      namespace: openshift-mtv
    type: Opaque
    stringData:
      user: <user> 1
      password: <password> 2
      cacert: <engine_ca_certificate> 3
      thumbprint: <vcenter_fingerprint> 4
    EOF
    1
    base64 でエンコードされた vCenter 管理ユーザーまたは RHV Manager ユーザーを指定します。
    2
    base64 でエンコードされたパスワードを指定します。
    3
    RHV のみ: Manager の base64 でエンコードされた CA 証明書を指定します。https://<engine_host>/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA で取得できます。
    4
    VMware のみ: vCenter SHA-1 フィンガープリントを指定します。
  3. ソースプロバイダーの Provider マニフェストを作成します。

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <provider>
      namespace: openshift-mtv
    spec:
      type: <provider_type> 1
      url: <api_end_point> 2
      secret:
        name: <secret> 3
        namespace: openshift-mtv
    EOF
    1
    使用できる値は ovirt および vsphere です。
    2
    API エンドポイント URL を指定します (例: vSphere の場合は https://<vCenter_host>/sdk、RHV の場合は https://<engine_host>/ovirt-engine/api/)。
    3
    プロバイダー Secret CR の名前を指定します。
  4. VMware のみ: Host マニフェストを作成します。

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Host
    metadata:
      name: <vmware_host>
      namespace: openshift-mtv
    spec:
      provider:
        namespace: openshift-mtv
        name: <source_provider> 1
      id: <source_host_mor> 2
      ipAddress: <source_network_ip> 3
    EOF
    1
    VMware の Provider CR の名前を指定します。
    2
    VMware ホストの 管理対象オブジェクト参照 (MOR) を指定します。
    3
    VMware 移行ネットワークの IP アドレスを指定します。
  5. 移行元および宛先ネットワークをマッピングする NetworkMap マニフェストを作成します。

    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: NetworkMap
    metadata:
      name: <network_map>
      namespace: openshift-mtv
    spec:
      map:
        - destination:
            name: <pod>
            namespace: openshift-mtv
            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:
            id: <source_network_id>
            name: <source_network_name>
      provider:
        source:
          name: <source_provider>
          namespace: openshift-mtv
        destination:
          name: <destination_cluster>
          namespace: openshift-mtv
    EOF
    1
    使用できる値は Pod および multus です。
    2
    id パラメーター または name パラメーターのいずれかを使用して、ソースネットワークを指定することができます。
    3
    VMware ネットワーク MOR または RHV ネットワークの UUID を指定します。
    4
    追加の OpenShift Virtualization ネットワークごとにネットワーク接続定義を指定します。
    5
    OpenShift Virtualization ネットワーク割り当て定義の namespace を指定します。
  6. StorageMap マニフェストを作成し、ソースおよび宛先ストレージをマッピングします。

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: StorageMap
    metadata:
      name: <storage_map>
      namespace: openshift-mtv
    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: openshift-mtv
        destination:
          name: <destination_cluster>
          namespace: openshift-mtv
    EOF
    1
    使用できる値は ReadWriteOnce および ReadWriteMany です。
    2
    VMware データストレージ MOR または RHV ストレージドメインの UUID を指定します (例: f2737930-b567-451a-9ceb-2887f6207009)。
  7. オプション: Hook マニフェストを作成し、Plan CR で指定されたフェーズ中に VM でカスタムコードを実行します。

    $  cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Hook
    metadata:
      name: <hook>
      namespace: openshift-mtv
    spec:
      image: quay.io/konveyor/hook-runner 1
      playbook: | 2
        LS0tCi0gbmFtZTogTWFpbgogIGhvc3RzOiBsb2NhbGhvc3QKICB0YXNrczoKICAtIG5hbWU6IExv
        YWQgUGxhbgogICAgaW5jbHVkZV92YXJzOgogICAgICBmaWxlOiAiL3RtcC9ob29rL3BsYW4ueW1s
        IgogICAgICBuYW1lOiBwbGFuCiAgLSBuYW1lOiBMb2FkIFdvcmtsb2FkCiAgICBpbmNsdWRlX3Zh
        cnM6CiAgICAgIGZpbGU6ICIvdG1wL2hvb2svd29ya2xvYWQueW1sIgogICAgICBuYW1lOiB3b3Jr
        bG9hZAoK
    EOF
    1
    デフォルトの hook-runner イメージを使用するか、カスタムイメージを指定することができます。カスタムイメージを指定する場合は、Playbook を指定する必要はありません。
    2
    オプション: base64 でエンコードされた Ansible Playbook。Playbook を指定する場合、imagehook-runner である必要があります。
  8. 移行の Plan マニフェストを作成します。

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Plan
    metadata:
      name: <plan> 1
      namespace: openshift-mtv
    spec:
      warm: true 2
      provider:
        source:
          name: <source_provider>
          namespace: openshift-mtv
        destination:
          name: <destination_cluster>
          namespace: openshift-mtv
      map:
        network: 3
          name: <network_map> 4
          namespace: openshift-mtv
        storage:
          name: <storage_map> 5
          namespace: openshift-mtv
      targetNamespace: openshift-mtv
      vms: 6
        - id: <source_vm> 7
        - name: <source_vm>
          hooks: 8
            - hook:
                namespace: openshift-mtv
                name: <hook> 9
              step: <step> 10
    EOF
    1
    Plan CR の名前を指定します。
    2
    VMware のみ: 移行がウォームまたはコールドであるかどうかを指定します。Migration CR マニフェストで cutover パラメーターの値を指定せずにウォーム移行を指定する場合は、プレコピー段階のみが実行されます。ウォーム移行は RHV ではサポートされていません。
    3
    複数のネットワークマッピングを追加することができます。
    4
    NetworkMap CR の名前を指定します。
    5
    StorageMap CR の名前を指定します。
    6
    id パラメーター または name パラメーターのいずれかを使用して、ソース仮想マシンを指定することができます。
    7
    VMware 仮想マシン MOR または RHV 仮想マシンの UUID を指定します。
    8
    オプション: 仮想マシンのフックを最大 2 つ指定できます。各フックは個別の移行ステップで実行する必要があります。
    9
    Hook CR の名前を指定します。
    10
    移行完了後の移行プランの開始前または PostHook の前の許容値は、PreHook です。
  9. Plan CR を実行するための Migration マニフェストを作成します。

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Migration
    metadata:
      name: <migration> 1
      namespace: openshift-mtv
    spec:
      plan:
        name: <plan> 2
        namespace: openshift-mtv
      cutover: <cutover_time> 3
    EOF
    1
    Migration CR の名前を指定します。
    2
    実行している Plan CR の名前を指定します。Migration CR は、移行される VM ごとに VirtualMachine CR を作成します。
    3
    オプション: 2021-04-04T01:23:45.678+09:00 などの UTC 時間オフセットで、ISO 8601 形式に応じたカットオーバー時間を指定します。

    複数の Migration CR を単一の Plan CR に関連付けることができます。移行が完了しない場合は、Plan CR を変更せずに新規 Migration CR を作成して残りの仮想マシンを移行できます。

  10. 移行の進捗をモニタリングするための Migration CR を取得します。

    $ oc get migration/<migration> -n openshift-mtv -o yaml