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 移行計画へのフックの追加
プロセス:
Ansible フックと認証情報を入力します。
UI または CLI を使用して、Ansible フックイメージを MTV コントローラーに入力します。
-
UI で、
ansible-runnerを指定し、フックを含むplaybook.ymlを入力します。 - CLI で、フックを実行する Playbook を指定するフックイメージを入力します。
-
UI で、
Pod 内で Playbook を実行するために SSH データなどの追加データが必要な場合は、仮想マシンの認証情報を含むシークレットを作成します。このシークレットは Pod にマウントされませんが、Playbook によって呼び出されます。
注記このシークレットは、ソースプロバイダーの認証情報を含む
SecretCR とは異なります。
MTV コントローラーは、次の内容を含む
ConfigMapを作成します。-
workload.yml、仮想マシンに関する情報を含む。 -
playbook.yml、実行する生の文字列 Playbook。 plan.yml、PlanCR。ConfigMapには仮想マシンの名前が含まれており、Playbook に何を実行するかを指示します。
-
MTV コントローラーは、ユーザーが指定したイメージを開始するジョブを作成します。
ConfigMapをコンテナーにマウントします。Ansible フックは、ユーザーが以前に入力したシークレットをインポートします。
ジョブは、次のように移行前フックまたは移行後フックを実行します。
- 移行前フックの場合、ジョブは SSH を使用してソースプロバイダー上の仮想マシンにログインし、フックを実行します。
- 移行後のフックの場合、ジョブは 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 上でのみ実行されている仮想マシン: リモート実行が有効化されている。
関連情報
サービスアカウントを作成する手順は、サービスアカウントの概要および作成 を参照してください。
手順
- Red Hat OpenShift Web コンソールで、Migration > Plans for virtualization をクリックし、フックを追加する移行計画をクリックします。
- Hooks をクリックします。
移行前のフックの場合は、以下の手順を実行します。
- Pre migration hook セクションで、Enable hook スイッチを Enable pre migration hook に切り替えます。
-
Hook ランナーイメージ を入力します。
spec.playbookを指定する場合は、ansible-runnerが含まれるイメージを使用する必要があります。 - Ansible Playbook テキストボックスにフックを YAML ファイルとして貼り付けます。
移行後のフックの場合は、以下の手順を実行します。
- Post migration hook で、Enable hook を Enable post migration hook に切り替えます。
-
Hook ランナーイメージ を入力します。
spec.playbookを指定する場合は、ansible-runnerが含まれるイメージを使用する必要があります。 - Ansible Playbook テキストボックスにフックを YAML ファイルとして貼り付けます。
- タブの上部にある Update hooks をクリックします。
ターミナルで以下のコマンドを実行し、各フックを Red Hat OpenShift サービスアカウントに関連付けます。
$ oc -n openshift-mtv patch hook <name_of_hook> \ -p '{"spec":{"serviceAccount":"<service_account>"}}' --type merge
次の移行フックの例では、SSH を使用して仮想マシンにアクセスできることを確認し、SSH 鍵を作成し、Maria データベースの停止とテキストファイルの生成の 2 つのタスクを実行します。
移行フックの例
- 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 上でのみ実行されている仮想マシン: リモート実行が有効化されている。
関連情報
サービスアカウントを作成する手順は、サービスアカウントの概要および作成 を参照してください。
手順
必要に応じて、仮想マシンの SSH 秘密鍵でシークレットを作成します。
- 既存のキーを選択するか、キーペアを生成します。
- 仮想マシンに公開鍵をインストールします。
シークレット内の秘密鍵を base64 でエンコードします。
apiVersion: v1 data: key: VGhpcyB3YXMgZ2Vu... kind: Secret metadata: name: ssh-credentials namespace: openshift-mtv type: Opaque
ファイルを連結し、Base64 エンコード用にパイプすることで、Playbook をエンコードします。次に例を示します。
$ cat playbook.yml | base64 -w0Hook CR を作成します。
$ 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 を指定する必要はありません。注記アタッチされた Playbook をデコードするには、カスタム出力でリソースを取得して base64 にパイプします。以下に例を示します。
$ oc get -n konveyor-forklift hook playbook -o \ go-template='{{ .spec.playbook }}' | base64 -d移行の
PlanCR で、仮想マシンごとに、CR の末尾に次のセクションを追加します。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 つのタスクを実行します。
移行フックの例
- 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