OpenShift Virtualization (OCP-V) - Migration Toolkit for Virtualization (MTV) - VMware prerequisites & VDDK Image

### OpenShift Virtualization

Red Hat® OpenShift® Virtualization は Red Hat OpenShift に含まれる機能であり、組織が新規および既存の仮想マシン (VM) ワークロードを実行およびデプロイするための先進的なプラットフォームを提供します。このソリューションにより、従来の仮想マシンを、信頼できる、一貫した包括的なハイブリッドクラウド・アプリケーション・プラットフォームに簡単に移行できます。

OpenShift Virtualization は、VM の移行を単純化するとともに、クラウドネイティブ・アプリケーション・プラットフォームのシンプルさと速度を利用してインフラストラクチャのモダナイゼーションの道筋を提供します。また、先進的な管理の原則を取り入れつつ既存の仮想化への投資を維持することを目指しており、Red Hat の包括的な仮想化ソリューションの基盤となります。

https://www.redhat.com/ja/technologies/cloud-computing/openshift/virtualization

### Migration Toolkit for Virtualization (MTV) 

Migration Toolkit for Virtualization (MTV) を使用すると、仮想マシンを VMware vSphere などから OpenShift Container Platform で実行されている OpenShift Virtualization に移行できます。 

https://docs.redhat.com/en/documentation/migration_toolkit_for_virtualization/2.8

https://github.com/kubev2v

### VMware prerequisites
OCP 4.18 Bare Metal 環境 OpenShift Virtualization (OCP-V) で、執筆時点の最新版である MTV 2.8 を元に VMware からの Migration 前提条件を確認してみます。

https://docs.redhat.com/en/documentation/migration_toolkit_for_virtualization/2.8/html/installing_and_using_the_migration_toolkit_for_virtualization/prerequisites_mtv#vmware-prerequisites_mtv

#### VMware privileges
VMware 側で、下記に記載の権限を設定する必要があります。

https://docs.redhat.com/en/documentation/migration_toolkit_for_virtualization/2.8/html/installing_and_using_the_migration_toolkit_for_virtualization/prerequisites_mtv#vmware-privileges_mtv

#### Creating a VMware role to grant MTV privileges
VMware 側で、下記に記載のロールを設定する必要があります。

https://docs.redhat.com/en/documentation/migration_toolkit_for_virtualization/2.8/html/installing_and_using_the_migration_toolkit_for_virtualization/prerequisites_mtv#creating-vmware-role-mtv-permissions_mtv

#### Creating a VDDK image

以下に記載のとおり、VMware Virtual Disk Development Kit (VDDK) Image の作成が強く推奨されます。

https://docs.redhat.com/en/documentation/migration_toolkit_for_virtualization/2.8/html/installing_and_using_the_migration_toolkit_for_virtualization/prerequisites_mtv#creating-vddk-image_mtv

:::note info
Note
Creating a VDDK image, although optional, is highly recommended. Using MTV without VDDK is not recommended and could result in significantly lower migration speeds. 
:::

VDDK の保管先に Public Registry を使用する事は、ライセンス違反の可能性があるため注意が必要です。

:::note info
Note
Storing the VDDK image in a public registry might violate the VMware license terms. 
:::

ここでは、OCP Image Registry に VDDK を作成・登録してみます。

上記マニュアルの記載に従って VDDK 8.0.1 Image を入手します。なお、ダウンロードには Broadcom サイトへの Login が必要です。

https://developer.broadcom.com/sdks/vmware-virtual-disk-development-kit-vddk/8.0

今回は Linux VM の移行用に、以下の Image を使用します。

```shell
VMware Virtual Disk Development Kit (VDDK) 8.0.1 for Linux 	8.0.1 	22.95 MB
```
```shell
$ ls -l
-rw-r--r--. 1 root root 24061991 Mar  7 10:00 VMware-vix-disklib-8.0.1-21562716.x86_64.tar.gz
```

任意の場所で、上記ファイルを解凍します。
```shell
$ tar -xzf VMware-vix-disklib-8.0.1-21562716.x86_64.tar.gz

$ ls -lR | head
.:
total 1
drwxr-xr-x. 7  201  201   84 Apr  6  2023 vmware-vix-disklib-distrib

./vmware-vix-disklib-distrib:
total 16
-rw-r--r--. 1 201 201 7239 Apr  6  2023 FILES
drwxr-xr-x. 2 201 201   73 Mar  7 10:07 bin64
drwxr-xr-x. 6 201 201 4096 Mar  7 10:07 doc
drwxr-xr-x. 2 201 201   95 Mar  7 10:07 include
drwxr-xr-x. 2 201 201    6 Apr  6  2023 lib32
drwxr-xr-x. 2 201 201 4096 Mar  7 10:07 lib64

vmware-vix-disklib-distrib/bin64:
```

