前回に引き続き nova の設定です。コンピュートノード上での作業になります。
Contents
環境
ソフト
- Ubuntu 18.04.1 Server 64bit
- Openstack Rocky
ハード
※仮想マシンでもいけました。
- CPUx2
- MEM 8G
- SSD 30G
- NIC 2 枚
IP 構成
- コントローラー ( vm-nfj-osctrln1 )
- 公開用 ( 外部 ):10.1.55.11/16
- 管理用 ( 内部 ):10.2.55.11/16
- コンピュート ( vm-nfj-oscomp1 )
- 公開用 ( 外部 ):10.1.55.21/16
- 管理用 ( 内部 ):10.2.55.21/16
コンピュートノード上での nova コンポーネントのインストールと設定
コンピュートノード上で、必要なコンポーネントをインストール後、デフォルトの設定を編集していきます
$ sudo apt install nova-compute
/etc/nova/nova.conf の設定
[DEFAULT] セクション
RabbitMQ メッセージキューアクセスを設定。91b1z0Bm5/ が RabbitMQ の openstack ユーザパスワード、vm-osctrln1 がコントローラのホスト名です。my_ip オプションを追加。10.2.55.21 はコンピュートノードの管理側の IP です。コンピュートノードでは、デフォルトでファイアウォールが有効となっているため、nova.virt.firewall.NoopFirewallDriver を設定し無効としておく必要があります。[neutron] セクションの設定に関する詳細は、Networking service install guide を参照してください。バグ対応のため、[DEFAULT] セクションから log_dir オプションを削除します。
1 [DEFAULT] 2 #log_dir = /var/log/nova 3 lock_path = /var/lock/nova 4 state_path = /var/lib/nova 5 transport_url = rabbit://openstack:91b1z0Bm5/@vm-nfj-osctrln1 6 my_ip = 10.2.55.21 7 use_neutron = true 8 firewall_driver = nove.virt.firewall.NoopFirewallDriver
[api] セクション
Identity サービスアクセスを設定していきます。
[api] # # Options under this group are used to define Nova API. auth_strategy = keystone
[keystone_authtoken] セクション
auth_url と auth_uri はどちらでもよいと思われる。NOVA_PASS が nova ユーザのパスワード、vm-nfj-osctrl1 がコントローラーのホスト名です。
[keystone_authtoken] auth_url = http://vm-nfj-osctrln1:5000/v3 memcached_servers = vm-nfj-osctrln1:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = nova password = NOVA_PASS
[vnc] セクション
リモートコンソールアクセスを有効にします。[DEFAULT]セクションに追加した、my_ip を $my_ip のように変数として利用できます。server コンポーネントはすべての IP を LISTEN し、proxy コンポーネントは、コンピュートノードの管理側 IP ( $my_ip ) でのみ LISTEN します。novncproxy_base_url は、コンピュートノード上のインスタンスのリモートコンソールに Web ブラウザを利用してアクセス可能な場所を示します。リモートコンソールにアクセスする端末がコントローラノードのホスト名で IP が解決できる必要があります。そのため、ブラウザ経由でうまくアクセスできない場合は、vm-nfj-osctrln1 の箇所はコントローラーノードの管理用 IP アドレスを指定してみてください。
[vnc] # # Virtual Network Computer (VNC) can be used to provide remote desktop # console access to instances for tenants and/or administrators. enabled = true server_listen = 0.0.0.0 server_proxyclient_address = $my_ip novncproxy_base_url = http://vm-nfj-osctrln1:6080/vnc_auto.html
[glance] セクション
[glance] # Configuration options for the Image service api_servers = http://vm-nfj-osctrln1:9292
[oslo_concurrency] セクション
[oslo_concurrency] lock_path = /var/lib/nova/tmp
[placement] セクション
PLACEMENT_PASS は Placement ユーザのパスワードです。vm-nfj-osctrln1 はコントローラーノードのホスト名です。
[placement] os_region_name = openstack region_name = Tokyo project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://vm-nfj-osctrln1:5000/v3 username = placement password = PLACEMENT_PASS
virt_type の設定
コンピュートノード上で仮想マシンのアクセラレーションがサポートされているかを確認します。0 の場合は、/etc/nova-compute.conf の [libvirt] セクションで virt_type = qemu にします。0 以外の場合はデフォルトの kvm を利用しますので特に何もする必要はありません。
$ sudo egrep -c '(vmx|svm)' /proc/cpuinfo 16
nova-compute サービスの再起動
$ sudo service nova-compute restart
コントローラーノード上での確認
エラーも出ず、何も返されないときははコンピュートノード側で問題が発生している可能性が高いと思います。トラブルシューティングの項目を参考にしてください。
[email protected]:~$ . admin-openrc [email protected]:~$ openstack compute service list --service nova-compute +----+--------------+-----------------+------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+--------------+-----------------+------+---------+-------+----------------------------+ | 19 | nova-compute | vm-nfj-oscompn1 | nova | enabled | up | 2018-11-17T17:25:09.000000 | +----+--------------+-----------------+------+---------+-------+----------------------------+
コンピュートノードの参照と手動追加
新規にコントローラーノードを追加した後に手動で実行する必要があります。
[email protected]:~$ sudo su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova [sudo] password for daisuke: Found 2 cell mappings. Skipping cell0 since it does not contain hosts. Getting computes from cell 'cell1': d6d4e349-038e-409f-af7a-d39a896188da Checking host mapping for compute host 'vm-nfj-oscompn1': 8fec574d-fd33-410c-85e3-86b99a81998d Creating host mapping for compute host 'vm-nfj-oscompn1': 8fec574d-fd33-410c-85e3-86b99a81998d Found 1 unmapped computes in cell: d6d4e349-038e-409f-af7a-d39a896188da
discover_hosts_in_cells_interval について
/etc/nova/nova.conf の [scheduler] セクションにある、discover_hosts_in_cells_interval について、Ubuntu 18.04 の値を確認したところ、-1 がセットされていてかつコメントアウトされていました。そのため、デフォルト値は設定されていないということになります。新規に構築されたコンピュートノードを自動追加したい場合は 300 とかを設定しておくとよいようです。
[scheduler] #discover_hosts_in_cells_interval = -1
トラブルシューティング
問題1 : tcp/8774 あての接続が “[Errno 111] Connection refused” で拒否される
$ openstack compute service list --service nova-compute Unable to establish connection to http://vm-nfj-osctrln1:8774/v2.1/os-services?binary=nova-compute: HTTPConnectionPool(host='vm-nfj-osctrln1', port=8774): Max retries exceeded with url: /v2.1/os-services?binary=nova-compute (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))
対策1
tcp/8774 を LISTEN していなかった。コントローラーノードに必要な nova 関連のパッケージがインストールされていないとこうなる。
問題2 : nova-api などのコンポーネントインストールに失敗する
間違えて、コントローラーノード上にnova-computeパッケージをインストールしてしまい、`apt remove nova-compute –purge` 後 `apt autoremove` したらこうなった。。
$ sudo apt install nova-api nova-conductor nova-novncproxy nova-scheduler nova-placement-api Reading package lists... Done Building dependency tree Reading state information... Done nova-api is already the newest version (2:18.0.1-0ubuntu1~cloud0). nova-conductor is already the newest version (2:18.0.1-0ubuntu1~cloud0). nova-novncproxy is already the newest version (2:18.0.1-0ubuntu1~cloud0). nova-placement-api is already the newest version (2:18.0.1-0ubuntu1~cloud0). nova-scheduler is already the newest version (2:18.0.1-0ubuntu1~cloud0). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 7 not fully installed or removed. After this operation, 0 B of additional disk space will be used. Do you want to continue? [Y/n] y Setting up nova-common (2:18.0.1-0ubuntu1~cloud0) ... chown: cannot access '/etc/nova/*.conf': No such file or directory chown: cannot access '/etc/nova/*.ini': No such file or directory dpkg: error processing package nova-common (--configure): installed nova-common package post-installation script subprocess returned error exit status 1 dpkg: dependency problems prevent configuration of python-nova: python-nova depends on nova-common (= 2:18.0.1-0ubuntu1~cloud0); however: Package nova-common is not configured yet. dpkg: error processing package python-nova (--configure): dependency problems - leaving unconfigured dpkg: dependency problems prevent configuration of nova-placement-api: nova-placement-api depends on python-nova (= 2:18.0.1-0ubuntu1~cloud0) | python3-nova (= 2:18.0.1-0ubuntu1~cloud0); however: Package python-nova is not configured yet. Package python3-nova is not installed. dpkg: error processing package nova-placement-api (--configure): dependency problems - leaving unconfigured dpkg: dependency problems prevent configuration of nova-novncproxy: nova-novncproxy depends on python-nova (= 2:18.0.1-0ubuntNo apport report written because the error message indicates its a followup error from a previous failure. No apport report written because the error message indicates its a followup error from a previous failure. No apport report written because MaxReports is reached already No apport report written because MaxReports is reached already No apport report written because MaxReports is reached already No apport report written because MaxReports is reached already u1~cloud0) | python3-nova (= 2:18.0.1-0ubuntu1~cloud0); however: Package python-nova is not configured yet. Package python3-nova is not installed. dpkg: error processing package nova-novncproxy (--configure): dependency problems - leaving unconfigured dpkg: dependency problems prevent configuration of nova-scheduler: nova-scheduler depends on python-nova (= 2:18.0.1-0ubuntu1~cloud0) | python3-nova (= 2:18.0.1-0ubuntu1~cloud0); however: Package python-nova is not configured yet. Package python3-nova is not installed. dpkg: error processing package nova-scheduler (--configure): dependency problems - leaving unconfigured dpkg: dependency problems prevent configuration of nova-api: nova-api depends on python-nova (= 2:18.0.1-0ubuntu1~cloud0) | python3-nova (= 2:18.0.1-0ubuntu1~cloud0); however: Package python-nova is not configured yet. Package python3-nova is not installed. dpkg: error processing package nova-api (--configure): dependency problems - leaving unconfigured dpkg: dependency problems prevent configuration of nova-conductor: nova-conductor depends on python-nova (= 2:18.0.1-0ubuntu1~cloud0) | python3-nova (= 2:18.0.1-0ubuntu1~cloud0); however: Package python-nova is not configured yet. Package python3-nova is not installed. dpkg: error processing package nova-conductor (--configure): dependency problems - leaving unconfigured Errors were encountered while processing: nova-common python-nova nova-placement-api nova-novncproxy nova-scheduler nova-api nova-conductor E: Sub-process /usr/bin/dpkg returned an error code (1)
対策2
`dpkg -P –force-remove-reinstreq` で問題のあるパッケージを完全に削除してから再度インストール。
$ sudo dpkg -P --force-remove-reinstreq nova-common python-nova nova-placement-api nova-novncproxy nova-scheduler nova-api nova-conductor
問題3 : コンピュートノードが見つからない
コントローラノード側ではとりあえず何も返されない。
[email protected]:~$ . admin-openrc [email protected]:~$ openstack compute service list --service nova-compute
探してみるが、0 が返される。
[email protected]:~$ sudo su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova Found 2 cell mappings. Skipping cell0 since it does not contain hosts. Getting computes from cell 'cell1': d6d4e349-038e-409f-af7a-d39a896188da Found 0 unmapped computes in cell: d6d4e349-038e-409f-af7a-d39a896188da
対策3
コンピュートノード側の syslog を確認。サービス起動後に ValueError が出力されていた。パスワード文字列の最後に / が含まれているのでエラーとなっていた。/etc/nova/nova.conf の [DEFAULT] セクションにある、transport_url の設定を確認する。
transport_url = rabbit://openstack:91b1z0Bm5/@vm-nfj-osctrln1
/var/log/syslog の出力内容
Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: Traceback (most recent call last): Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: File "/usr/bin/nova-compute", line 10, inNov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: sys.exit(main()) Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: File "/usr/lib/python2.7/dist-packages/nova/cmd/compute.py", line 44, in main Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: config.parse_args(sys.argv) Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: File "/usr/lib/python2.7/dist-packages/nova/config.py", line 60, in parse_args Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: rpc.init(CONF) Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: File "/usr/lib/python2.7/dist-packages/nova/rpc.py", line 63, in init Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: TRANSPORT = create_transport(get_transport_url()) Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: File "/usr/lib/python2.7/dist-packages/nova/rpc.py", line 172, in get_transport_url Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: return messaging.TransportURL.parse(CONF, url_str) Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: File "/usr/lib/python2.7/dist-packages/debtcollector/removals.py", line 261, in wrapper Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: return f(*args, **kwargs) Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: File "/usr/lib/python2.7/dist-packages/oslo_messaging/transport.py", line 558, in parse Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: port = int(port) Nov 17 16:51:28 vm-nfj-oscompn1 nova-compute[23366]: ValueError: invalid literal for int() with base 10: '91b1z0Bm5' Nov 17 16:51:29 vm-nfj-oscompn1 systemd[1]: nova-compute.service: Main process exited, code=exited, status=1/FAILURE Nov 17 16:51:29 vm-nfj-oscompn1 systemd[1]: nova-compute.service: Failed with result 'exit-code'. Nov 17 16:51:29 vm-nfj-oscompn1 systemd[1]: nova-compute.service: Service hold-off time over, scheduling restart. Nov 17 16:51:29 vm-nfj-oscompn1 systemd[1]: nova-compute.service: Scheduled restart job, restart counter is at 244.
エスケープしてみる
transport_url = rabbit://openstack:91b1z0Bm5\/@vm-nfj-osctrln1
だめだった
Nov 17 16:57:06 vm-nfj-oscompn1 nova-compute[27635]: ValueError: invalid literal for int() with base 10: '91b1z0Bm5\\'
シングルクォートで囲ってみる
transport_url = rabbit://'openstack:91b1z0Bm5/'@vm-nfj-osctrln1
だめだった
Nov 17 17:01:10 vm-nfj-oscompn1 nova-compute[30702]: ValueError: invalid literal for int() with base 10: '91b1z0Bm5'
` とか?
transport_url = rabbit://`openstack:91b1z0Bm5/`@vm-nfj-osctrln1
だめだった
Nov 17 17:19:24 vm-nfj-oscompn1 nova-compute[9142]: ValueError: invalid literal for int() with base 10: '`91b1z0Bm5'
変数に入れてみる
RABBIT_PASS = '91b1z0Bm5/' transport_url = rabbit://openstack:[email protected]
だめだった
Nov 17 17:04:54 vm-nfj-oscompn1 nova-compute[32235]: oslo_config.cfg.NoSuchOptError: no such option transport_url in group [DEFAULT]
パスワード変更w
コントローラーノード側で RabbitMQ ユーザ openstack のパスワードを RABBIT_PASS に変更。。
$ sudo rabbitmqctl change_password openstack RABBIT_PASS Changing password for user "openstack"
transport_url = rabbit://openstack:[email protected]
解消した
Nov 17 17:24:40 vm-nfj-oscompn1 systemd[1]: Stopping OpenStack Compute... Nov 17 17:24:43 vm-nfj-oscompn1 systemd[1]: Stopped OpenStack Compute. Nov 17 17:24:43 vm-nfj-oscompn1 systemd[1]: Started OpenStack Compute.
次回は neutron