OpenStackでVDI環境を作ろうとした話

結論から言えばWindows10 – RADEON RX460のGPUパススルー、USBパススルーはできた。
しかし安定性が悪かったので挫折。

どの程度役に立つかはおいておいて、日本語の情報がなくて苦しんだので少しでもアウトプットしておく。

きっかけ

OpenStackってAWSっぽい感じのダッシュボードで仮想マシン管理できるらしいと聞いて、試してみたくなった。メインPC上で集約させて一つのPCしか起動しないようになれば電気代が安くできるのではなどと淡い期待を抱いていた。
これが一週間に及ぶセットアップ地獄の始まりだった。

まずは環境構築

参考になる日本語のページは少ないが、環境構築だけでいえばかなりきっちり書いてくれている人たちがいるのでこの辺りを見つつ入れる。
packstackならこの記事
OpenStack Mitakaの導入 (Win7, Virtual Box, CentOS 7, RDO)
それぞれインストールするならこの記事
VirtualBoxで作成したCentOSにOpenStackを構築する(環境編)

初っ端からログイン画面で最新のChromeだとログインできないという罠。Edgeを使った。
packstackでインストールする場合、SAHARAは使用していなくてもなぜかCPUを使い続ける現象が発生したので要らなければ外したほうがいいかも。

Windowsの仮想マシンを用意

参考:OpenStackで使用可能なWindows10イメージの作成方法
WindowsはvirtioのHDDを認識してくれないので、別途作った仮想マシンのファイルをOpenStackに投げ込む。後々困らないようにvirtio-winの中身はマイドキュメントあたりに移しておいたほうが安心。(一回イーサネットアダプタのドライバをqcow2に含め忘れて詰んだ)

PCIパススルー

GPUもUSBコントローラもPCIデバイスなので、手順はまとめます。
GPUパススルーは言わずもがなですが、USBコントローラもセットでパススルーしてやれば普通のデスクトップ環境のように使えて幸せになれます。
ちゃんと動けば。

grubの上書き

参考: CentOS7 KVMでPCIパススルー(GPU含む)
GRUB_CMDLINE_LINUX_DEFAULT に次を追加(intel_iommuはインテルの場合のみ)
自分はpci-stub.idsはUSBコントローラの物のみ追加しました。

そのあと、コマンドで

ブラックリストへの追加も行う。

/etc/nova/nova.confの書き換え

めちゃくちゃハマりポイント

パススルーするデバイスの指定をします。ここではvendor_id,product_idをそれぞれ1002:47ef、1b12:1242とを例にして記述します。
まずはpci_aliasを設定。フレーバーにデバイスを指定するときの名前です。複数ある時は分けて書きます。

次にpci_passthrough_whitelistを設定。複数ある時はJsonのArrayにまとめます。

vendor_id,product_idの16進部分は小文字で書きましょう
コンフィグファイルのバリデーションには引っかからないのに、インスタンスを起動したタイミングで実行できるホストが無いというエラーが吐かれます。単純に文字列比較してる…?

scheduler_available_filtersの追加

scheduler_default_filtersに追加

flavorにPCIデバイスを追加するときの書き方


あとは tail /var/log/nova/nova-* 等してERRORを探してください。
スタックトレースが出てるので、ソースを追いましょう。(エラーメッセージでググって情報にたどり着けるのはレアです)

カテゴリー: 未分類 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です