12.4. MTV 移行計画へのフックの追加


Migration Toolkit for Virtualization (MTV) 移行計画にフックを追加して、移行前または移行後に仮想マシン上で自動化の操作を実行できます。

12.4.1. MTV 移行計画のフック

MTV CLI または Red Hat OpenShift Web コンソールにある MTV ユーザーインターフェイスを使用して、Migration Toolkit for Virtualization (MTV) 移行計画にフックを追加できます。

  • 移行前 フックは、プロバイダー上にある仮想マシンに対して操作を実行するフックです。これにより、仮想マシンの移行の準備が整います。
  • 移行後 フックは、OpenShift Virtualization に移行した仮想マシン上で操作を実行するフックです。

12.4.1.1. デフォルトのフックイメージ

MTV フックのデフォルトのフックイメージは quay.io/kubev2v/hook-runner です。このイメージは、Ansible Runner イメージをベースにしており、Ansible Kubernetes リソースと最新の oc バイナリーを提供するための python-openshift が追加されています。

12.4.1.2. フックの実行

移行フックの一部として提供される Ansible Playbook は、ConfigMap としてフックコンテナーにマウントされます。フックコンテナーは、選択した ServiceAccount を使用して、openshift-mtv namespace 内の目的のクラスター上でジョブとして実行されます。

フックを追加するときは、Hook CR が配置されている namespace、フックの名前、およびフックが移行前フックか移行後フックかを指定する必要があります。

重要

フックを仮想マシンで実行するには、仮想マシンが起動し、SSH を使用して利用可能な状態である必要があります。

次の図は、移行フックを使用する一般的なプロセスを示しています。具体的な手順は、Red Hat OpenShift Web コンソールを使用した移行計画への移行フックの追加 および CLI を使用した移行計画への移行フックの追加 を参照してください。

図12.1 移行計画へのフックの追加

移行計画へのフックの追加

プロセス:

  1. Ansible フックと認証情報を入力します。

    1. UI または CLI を使用して、Ansible フックイメージを MTV コントローラーに入力します。

      • UI で、ansible-runner を指定し、フックを含む playbook.yml を入力します。
      • CLI で、フックを実行する Playbook を指定するフックイメージを入力します。
    2. Pod 内で Playbook を実行するために SSH データなどの追加データが必要な場合は、仮想マシンの認証情報を含むシークレットを作成します。このシークレットは Pod にマウントされませんが、Playbook によって呼び出されます。

      注記

      このシークレットは、ソースプロバイダーの認証情報を含む Secret CR とは異なります。

  2. MTV コントローラーは、次の内容を含む ConfigMap を作成します。

    • workload.yml、仮想マシンに関する情報を含む。
    • playbook.yml、実行する生の文字列 Playbook。
    • plan.ymlPlan CR。

      ConfigMap には仮想マシンの名前が含まれており、Playbook に何を実行するかを指示します。

  3. MTV コントローラーは、ユーザーが指定したイメージを開始するジョブを作成します。

    1. ConfigMap をコンテナーにマウントします。

      Ansible フックは、ユーザーが以前に入力したシークレットをインポートします。

  4. ジョブは、次のように移行前フックまたは移行後フックを実行します。

    1. 移行前フックの場合、ジョブは SSH を使用してソースプロバイダー上の仮想マシンにログインし、フックを実行します。
    2. 移行後のフックの場合、ジョブは SSH を使用して OpenShift Virtualization 上の仮想マシンにログインし、フックを実行します。

12.4.2. Red Hat OpenShift Web コンソールを使用した移行計画への移行フックの追加

Red Hat OpenShift Web コンソールを使用して、既存の移行計画に移行フックを追加できます。Migration Toolkit for Virtualization (MTV) CLI で 1 つのコマンドを実行する必要があることに注意してください。

たとえば、移行前に仮想マシンに cloud-init サービスをインストールし、ファイルを書き込むフックを作成できます。

注記

移行計画ごとに、移行前フックを 1 つ、移行後フックを 1 つ、またはそれぞれを 1 つ実行できます。

