夜明け前の最も暗いとき

技術的なやったことをメモするブログ

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へブラウザからアクセスします。

f:id:jianlan:20191004232506j:plain

トップページが表示されれば正常に動作しています。インストール時に設定したパスワードを使ってログインします。

ネットワークエラー

パブリックネットワークとプライベートネットワークを作成し、ルータで接続しました。

f:id:jianlan:20191004233209j:plain

プライベートネットワークに接続する設定でインスタンスを作成したところ、失敗しました。ログを確認します。

# 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になりました。インスタンスに割り当てたセキュリティグループを確認します。

f:id:jianlan:20191005000555j:plain

外部(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のインスタンスに接続できるようになりました。