Dockerfile を作成します。
```shell
$ ls -l Dockerfile
-rw-r--r--. 1 root root 200 Mar  7 10:07 Dockerfile

$ cat Dockerfile
FROM registry.access.redhat.com/ubi8/ubi-minimal
USER 1001
COPY vmware-vix-disklib-distrib /vmware-vix-disklib-distrib
RUN mkdir -p /opt
ENTRYPOINT ["cp", "-r", "/vmware-vix-disklib-distrib", "/opt"]
```

podman コマンドで VDDK Image を作成します。今回は `openshift` ネームスペースに `vddk:8.0.1` で作成します。

```shell
$ podman build . -t $(oc get route default-route -n openshift-image-registry -o=jsonpath='{.spec.host}')/openshift/vddk:8.0.1
STEP 1/5: FROM registry.access.redhat.com/ubi8/ubi-minimal
STEP 2/5: USER 1001
--> Using cache dce0983d81744d0c6d983a170aa66a30f512a62f9f4ef42d236dc2965bd03b79
--> dce0983d8174
STEP 3/5: COPY vmware-vix-disklib-distrib /vmware-vix-disklib-distrib
--> Using cache a1d780c135268c089438887cc41a0a9e4ca0dad176d4edf97707a5f4b6b6f5e0
--> a1d780c13526
STEP 4/5: RUN mkdir -p /opt
--> Using cache 1e8f7eb435787ebe733a4038e86208d63073d4675947be8ddb21b118206956e3
--> 1e8f7eb43578
STEP 5/5: ENTRYPOINT ["cp", "-r", "/vmware-vix-disklib-distrib", "/opt"]
--> Using cache b35124453719daf905b81f593215a1465e3773bf9d48f1c2e7b844650585fa7a
COMMIT default-route-openshift-image-registry.apps.clusterz.mysample.com/openshift/vddk:8.0.1
--> b35124453719
Successfully tagged default-route-openshift-image-registry.apps.clusterz.mysample.com/openshift/vddk:8.0.1
b35124453719daf905b81f593215a1465e3773bf9d48f1c2e7b844650585fa7a

$ podman images
REPOSITORY                                                                       TAG   IMAGE ID      CREATED       SIZE
default-route-openshift-image-registry.apps.clusterz.mysample.com/openshift/vddk 8.0.1 b35124453719  3 months ago  173 MB
```

必要に応じて、OCP Image Registry を Expose します。

https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/registry/securing-exposing-registry

OCP Image Registry に Login した後、Image を Push して完了です。

https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/registry/accessing-the-registry

