Nested KVM で OpenStack

Nested KVMKVM 上に OpenStack を構築しました。

Nested KVMVM を立てることに関しては下記の記事が非常に参考になりました。というかほぼそのまま作りました。

VM間の通信を専用のNICで行う

VM 間の通信は eth1 で行いたい。

"packstack --gen-answer-file=./packstack-answer.cfg" で packstack 用の設定ファイルを生成。この設定ファイルにはデフォルトのパラメータが記載されているので、これを変更していきます。

変更した部分は以下。

87c87
< CONFIG_COMPUTE_HOSTS=192.168.199.11
---
> CONFIG_COMPUTE_HOSTS=192.168.199.12,192.168.199.13
943c943
< CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=
---
> CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=ext-net:br-ex
954c954
< CONFIG_NEUTRON_OVS_BRIDGE_IFACES=
---
> CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0
959c959
< CONFIG_NEUTRON_OVS_TUNNEL_IF=
---
> CONFIG_NEUTRON_OVS_TUNNEL_IF=eth1

エラーと解決策

nova-compute が起動に失敗する

以下の様なエラーが表示される。

Error: Could not start Service[nova-compute]: Execution of '/usr/bin/systemctl start openstack-nova-compute' returned 1: Job for openstack-nova-compute.service failed. See 'systemctl status openstack-nova-compute.service' and 'journalctl -xn' for details.

'/var/log/nova/nova-compute.log' を見ると、ironic 関連のライブラリが無くエラーが出ていたのと、下のようなページが見つかったので、nova compute ノードに 'openstack-ironic-common'と'python-ironicclient'をインストールすると、解決した。

インストール完了後、neutron-server が起動していない。

普通に、"systemctl restart neutron-server" すると、動いた。

compute ノードがハイパーバイザとして認識されない

"nova hypervisor-list"コマンドを実行しても空の表示。。。

どうやら、nova のドライバーの問題みたいで、/etc/nova/nova.conf で ironic のドライバが指定されているため、正しく認識されないよう。

# Driver to use for controlling virtualization. Options
# include: libvirt.LibvirtDriver, xenapi.XenAPIDriver,
# fake.FakeDriver, baremetal.BareMetalDriver,
# vmwareapi.VMwareVCDriver, hyperv.HyperVDriver (string value)
compute_driver=libvirt.LibvirtDriver
#compute_driver=nova.virt.ironic.IronicDriver

libvirt.LibvirtDriver を使用すると正しく認識されました。

HorizonでVM のコンソールが表示されない

compute ノードを見てみると、コンソール接続用にListenしてるはずのポートが、"127.0.0.1"で Listen していたので、関連しそうなnova.confの項目を変更。

# IP address on which instance vncservers should listen
# (string value)
vncserver_listen=0.0.0.0

さらに、controller ノードでnovncのログを見てみると、"compute0" という名前でアクセスしに行っていて、名前解決を行えずエラーになっているみたいだったので、"/etc/hosts" に直書きで名前解決。

この2点でコンソールには接続できるようになりました。

感想

やっと、色々実験出来る環境が整いました...