Virt 屋のひとりごと : VM とストレージの Live migration

※本記事は OpenShift Virtualization アドベントカレンダーの 4日目の記事です。

qiita.com

皆さんこんにちは、OpenShift Virtualization とストレージを生業にしている Red Hat のうつぼ(宇都宮)です。お久しぶりです。

OpenShift Virtualization の特命係として活動を始めてはや2年経ちますが、おかげさまで現在は過去最高の注目と期待を浴びていると感じております。誠にありがとうございます。
一方で、実案件やプロモーションなどにかまけて技術情報の発信を怠っていたなと痛感する毎日でございます。
そんなこんなでアドベントカレンダーの形ではありますが、OpenShift Virtualization の情報をお出ししていきたいと思います。
今日のテーマは Live migration です。

ターゲットノードを指定する VM Live migration

Live migration は VM を停止せずにノードからノードへ移動する機能です。
VMware でいう vMotion なわけですが、基本的な説明は以前の記事↓で紹介されていますので、こちらをご覧ください。

ゼロからはじめるOpenShift Virtualization(4)OpenShift Virtualizationのインストールと実行 - 赤帽エンジニアブログ

今回紹介したいことは、ノードを指定して Live migration できるようになったよ ということです。
OpenShift Virtualization 4.20 で、指定したノードをターゲットとする Live migration が GA になりました。
これによって、ノードのメンテナンスなどで意図的に VM を特定のノードに移動させたい時に、nodeSelector などを使わなくても簡単に行えるようになりました。

実際にやってみる

やり方も極めて簡単です。ちょっとやってみましょう。
VM の Action メニューから Migration > コンピュート と選ぶと、下図のようにウィザードが出てきます。
ここで "特定のノード" を選択すると移動先のノードの候補が自動で表示されてきます。ノードを選んで [VirtualMachine の移行] ボタンを押せば実行されます。

VM Live migration のウィザード画面

これは結構昔からずーっと求められていた機能なので、喜ぶ方は結構多いのではないでしょうか。

※[12/04 09:30 追記] 今朝時点でリリースされている最新の OpenShift Virtualization 4.20.1 (stable channel), および 4.20.2 (candidate channel) において、GUI で指定したノードに移動しないというバグが確認されております。

https://issues.redhat.com/browse/CNV-71548

このバグは上記のように GUI で設定した場合のみ発生するもので、YAML で作成した場合には発生しません。
早々に修正される見込みですが、現時点で特定のノードに VM を Live migration したい場合は YAML で実行するようにして下さい。

YAML の例、spec.addedNodeSelector でノードを指定する。

apiVersion: kubevirt.io/v1
kind: VirtualMachineInstanceMigration
metadata:
  name: migration-job
  namespace: vms
  labels:
    kubevirt.io/vmi-name: rhel9
spec:
  vmiName: rhel9
  addedNodeSelector:
    kubernetes.io/hostname: wk-01

GUIでYAMLを書いてもOK

Storage class live migration

お次は仮想ディスクを無停止で別のストレージに移動する、VMware でいう Storage vMotion 的な機能です。
実はドキュメントによって名称はマチマチで、正式な機能名称がなさそうに思えるので、Storage live migration でも、Storage class live migration でも、Storage class migration でも好きな名前で呼んでもらって大丈夫だと思います。だいたいは伝わるはずです。

さて、この機能はちょっと前から Technology Preview として提供されていて、実は昨年の OpenShift Advent Calendar の記事にも書いています。
詳細は大きく変わらないので、こちらの記事を読んでいただければ機能自体はおわかりいただけると思います。

OpenShift の Storage Class Migration - 赤帽エンジニアブログ

今回紹介したいことは、これが ついに GA になったよ ということと、Migration Toolkit for Container (MTC) ではなくて VM のメニューからできるようになったよ ということです。
移行のエンジン自体は MTC を使っているので MTC のセットアップは必要になりますが、通常の Live migration と同じ感覚で Storage live migration も扱えます。

実際にやってみる

ちょっとやってみましょう。
まず MTC のセットアップをします。MTC Operator をデフォルトの openshift-migration namespace にインストールし、MigrationController カスタムリソースを作成します。
細かいパラメータは一旦省略して、デフォルトのままで作ります。

MTC のセットアップ

Pod を見ると知らないうちに OADP (OpenShift API for Data Protection) 関連の Pod が作られていますが、OADP は MTC と一緒に自動でインストールされるのでこれで正しいです。

[root@bastion ~]# oc get pod -n openshift-migration
NAME                                            READY   STATUS    RESTARTS   AGE
migration-controller-bcf6fd9df-vc6dm            2/2     Running   0          2m38s
migration-log-reader-d45f7fb6c-w9jkb            2/2     Running   0          2m37s
migration-operator-55c8dbd7c9-hdjfh             1/1     Running   0          4m44s
migration-ui-5c8c745679-555nn                   1/1     Running   0          2m33s
node-agent-6hkck                                1/1     Running   0          2m54s
node-agent-jncdz                                1/1     Running   0          2m54s
node-agent-lrvb9                                1/1     Running   0          2m54s
openshift-adp-controller-manager-5f6cd4bd9-4plrn 1/1     Running   0          4m31s
velero-58986884ff-p82zs                         1/1     Running   0          2m54s

ここまででしておけばOKです。VM のメニューから Migration を選ぶと、グレーアウトされていた "ストレージ" が選択できるようになっているはずです。

ストレージ Live migration メニュー

*Migration > ストレージ** を選ぶと、図のようなウィザードが表示されます。このウィザードに沿って移動させるディスクや移行先の Storage class を選択します。
最後に [VirtualMachine ストレージの移行] ボタンを押せば実行されます。

Storage class live migration のウィザード画面

ストレージの移行は、左メニューの "Migration for Virtualization" の下にある、"Storage migrations" から状況を見ることができます。
マイグレーションの設定をすると、MigPlan というカスタムリソースが作成されます。
※MTV は MigrationPlan なので少しややこしいですね(汗

Storage class live migration のプラン (MigPlan)

注意点

Storage class live migration は次のような注意点があります。

  • 同一の Namespace 内でのみ移行できる
    異なる Namespace への移行は対応していません。

  • 同時に VM の Live migration も起きる
    PVC が移行先に切り替わるタイミングで、VM 自身も Live migration するため、別の Compute ノードに移動します。   以前は DataVolume (DV) は同じで PVC だけが置き換わる動きだったのですが、現在は DV 自体も新しいものに作り変えられるようです。VirtualMachine カスタムリソースで DV ごと変更されて、Live migration でその変更を適用するという流れになります。

  • 移行元のディスクは残る
    Storage class live migration では移行した後も移行元の PVC と DV が残ります。このまま放っておくと容量を重複して消費することになるので、必要に応じて移行元の PVC と DV を削除して下さい。

  • 同じ namespace では同時に 1つだけ migration できる。
    1つの namespace で作成できる MigPlan は1つだけという制約があるためです。

さいごに

VM の Live migration もストレージの Live migration も運用保守においては欠かせないものかと思いますが、OpenShift Virtualization でも対応しています。
Storage class live migration については現在は MTC に依存していますが、将来的にはこれがなくなって OpenShift Virtualization 自身に持たせていくプランもあります。

仮想化基盤の移行の際にはぜひ OpenShift Virtualization をご贔屓によろしくおねがいします。

それでは、今日はここまで。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。