```shell
$ podman push default-route-openshift-image-registry.apps.clusterz.mysample.com/openshift/vddk:8.0.1
Getting image source signatures
Copying blob ad97743f34d7 done   |
Copying blob d5d17ad65554 done   |
Copying blob 6530a2879ee7 done   |
Copying config b351244537 done   |
Writing manifest to image destination
```
```shell
$ oc get is vddk -n openshift
NAME   IMAGE REPOSITORY                                                                   TAGS   UPDATED
vddk   default-route-openshift-image-registry.apps.clusterz.mysample.com/openshift/vddk   8.0.1  3 months ago

$ skopeo inspect docker://default-route-openshift-image-registry.apps.clusterz.mysample.com/openshift/vddk
{
    "Name": "default-route-openshift-image-registry.apps.clusterz.mysample.com/openshift/vddk",
    "RepoTags": [
        "8.0.1"
    ],
    "Created": "2025-03-07T01:20:46.036166103Z",
    "DockerVersion": "",
    "Labels": {
        "architecture": "x86_64",
        "build-date": "2025-02-11T15:07:54",
        "com.redhat.component": "ubi8-minimal-container",
        "com.redhat.license_terms": "https://www.redhat.com/en/about/red-hat-end-user-license-agreements#UBI",
        "description": "The Universal Base Image Minimal is a stripped down image that uses microdnf as a package manager. This base image is freely redistributable, but Red Hat only supports Red Hat technologies through subscriptions for Red Hat products. This image is maintained by Red Hat and updated regularly.",
        "distribution-scope": "public",
        "io.buildah.version": "1.37.2",
        "io.k8s.description": "The Universal Base Image Minimal is a stripped down image that uses microdnf as a package manager. This base image is freely redistributable, but Red Hat only supports Red Hat technologies through subscriptions for Red Hat products. This image is maintained by Red Hat and updated regularly.",
        "io.k8s.display-name": "Red Hat Universal Base Image 8 Minimal",
        "io.openshift.expose-services": "",
        "io.openshift.tags": "minimal rhel8",
        "maintainer": "Red Hat, Inc.",
        "name": "ubi8-minimal",
        "release": "1179.1739286367",
        "summary": "Provides the latest release of the minimal Red Hat Universal Base Image 8.",
        "url": "https://access.redhat.com/containers/#/registry.access.redhat.com/ubi8-minimal/images/8.10-1179.1739286367",
        "vcs-ref": "4f8da2b64a13f2a264bd802d8909bf803211fb20",
        "vcs-type": "git",
        "vendor": "Red Hat, Inc.",
        "version": "8.10"
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Layers": [
        "sha256:495b67f206d50d81414a47cc50e03efb582f1d4653a0dd94890a2588c4603d7f",
        "sha256:5e4c2fc80c59349fac873482e705fd80fc0f42551bc43f6d0ac023ae4f8df6c1",
        "sha256:11b5e62ca80ee4a6ce47c9965c8ac3b2a9562ee46e545d204ae03109c6afb34e"
    ],
    "LayersData": [
        {
            "MIMEType": "application/vnd.oci.image.layer.v1.tar+gzip",
            "Digest": "sha256:495b67f206d50d81414a47cc50e03efb582f1d4653a0dd94890a2588c4603d7f",
            "Size": 39466130,
            "Annotations": null
        },
        {
            "MIMEType": "application/vnd.oci.image.layer.v1.tar+gzip",
            "Digest": "sha256:5e4c2fc80c59349fac873482e705fd80fc0f42551bc43f6d0ac023ae4f8df6c1",
            "Size": 25939682,
            "Annotations": null
        },
        {
            "MIMEType": "application/vnd.oci.image.layer.v1.tar+gzip",
            "Digest": "sha256:11b5e62ca80ee4a6ce47c9965c8ac3b2a9562ee46e545d204ae03109c6afb34e",
            "Size": 135,
            "Annotations": null
        }
    ],
    "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "container=oci"
    ]
}
```

#### Increasing the NFC service memory of an ESXi host
1つの `Migration Plan` で 10 以上の VM を移行する場合、`NFC service memory` の検討が必要です。

https://docs.redhat.com/en/documentation/migration_toolkit_for_virtualization/2.8/html/installing_and_using_the_migration_toolkit_for_virtualization/prerequisites_mtv#increasing-nfc-memory-vmware-host_mtv

#### VDDK validator containers need requests and limits
OCP Cluster または特定 Project で `Resource Quota` を設定している場合、Migration 実行に十分な量の設定である必要があります。MTV で必要な容量は ForkliftController CR に設定可能です。Default では設定されておらず、下記マニュアルに記載の値が使用されます。

https://docs.redhat.com/en/documentation/migration_toolkit_for_virtualization/2.8/html/installing_and_using_the_migration_toolkit_for_virtualization/prerequisites_mtv#vddk-validator-containers_mtv

#### Open Virtual Appliance (OVA) prerequisites
OVA を移行する場合の前提条件は、下記マニュアルに記載のとおりです。

https://docs.redhat.com/en/documentation/migration_toolkit_for_virtualization/2.8/html/installing_and_using_the_migration_toolkit_for_virtualization/prerequisites_mtv#ova-prerequisites_mtv

#### OpenShift Virtualization prerequisites
OCP-V 側の前提条件は、下記マニュアルに記載のとおりです。

https://docs.redhat.com/en/documentation/migration_toolkit_for_virtualization/2.8/html/installing_and_using_the_migration_toolkit_for_virtualization/prerequisites_mtv#cnv-prerequisites_mtv

#### Software compatibility guidelines
移行元・移行先の互換性に留意する必要があります。

https://docs.redhat.com/en/documentation/migration_toolkit_for_virtualization/2.8/html/installing_and_using_the_migration_toolkit_for_virtualization/prerequisites_mtv#compatibility-guidelines_mtv

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/01b46230-bba3-4b6d-8bda-f315267aca68.png)