OpenStackインストールで躓いたところメモ
OpenStackを仮想環境上に構築しました。インストールに手間取ったので対処したときのメモです。
OpenStackのインストール
- 動作環境
CentOS 7.7 OpenStack Stein 4 VCPU メモリ10GB ストレージ100GB
仮想環境上にOpenStackを構築する場合は、Nested KVMが構成されている必要があります。また、メモリが8GB以下の場合はうまくインストールできなかったため、10GB確保しました。
インストールはpackstackを使用します。下記の設定でアンサーファイルを作成しました。
# packstack --gen-answer-file=/root/answer.txt --default-password=hogehoge --os-heat-install=y --os-heat-cfn-install=y --os-neutron-l2-agent=openvswitch
この設定でインストールを実行します。
# packstack --answer-file=/root/answer.txt Welcome to the Packstack setup utility The installation log file is available at: /var/tmp/packstack/20190926-224904-bfh5v2/openstack-setup.log Installing: Clean Up [ DONE ] ... reparing Puppet manifests [ DONE ] Copying Puppet modules and manifests [ DONE ] Applying 192.168.11.118_controller.pp Testing if puppet apply is finished: 192.168.11.118_controller.pp 192.168.11.118_controller.pp: [ ERROR ] Applying Puppet manifests [ ERROR ] ERROR : Error appeared during Puppet run: 192.168.11.118_controller.pp Error: /Stage[main]/Neutron::Db::Sync/Exec[neutron-db-sync]: Failed to call refresh: Command exceeded timeout
インストール中にタイムアウトが発生したためエラーになっています。
タイムアウトの対処
以下のファイルを編集し、"db_sync_timeout = 300"を"db_sync_timeout = 0"に書き換えタイムアウトしないように変更します。
- /usr/share/openstack-puppet/modules/neutron/manifests/db/sync.pp
- /usr/share/openstack-puppet/modules/nova/manifests/db/sync.pp
- /usr/share/openstack-puppet/modules/nova/manifests/db/sync_api.pp
- /usr/share/openstack-puppet/modules/nova/manifests/db/online_data_migrations.pp
加えて、引数に--timeout=0を追加することでタイムアウトを無効にします。
# packstack --answer-file=/root/answer.txt --timeout=0 (略) Applying Puppet manifests [ DONE ] Finalizing [ DONE ] **** Installation completed successfully ******
以上で、インストールが完了しました。インストールしたVMのIPへブラウザからアクセスします。
トップページが表示されれば正常に動作しています。インストール時に設定したパスワードを使ってログインします。
ネットワークエラー
パブリックネットワークとプライベートネットワークを作成し、ルータで接続しました。
プライベートネットワークに接続する設定でインスタンスを作成したところ、失敗しました。ログを確認します。
# cat /var/log/neutron/server.log | grep -v INFO | tail 2019-09-27 08:05:29.914 3780 ERROR neutron.plugins.ml2.managers [req-5712b572-5604-463c-ba0a-f19037d10fd1 - - - - -] Failed to bind port 659b58ed-2b8d-4eeb-9b5a-80d3ca9b4674 on host openstack.local for vnic_type normal using segments [{'network_id': '456103af-87cf-4ffb-bbc6-1405e6156438', 'segmentation_id': 12, 'physical_network': None, 'id': '14752302-3a57-4eed-975f-1724ead64146', 'network_type': u'geneve'}] 2019-09-27 08:05:29.956 3780 ERROR neutron.plugins.ml2.managers [req-5712b572-5604-463c-ba0a-f19037d10fd1 - - - - -] Failed to bind port 659b58ed-2b8d-4eeb-9b5a-80d3ca9b4674 on host openstack.local for vnic_type normal using segments [{'network_id': '456103af-87cf-4ffb-bbc6-1405e6156438', 'segmentation_id': 12, 'physical_network': None, 'id': '14752302-3a57-4eed-975f-1724ead64146', 'network_type': u'geneve'}] 2019-09-27 08:05:29.981 3780 ERROR neutron.plugins.ml2.managers [req-5712b572-5604-463c-ba0a-f19037d10fd1 - - - - -] Failed to bind port 659b58ed-2b8d-4eeb-9b5a-80d3ca9b4674 on host openstack.local for vnic_type normal using segments [{'network_id': '456103af-87cf-4ffb-bbc6-1405e6156438', 'segmentation_id': 12, 'physical_network': None, 'id': '14752302-3a57-4eed-975f-1724ead64146', 'network_type': u'geneve'}] 2019-09-27 08:05:30.018 3780 ERROR neutron.plugins.ml2.managers [req-5712b572-5604-463c-ba0a-f19037d10fd1 - - - - -] Failed to bind port 659b58ed-2b8d-4eeb-9b5a-80d3ca9b4674 on host openstack.local for vnic_type normal using segments [{'network_id': '456103af-87cf-4ffb-bbc6-1405e6156438', 'segmentation_id': 12, 'physical_network': None, 'id': '14752302-3a57-4eed-975f-1724ead64146', 'network_type': u'geneve'}] 2019-09-27 08:05:30.048 3780 ERROR neutron.plugins.ml2.managers [req-5712b572-5604-463c-ba0a-f19037d10fd1 - - - - -] Failed to bind port 659b58ed-2b8d-4eeb-9b5a-80d3ca9b4674 on host openstack.local for vnic_type normal using segments [{'network_id': '456103af-87cf-4ffb-bbc6-1405e6156438', 'segmentation_id': 12, 'physical_network': None, 'id': '14752302-3a57-4eed-975f-1724ead64146', 'network_type': u'geneve'}] 2019-09-27 08:05:30.071 3780 ERROR neutron.plugins.ml2.managers [req-5712b572-5604-463c-ba0a-f19037d10fd1 - - - - -] Failed to bind port 659b58ed-2b8d-4eeb-9b5a-80d3ca9b4674 on host openstack.local for vnic_type normal using segments [{'network_id': '456103af-87cf-4ffb-bbc6-1405e6156438', 'segmentation_id': 12, 'physical_network': None, 'id': '14752302-3a57-4eed-975f-1724ead64146', 'network_type': u'geneve'}] 2019-09-27 08:05:30.092 3780 ERROR neutron.plugins.ml2.managers [req-5712b572-5604-463c-ba0a-f19037d10fd1 - - - - -] Failed to bind port 659b58ed-2b8d-4eeb-9b5a-80d3ca9b4674 on host openstack.local for vnic_type normal using segments [{'network_id': '456103af-87cf-4ffb-bbc6-1405e6156438', 'segmentation_id': 12, 'physical_network': None, 'id': '14752302-3a57-4eed-975f-1724ead64146', 'network_type': u'geneve'}] 2019-09-27 08:05:30.116 3780 ERROR neutron.plugins.ml2.managers [req-5712b572-5604-463c-ba0a-f19037d10fd1 - - - - -] Failed to bind port 659b58ed-2b8d-4eeb-9b5a-80d3ca9b4674 on host openstack.local for vnic_type normal using segments [{'network_id': '456103af-87cf-4ffb-bbc6-1405e6156438', 'segmentation_id': 12, 'physical_network': None, 'id': '14752302-3a57-4eed-975f-1724ead64146', 'network_type': u'geneve'}] 2019-09-27 08:05:30.141 3780 ERROR neutron.plugins.ml2.managers [req-5712b572-5604-463c-ba0a-f19037d10fd1 - - - - -] Failed to bind port 659b58ed-2b8d-4eeb-9b5a-80d3ca9b4674 on host openstack.local for vnic_type normal using segments [{'network_id': '456103af-87cf-4ffb-bbc6-1405e6156438', 'segmentation_id': 12, 'physical_network': None, 'id': '14752302-3a57-4eed-975f-1724ead64146', 'network_type': u'geneve'}] 2019-09-27 08:05:30.167 3780 ERROR neutron.plugins.ml2.managers [req-5712b572-5604-463c-ba0a-f19037d10fd1 - - - - -] Failed to bind port 659b58ed-2b8d-4eeb-9b5a-80d3ca9b4674 on host openstack.local for vnic_type normal using segments [{'network_id': '456103af-87cf-4ffb-bbc6-1405e6156438', 'segmentation_id': 12, 'physical_network': None, 'id': '14752302-3a57-4eed-975f-1724ead64146', 'network_type': u'geneve'}]
Failed to bind portということでOVSブリッジへのポート割り付けに失敗しています。
# cat /var/log/messages | grep -v root | tail -n 100 Sep 27 17:31:45 openstack nova-compute: Traceback (most recent call last): Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/eventlet/hubs/poll.py", line 109, in wait Sep 27 17:31:45 openstack nova-compute: listener.cb(fileno) Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/eventlet/greenthread.py", line 219, in main Sep 27 17:31:45 openstack nova-compute: result = function(*args, **kwargs) Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/nova/utils.py", line 800, in context_wrapper Sep 27 17:31:45 openstack nova-compute: return func(*args, **kwargs) Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 1538, in _allocate_network_async Sep 27 17:31:45 openstack nova-compute: six.reraise(*exc_info) Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 1521, in _allocate_network_async Sep 27 17:31:45 openstack nova-compute: resource_provider_mapping=resource_provider_mapping) Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/nova/network/neutronv2/api.py", line 1123, in allocate_for_instance Sep 27 17:31:45 openstack nova-compute: bind_host_id, available_macs, requested_ports_dict) Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/nova/network/neutronv2/api.py", line 1256, in _update_ports_for_instance Sep 27 17:31:45 openstack nova-compute: vif.destroy() Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__ Sep 27 17:31:45 openstack nova-compute: self.force_reraise() Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise Sep 27 17:31:45 openstack nova-compute: six.reraise(self.type_, self.value, self.tb) Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/nova/network/neutronv2/api.py", line 1226, in _update_ports_for_instance Sep 27 17:31:45 openstack nova-compute: port_client, instance, port_id, port_req_body) Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/nova/network/neutronv2/api.py", line 581, in _update_port Sep 27 17:31:45 openstack nova-compute: _ensure_no_port_binding_failure(port) Sep 27 17:31:45 openstack nova-compute: File "/usr/lib/python2.7/site-packages/nova/network/neutronv2/api.py", line 251, in _ensure_no_port_binding_failure Sep 27 17:31:45 openstack nova-compute: raise exception.PortBindingFailed(port_id=port['id']) Sep 27 17:31:45 openstack nova-compute: PortBindingFailed: Binding failed for port 7d575688-172a-4a87-bcea-779f80f24f9f, please check neutron logs for more information. Sep 27 17:31:45 openstack nova-compute: Removing descriptor: 25
OpenVSwitchだと上手くいかないようなのでL2 AgentをOVNに変更してOpenStackを再インストールします。
# packstack --gen-answer-file=/root/answer.txt --default-password=hogehoge --os-heat-install=y --os-heat-cfn-install=y --os-neutron-l2-agent=ovn # packstack --answer-file=/root/answer.txt --timeout=0
ネットワークを再設定した後、インスタンスを作成し起動させます。今回は正常にインスタンスを起動できました。
外部ネットワークとの通信失敗
フローティングIP(192.168.10.248)をインスタンスに割り当てることでSNATにより通信ができるよう設定したのですが、疎通がNGになりました。インスタンスに割り当てたセキュリティグループを確認します。
外部(0.0.0.0/0)からのICMPを許可しているため、どのホストからもping応答するよう設定されています。
続いてネットワークの到達性を確認します。作成したインスタンスからルータのデフォルトゲートウェイへpingを実行します。
$ ping 10.0.0.1 -c 4 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=1.33 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=0.854 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=255 time=0.888 ms 64 bytes from 10.0.0.1: icmp_seq=4 ttl=255 time=0.988 ms --- 10.0.0.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 0.854/1.016/1.335/0.191 ms
OpenStackホストのbr-exにアドレスを振って疎通を確認します。
# vi /etc/sysconfig/network-scripts/ifcfg-br-ex (略) IPADDR=192.168.10.254 NETMASK=255.255.254.0 # systemctl restart network
外部の別端末からpingを実施します。
$ ping 192.168.10.254 -c 4 PING 192.168.10.254 (192.168.10.254) 56(84) bytes of data. --- 192.168.10.254 ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 2999ms
疎通NGなのでopenstackホストのOVSブリッジからインターフェイスが被疑となります。
仮想マシンの設定を確認したところネットワークが以下のようにdirect(macvtap)で設定されていました。
<interface type='direct'> <mac address='52:54:00:98:12:45'/> <source dev='ovsbr0' mode='bridge'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
macvtapでは接続に制限があるのでbridgeに変更します。
<interface type='bridge'> <mac address='52:54:00:98:12:45'/> <source bridge='ovsbr0'/> <virtualport type='openvswitch'> <parameters interfaceid='557901d9-3716-4275-b2aa-7b6535eaecc7'/> </virtualport> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
この変更により、外部からOpenStackのインスタンスに接続できるようになりました。