2013年9月8日日曜日

CloudStack 4.0系 KVM でDELLを使う時は注意 #cloudstack

Failed to get public nic name

KVMのagent.logにこのエラーが出力されうまくホストが追加されなかった。
publicの部分は環境によって異なるのだがうまくNICを認識できていないようだった。

NICのVLANを見なおしたり、Bridgeを作りなおしたりしたのだが改善されず。


/etc/cloud/agent/agent.propertiesを見てもNICとBridgeのマッピングは問題なさそうだった。


ただこの問題が起きるのはなぜかDELLマシンだけ‥


NICの命名規則

NICの命名規則がFredora15とCent6.1辺りから変更があり、これまでNIC名はethだったのだが物理デバイス名を意識した命名規則になった。

オンボードNICならemXのような形式になる。

この命名規則を有効にするにはOS側だけでなくBIOSが対応している必要がある。

最近のサーバーはBIOSも対応しておりただ、有効になっているのはDELLだけ‥


このような命名規則になったのは色々理由があるのだがDELL自身のサイトがまとめているので参考にしてほしい。
http://ja.community.dell.com/techcenter/b/weblog/archive/2011/08/03/fedora-15.aspx


ただ全てのサーバーとOSが対応していない現状を伺うとこの設定は無効にしている方が懸命であ
る。

DELLマシンを使うとKickstartやライブマイグレーションが正常に行えない問題が起きることもある。

実はFailed to get public nic nameの問題に関係している。


biosdevnameを無効にする

biosdevnameを無効にすることで、従来のeth方式の命名規則に変更できる。

grub.confの起動パラメータにbiosdevname=0を追記し再起動すれば問題ない。


CloudStack 4.0系はbiosdevnameに対応していない

問題はこれだった。比較的安定している(と思っている)4.0.2系を使っていたのだがうまくNICを認識しない。

これはCloudStack4.0系 + KVMで発生する問題で4.0系を使っていたもVMなら恐らくこの問題は起きない。

./plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.javaを見ると、NICの判定がある。

ホストが追加される時はSSHを経由してagentからLibvertがキックされるのだがその際にVLANの設定をチェックしNICとBridgeのマッピングを行うのだが、NICの判定がethかbondのみになっているのが問題。
emやpciなどのNICは見つけられないのでBridgeとマッピングできずにFailed to get public nic nameが発生する。

この問題はCloudStack4.1以上で対策されている。

そもそも4.0系ってCent6.1対応外だったのかも‥


クラウドでは様々なベンダーのサーバーを使うと思うのでbiosdevnameは無効にしておきたいところ。