前提条件

  • 移行計画。
  • 移行フックファイル。その内容をコピーして Web コンソールに貼り付けます。
  • ソースプロバイダーの シークレット を含むファイル。
  • フックによって呼び出され、作業している namespace に対して少なくとも書き込みアクセス権がある Red Hat OpenShift サービスアカウント。
  • 仮想マシンにインストールされた公開鍵を使用して移行する仮想マシンへの SSH アクセス。
  • Microsoft Server 上でのみ実行されている仮想マシン: リモート実行が有効化されている。

関連情報

サービスアカウントを作成する手順は、サービスアカウントの概要および作成 を参照してください。

手順

  1. Red Hat OpenShift Web コンソールで、Migration > Plans for virtualization をクリックし、フックを追加する移行計画をクリックします。
  2. Hooks をクリックします。
  3. 移行前のフックの場合は、以下の手順を実行します。

    1. Pre migration hook セクションで、Enable hook スイッチを Enable pre migration hook に切り替えます。
    2. Hook ランナーイメージ を入力します。spec.playbook を指定する場合は、ansible-runner が含まれるイメージを使用する必要があります。
    3. Ansible Playbook テキストボックスにフックを YAML ファイルとして貼り付けます。
  4. 移行後のフックの場合は、以下の手順を実行します。

    1. Post migration hook で、Enable hookEnable post migration hook に切り替えます。
    2. Hook ランナーイメージ を入力します。spec.playbook を指定する場合は、ansible-runner が含まれるイメージを使用する必要があります。
    3. Ansible Playbook テキストボックスにフックを YAML ファイルとして貼り付けます。
  5. タブの上部にある Update hooks をクリックします。
  6. ターミナルで以下のコマンドを実行し、各フックを Red Hat OpenShift サービスアカウントに関連付けます。

    Copy to Clipboard Toggle word wrap
    $ oc -n openshift-mtv patch hook <name_of_hook> \
      -p '{"spec":{"serviceAccount":"<service_account>"}}' --type merge

次の移行フックの例では、SSH を使用して仮想マシンにアクセスできることを確認し、SSH 鍵を作成し、Maria データベースの停止とテキストファイルの生成の 2 つのタスクを実行します。

移行フックの例

Copy to Clipboard Toggle word wrap
- name: Main
  hosts: localhost
  vars_files:
    - plan.yml
    - workload.yml
  tasks:
  - k8s_info:
      api_version: v1
      kind: Secret
      name: privkey
      namespace: openshift-mtv
    register: ssh_credentials

  - name: Ensure SSH directory exists
    file:
      path: ~/.ssh
      state: directory
      mode: 0750

  - name: Create SSH key
    copy:
      dest: ~/.ssh/id_rsa
      content: "{{ ssh_credentials.resources[0].data.key | b64decode }}"
      mode: 0600

  - add_host:
      name: "{{ vm.ipaddress }}"  # ALT "{{ vm.guestnetworks[2].ip }}"
      ansible_user: root
      groups: vms

- hosts: vms
  vars_files:
    - plan.yml
    - workload.yml
  tasks:
  - name: Stop MariaDB
    service:
      name: mariadb
      state: stopped

  - name: Create Test File
    copy:
      dest: /premigration.txt
      content: "Migration from {{ provider.source.name }}
                of {{ vm.vm1.vm0.id }} has finished\n"
      mode: 0644

12.4.3. CLI を使用した移行計画への移行フックの追加

Hook CR を使用すると、Migration Toolkit for Virtualization (MTV) CLI を使用して、既存の移行計画に移行前フックまたは移行後フックを追加できます。

たとえば、移行前に仮想マシンに cloud-init サービスをインストールし、ファイルを書き込むための Hook CR を作成できます。

注記

移行計画ごとに、移行前フックを 1 つ、移行後フックを 1 つ、またはそれぞれを 1 つ実行できます。各フックには独自の Hook CR が必要ですが、Plan CR には使用するすべてのフックのデータが含まれます。

注記

k8s モジュールを使用して、シークレットまたは ConfigMap に保存されている追加情報を取得できます。

