CloudStackにCentOS6.2ベースの仮想アプライアンスを入れて運用を始めた時の話。
まず、予備知識のおさらい。
CloudStackにCentOS6系のテンプレートを作成する際には、事前に
/etc/udev/rules.d/70-persistent-net.rules
を削除しておくのがお約束である。これをやっておかないと、テンプレートからインスタンスを作成した時に、NICを認識できなかったり、eth0のはずのNICがeth1やeth2として認識されたりと、色々な問題が起こる。
うっかり70-persistent-net.rulesを削除せずにテンプレートを作ってしまった場合、インスタンス作成後にファイルの中身を直してあげれば復旧可能である。
また、CloudStackにはインスタンスのSnapshotを取る機能があるが、そのSnapshotを復元するためには、Snapshotを元にしてテンプレートを作成し、そのテンプレートからインスタンスを作成するという手順を踏む必要がある。ここが素のHypervisorと違うところである。
すなわち、複製目的でテンプレートを作る時ばかりでなく、システム状態のバックアップを取る目的でSnapshotを取る際にも、
/etc/udev/rules.d/70-persistent-net.rules
を削除する必要がある。
で、仮想アプライアンスである。
今回私が取り扱ったそいつは、CentOSベースであるものの、好き勝手にいじれないように、CLIで使用できるコマンドはガチガチに制限されている(製品オリジナルのコマンドしか使えない)し、ファイルシステムの操作など一切できない。まあ、仮想アプライアンスって、そういうものである。
で、ファイルシステムが操作できないということは、
/etc/udev/rules.d/70-persistent-net.rules
を消したり編集することが一切できないのである。
これは困る。
実際にSnapshot作成⇒テンプレート作成⇒インスタンス作成を何度もやってみたところ、毎回結果が変わる。ほとんどの場合、NICの順番がおかしくなる(eth0とeth1が入れ替わるなど)。で、何度も試していると、たまに元通りのNICの順番になってくれることがある。なんだこの運ゲー。
以上、CloudStackと仮想アプライアンスの相性は決してよくない、というお話。