この記事は、MicroAd Advent Calendar 2018の15日目の記事です。
はじめに
OpenStackでCPUの世代が異なるハードウェアを使う場合に必要な設定のメモです
OpenStackをある程度の規模・サイジングをしてから導入する場合、CPU世代が異なるHWを使うことは稀かと思います。
ただ、どうしても異なるCPU世代のHWを追加する必要がある場合や、ミニマムのハードウェア構成で構築するなどの場合はコンピュートホストで事前に設定を投入しておくと安心です。
動作環境
OpenStack(Newton)を使った環境でのメモですが、
基本的には他でも一緒だと思います。
起きる問題
コンピュートホストのCPU世代が異なるとき、インスタンスを新しい世代のCPUから古い世代のCPUにライブマイグレーションしようとすると、
エラーが発生してライブマイグレーションができません。
但し、停止を伴うマイグレーション、古いCPU世代から新しいCPU世代へのライブマイグレーションは可能です
回避方法
nova-computeの設定を変更して、インスタンスに見せるCPU世代を隠蔽することで回避
設定する内容
コンピュートホストのnova.confに以下の設定を投入します。
[libvirt]
cpu_mode = custom
cpu_model = Broadwell
cpu_modelは、/usr/share/libvirt/cpu_map.xmlにあるmodel name
を設定します。
この設定を投入したら、nova-computeサービスを再起動して反映します。
注意点
この設定はインスタンスを起動する前に設定しておく必要があります
あとから変更する場合は、インスタンスを停止して再起動する必要があります
その場合、インスタンスのOS上からリブートや、OpenStackのコントローラーからソフトリセットでの再起動ではなく、
インスタンスを完全に停止することが必要です。
またこの設定により新しい世代のCPU性能をフルに使えない場合が発生します。
確認
設定が反映されているか確認する方法は、インスタンス上から/proc/cpuinfo
を参照して
model name
が設定したものになっていれば問題なし
もしくは、コンピュートホスト上でps
コマンドでqemuプロセス確認したときに
-cpu XXXXX
と意図CPUモデルになっていればOK
まとめ
個人的には仮想基盤で使用するCPUは、世代を合わせておいたほうが得策と思っています。
とはいえ、ハードウェアをあとから追加調達するケースでは、CPU世代が変わってしまうケースも少なくないので、
予めこの設定を入れておくことが良いと思いました。