前提条件

  • 移行計画。
  • 移行フックイメージまたはフックイメージを含む Playbook。
  • ソースプロバイダーのシークレットを含むファイル。
  • フックによって呼び出され、作業している namespace に対して少なくとも書き込みアクセス権がある Red Hat OpenShift サービスアカウント。
  • 仮想マシンにインストールされた公開鍵を使用して移行する仮想マシンへの SSH アクセス。
  • Microsoft Server 上でのみ実行されている仮想マシン: リモート実行が有効化されている。

関連情報

サービスアカウントを作成する手順は、サービスアカウントの概要および作成 を参照してください。

手順

  1. 必要に応じて、仮想マシンの SSH 秘密鍵でシークレットを作成します。

    1. 既存のキーを選択するか、キーペアを生成します。
    2. 仮想マシンに公開鍵をインストールします。
    3. シークレット内の秘密鍵を base64 でエンコードします。

      Copy to Clipboard Toggle word wrap
      apiVersion: v1
      data:
        key: VGhpcyB3YXMgZ2Vu...
      kind: Secret
      metadata:
        name: ssh-credentials
        namespace: openshift-mtv
      type: Opaque
  2. ファイルを連結し、Base64 エンコード用にパイプすることで、Playbook をエンコードします。次に例を示します。

    Copy to Clipboard Toggle word wrap
    $ cat playbook.yml | base64 -w0
  3. Hook CR を作成します。

    Copy to Clipboard Toggle word wrap
    $  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
    1
    (オプション) Red Hat OpenShift サービスアカウント。クラスターのリソースを操作する場合は、serviceAccount を指定する必要があります。
    2
    Base64 でエンコードされた Ansible Playbook。Playbook を指定する場合、image には ansible-runner が含まれている必要があります。
    注記

    デフォルトの hook-runner イメージを使用するか、カスタムイメージを指定することができます。カスタムイメージを指定する場合は、Playbook を指定する必要はありません。

    注記

    アタッチされた Playbook をデコードするには、カスタム出力でリソースを取得して base64 にパイプします。以下に例を示します。

    Copy to Clipboard Toggle word wrap
    $ oc get -n konveyor-forklift hook playbook -o \
        go-template='{{ .spec.playbook }}' | base64 -d
  4. 移行の Plan CR で、仮想マシンごとに、CR の末尾に次のセクションを追加します。

    Copy to Clipboard Toggle word wrap
      vms:
        - id: <vm_id>
          hooks:
            - hook:
                namespace: <namespace>
                name: <name_of_hook>
              step: <type_of_hook> 
    1
    1
    オプションは、移行前にフックを実行する PreHook と、移行後にフックを実行する PostHook です。
重要

PreHook を仮想マシンで実行するには、仮想マシンを起動し、SSH 経由で利用できるようにする必要があります。

次の移行フックの例では、SSH を使用して仮想マシンにアクセスできることを確認し、SSH 鍵を作成し、Maria データベースの停止とテキストファイルの生成の 2 つのタスクを実行します。

移行フックの例

Copy to Clipboard Toggle word wrap
- name: Main
  hosts: localhost
  vars_files:
    - plan.yml
    - workload.yml
  tasks:
  - k8s_info:
      api_version: v1
      kind: Secret
      name: privkey
      namespace: openshift-mtv
    register: ssh_credentials

  - name: Ensure SSH directory exists
    file:
      path: ~/.ssh
      state: directory
      mode: 0750

  - name: Create SSH key
    copy:
      dest: ~/.ssh/id_rsa
      content: "{{ ssh_credentials.resources[0].data.key | b64decode }}"
      mode: 0600

  - add_host:
      name: "{{ vm.ipaddress }}"  # ALT "{{ vm.guestnetworks[2].ip }}"
      ansible_user: root
      groups: vms

- hosts: vms
  vars_files:
    - plan.yml
    - workload.yml
  tasks:
  - name: Stop MariaDB
    service:
      name: mariadb
      state: stopped

  - name: Create Test File
    copy:
      dest: /premigration.txt
      content: "Migration from {{ provider.source.name }}
                of {{ vm.vm1.vm0.id }} has finished\n"
      mode: 0644

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat, Inc.