OpenShift の Storage Class Migration

※この記事は OpenShift Advent Calendar 2024 の 20日目の記事です。

qiita.com

こんにちは、ストレージと OpenShift を生業にしているうつぼ(宇都宮)です。ご無沙汰しております。
ここ最近というかこの一年はすっかり OpenShift Virtualization(OCP-V)の小僧として活動させていただいております。
お陰様で OCP-V は非常に多方面から注目を浴びております。ありがとうございます。

さて。OCP-V は仮想マシンのライブマイグレーションができることで知られていますが、ストレージのライブマイグレーションにはこれまで対応していませんでした。
ストレージのライブマイグレーションは、バックエンドのストレージの負荷が偏ってしまって分散させたいときや、ストレージ装置の更改(入れ替え)のときには欠かせない機能です。

そして最新の OpenShift Virtualization 4.17 で、Storage Class Migration という名前で対応できるようになりました。
4.17 時点では Storage Class Migration は Tech Preview 機能ですので、フルサポートはまだ無いのですが、機能としては普通に使えます。
今日はそんな Storage Class Migration について紹介します。

Storage Class Migration

仮想マシンの仮想ディスクのライブマイグレーションは、皆さんの馴染みの深いであろう vSphere では Storage vMotion という名前で実装されていました。
ざっくり言えばデータストア間で vmdk 等のファイルを移動させる機能ですが、OpenShift にはデータストアも仮想ディスクファイルもありません。
あるのは、Storage Class と Persistent Volume (PV) です。

そうです。Storage Class Migration は名前の通り、異なる Storage Class 間で PV を移動させる機能です。
厳密に言えば移動ではなくコピー(クローン)ではありますが、何はともあれ別の Storage Class に PV を移すことができるのです。仮想マシン無停止で移すことが可能です。

Storage Class Migration

利用条件

Storage Class Migration を行うには、次のようなバージョンの条件があります。 - OpenShift 4.17 以上 - OpenShift Virtualization Operator 4.17 以上 - Migration Toolkit for Container Operator 1.8.4 以上 - OADP Operator 1.4.1 以上

各々ほぼほぼ最新のバージョンですね。これらを導入したうえで、OpenShift Virtualization の "HyperConverged" カスタムリソースに annotation を追加します。次の oc コマンドで適用するのが簡単です。

oc annotate --overwrite -n openshift-cnv hco kubevirt-hyperconverged kubevirt.kubevirt.io/jsonpatch='[ {"op": "add", "path": "/spec/configuration/developerConfiguration/featureGates/-", "value": "VolumesUpdateStrategy"}, {"op": "add", "path": "/spec/configuration/developerConfiguration/featureGates/-", "value": "VolumeMigration"} ]'

これによって、"VolumeMigration" と "VolumeUpdateStrategy" という KubeVirt の feature を使えるようになります。

Storage Class Migration は Migration Toolkit for Container で実行

利用条件には、Migration Toolkit for Container Operator というのがありますが、これは必要なのか?はい、必要です。
Migration Toolkit for Container(MTC) は超ざっくり言えば、PV を使うようなステートフルなアプリケーションを OpenShift クラスタ間で移行する際に使うツールです。
Storage Class Migration は、MTC の機能の一部として実行します。

MTC で Migration Plan 作成時に Migration Type に Storage class conversion を選択

なお、既存仮想化基盤から仮想マシンの移行する際に使う、Migration Toolkit for Virtualization(MTV)というツールがありますが、MTC はそれとはまた別のツールです。

MTC で Storage Class Migration を実行すると、移行先の Storage Class で自動的に PVC が発行 & PV がバインドされて、移行元の PV から移行先の PV にコピーが走ります。
コピーが完了すると、OCP-V 仮想マシンの "DataVolume" に紐づけられている PVC は、自動的に移行先の PVC に切り替わります。
ですので、仮想マシン側の切り替え作業は必要がなく、気づいたら移行が終わってる、という感じになります。

※DataVolume って?という方は ↓ こちらの記事を読んで下さい。 rheb.hatenablog.com

注意点

はい、ようやく実装された Storage Class Migration ですが、いくつか頭に留めておいていただきたい注意点があります。

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

  • 同時に仮想マシンのライブマイグレーションも起きる
    PVC が移行先に切り替わるタイミングで、仮想マシン自身もライブマイグレーションするため、別の Compute ノードに移動します。
    今日時点では PVC だけを切り替えることは対応していません。

  • 移行元の PVC は残る
    普通に考えれば移行したら移行元には何も残らないと思いがちですが、Storage Class Migration では移行元に PVC が残ります。
    冒頭で厳密には移行ではなくコピーと言ったのはそのためです。必要に応じて移行完了後に手で移行元の PVC を削除して下さい。

この他にも、Share disk は移行対象にはできないよとか、PV のサイズは移行元と移行先とでピッタリ合ってないといけないよ、とかいくつかの細々とした制限がありますが、本当に細々としているのでここでは省きます。

まとめ

以上が Storage Class Migration の紹介です。

多分、やりたいこと自体はシンプルなのでご理解いただけると思うのですが、具体的にどうやってやるのか?は文言だけではイメージがつきづらいかもしれません。
ちょっとデモが見たいよという方は、お気軽に担当営業までお問い合わせいただければと思います。
ちょっと落ち着いたらそのうちデモ動画も用意できたらなと思っています。

というわけで、今回はここまで。

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