OpenShift Virtualization (OCP-V) - Live Migration - Initiating and Canceling

### 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

### Live Migration

OCP 4.18 Bare Metal 環境 OpenShift Virtualization (OCP-V) で Live Migration を行ってみます。

https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/virtualization/live-migration

#### Initiating and canceling live migration

##### Initiating
Initiating and canceling live migration
https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/virtualization/live-migration#virt-initiating-live-migration

Live Migration の実行は OCP Console または `virtctl migrate` コマンドで行います。なお、Live Migration の宛先 Node を指定することはできません。

OCP Console では、VM の `Action/Migration` で `Compute` または `Storage` を選択することができます。`Compute` は、即時に Live Migration が実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/46194993-3830-412c-9274-dc9f70d2933e.png)

`Storage` は、以下のように VM が使用している PV の Storage Class を変更することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/56ec6dee-41af-4b2e-a342-395293daf58a.png)

ここでは、`Compute` の Live Migration を実行してみます。

前述の `rhel9-custom01-upload` VM は `worker02` で稼働し、6GiB Memory の 90% 以上を使用しています。`Compute` を選択すると、即座に Live Migration が実行されます。Status が `Migrating` に変更され、実行中であることが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/64aaf7b6-1f91-44f7-828d-6157d4d34dd0.png)

完了すると、Status が `Running` に戻り、`worker01` に移動したことが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/e33c6fb6-6d01-40c1-855e-7d59ba639d96.png)

Virtualization/Overview の `Migration` Tab でも、状況を確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/8a5c6266-5e04-4a6b-9711-8f743a9b7a38.png)

Live Migration 関連の Event は、以下の要領で確認することができます。
```shell
$ oc get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.name=rhel9-custom01-upload
LAST SEEN   TYPE     REASON             OBJECT                                         MESSAGE
9m45s       Normal   SuccessfulUpdate   virtualmachineinstance/rhel9-custom01-upload   Expanded PodDisruptionBudget kubevirt-disruption-budget-248rm
9m38s       Normal   PreparingTarget    virtualmachineinstance/rhel9-custom01-upload   VirtualMachineInstance Migration Target Prepared.
9m38s       Normal   Migrating          virtualmachineinstance/rhel9-custom01-upload   VirtualMachineInstance is migrating.
9m38s       Normal   PreparingTarget    virtualmachineinstance/rhel9-custom01-upload   Migration Target is listening at 10.129.2.56, on ports: 37269,44403,45485
9m5s        Normal   Migrated           virtualmachineinstance/rhel9-custom01-upload   The VirtualMachineInstance migrated to node worker01.
9m5s        Normal   Deleted            virtualmachineinstance/rhel9-custom01-upload   Signaled Deletion
9m1s        Normal   SuccessfulUpdate   virtualmachineinstance/rhel9-custom01-upload   shrank PodDisruptionBudget kubevirt-disruption-budget-248rm
```

同様に、virtctl でも実行することができます。
```shell
$ virtctl migrate --help
Migrate a virtual machine.

Usage:
  virtctl migrate (VM) [flags]

Examples:
  # Migrate a virtual machine called 'myvm':
  virtctl migrate myvm

Flags:
      --dry-run   --dry-run=false: Flag used to set whether to perform a dry run or not. If true the command will be executed without performing any changes.
  -h, --help      help for migrate

Use "virtctl options" for a list of global command-line options (applies to all commands).
```

##### Canceling

Live Migration のキャンセルは OCP Console または `virtctl migrate-cancel` コマンドで行います。OCP Console では、VM の `Action/Migration` で `Cancel compute migration` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/819205f4-5d4c-430d-8795-f7c99d8caac0.png)

Virtualization/Overview の `Migration` Tab でも、`Cancel migration` を選択することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/70852d74-0e8b-4585-b9af-d2cfc9c3fe5d.png)


Live Migration をキャンセルすると、以下のような Event が記録されます。
```shell
$ oc get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.name=rhel9-custom01-upload
LAST SEEN   TYPE      REASON             OBJECT                                         MESSAGE
89s         Normal    Migrating          virtualmachineinstance/rhel9-custom01-upload   VirtualMachineInstance is aborting migration.
89s         Warning   Migrated           virtualmachineinstance/rhel9-custom01-upload   VirtualMachineInstance migration uid 1ad4f852-2b05-42db-b241-e7b0a8e27c99 failed. reason:Live migration aborted
```

同様に、virtctl でも実行することができます。

```shell
$ virtctl migrate-cancel --help
Cancel migration of a virtual machine.

Usage:
  virtctl migrate-cancel (VM) [flags]

Examples:
  # Migrate-Cancel a virtual machine called 'myvm':
  virtctl migrate-cancel myvm

Flags:
  -h, --help   help for migrate-cancel

Use "virtctl options" for a list of global command-line options (applies to all commands).
```

##### Live Migration Error
Live Migration 実行中にエラーが発生すると、以下のようになります。

VM の稼働に影響のないエラーの場合は、VM は `Running` で継続稼働します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/2c309b0a-ffc2-4bb8-b1d1-d413e2cf108f.png)

Virtualization/Overview の `Migration` Tab では、Status が `Failed` になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/b1047e6b-d571-43cb-b6b0-cdc27f054b96.png)

エラーに関して、以下のような Event が記録されます。

```shell
$ oc get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.name=rhel9-custom01-upload
LAST SEEN   TYPE      REASON             OBJECT                                         MESSAGE
4m3s        Normal    Migrating          virtualmachineinstance/rhel9-custom01-upload   VirtualMachineInstance is migrating.
3m54s       Warning   Migrated           virtualmachineinstance/rhel9-custom01-upload   VirtualMachineInstance migration uid 8084bf97-c527-477b-801c-36ea4f661449 failed. reason:Live migration is not completed after 7 seconds and has been aborted
```

今回は、以下のような MigrationPolicy を使用したため、上記のエラーが発生しました。

```shell
$ oc get MigrationPolicy z-ocpv-vmtest-custom-migration-policy -o yaml
apiVersion: migrations.kubevirt.io/v1alpha1
kind: MigrationPolicy
metadata:
  annotations:
    description: ""
  name: z-ocpv-vmtest-custom-migration-policy
spec:
  bandwidthPerMigration: 0Mi
  completionTimeoutPerGiB: 1
  selectors:
    namespaceSelector:
      z-ocpv-vmtest-custom-migration-policy: "true"
```