Openstack Rocky でプライベートクラウドを構築する!(5)

前回に引き続き nova の設定です。コンピュートノード上での作業になります。

環境

ソフト

  • 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, in 
Nov 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

スポンサーリンク