Novaのインストールと設定(コントローラーノード)

データベースを作成

MariaDBにデータベースnovaを作成します。

controller# mysql
MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
  IDENTIFIED BY 'password';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
  IDENTIFIED BY 'password';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
  IDENTIFIED BY 'password';

MariaDB [(none)]> quit

データベースの確認

MariaDBにnovaユーザーでログインし、データベースの閲覧が可能であることを確認します。

controller# mysql -u nova -p
Enter password: ← MariaDBのnovaパスワードpasswordを入力
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| nova               |
| nova_api           |
| nova_cell0         |
+--------------------+

ユーザーとサービス、APIエンドポイントの作成

以下コマンドで認証情報を読み込んだあと、サービスとAPIエンドポイントを設定します。

環境変数ファイルの読み込み

controller# source admin-openrc

novaユーザーの作成

controller# openstack user create --domain default --password-prompt nova
User Password: password  ← novaユーザーのパスワードを設定(本書はpasswordを設定)
Repeat User Password: password
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 8a7dbf5279404537b1c7b86c033620fe |
| name                | nova                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

novaユーザーをadminロールに追加

controller# openstack role add --project service --user nova admin

novaサービスの作成

controller# openstack service create --name nova \
  --description "OpenStack Compute" compute

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 060d59eac51b4594815603d75a00aba2 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+

ComputeサービスのAPIエンドポイントを作成

controller# openstack endpoint create --region RegionOne \
  compute public http://controller:8774/v2.1
controller# openstack endpoint create --region RegionOne \
  compute internal http://controller:8774/v2.1
controller# openstack endpoint create --region RegionOne \
  compute admin http://controller:8774/v2.1

Placementサービスのユーザーを作成

controller# openstack user create --domain default --password-prompt placement
User Password: password  ← placementユーザーのパスワードを設定(本書はpasswordを設定)
Repeat User Password: password
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | fa742015a6494a949f67629884fc7ec8 |
| name                | placement                        |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

Placementユーザーをadminロールに追加

controller# openstack role add --project service --user placement admin

Placementサービスの作成

controller# openstack service create --name placement \
  --description "Placement API" placement

PlacementサービスのAPIエンドポイントを作成

controller# openstack endpoint create --region RegionOne \
  placement public http://controller:8778
controller# openstack endpoint create --region RegionOne \
  placement internal http://controller:8778
controller# openstack endpoint create --region RegionOne \
  placement admin http://controller:8778

パッケージのインストール

aptコマンドでNova関連のパッケージをインストールします。

controller# apt install nova-api nova-conductor nova-consoleauth \
  nova-novncproxy nova-scheduler nova-placement-api

Novaの設定変更

nova.confの設定を行います。 すでにいくつかの設定は行われています。各セクションから設定項目を探して同じように設定するか、項目が見つからない場合は設定を追加してください。言及していない設定はそのままで構いません。viで/[DEFAULTのようにセクション名の最後の括弧をのぞいて検索すると、項目を見つけられやすいと思います。

[database]のconnectionと、[placement]のos_region_nameが定義済みになっていました。別の設定をする場合は注意しましょう。引き続き[DEFAULT]セクションにlock_pathが定義されていますので、コメントアウトするようにしましょう。

controller# vi /etc/nova/nova.conf

[DEFAULT]
...
#lock_path = /var/lock/nova  ← コメントアウト
my_ip = 10.0.0.111
transport_url = rabbit://openstack:password@controller
use_neutron = True
vif_plugging_is_fatal = True
vif_plugging_timeout = 300

[api]
...
auth_strategy = keystone

[api_database]
#connection = sqlite:////var/lib/nova/nova_api.sqlite  ← コメントアウト
...
connection = mysql+pymysql://nova:password@controller/nova_api

[database]
#connection = sqlite:////var/lib/nova/nova.sqlite  ← コメントアウト
connection = mysql+pymysql://nova:password@controller/nova

[glance]
...
api_servers = http://controller:9292

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = password

[vnc]
enabled = true
...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip

[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp

[placement]
#os_region_name = openstack    ← コメントアウト
...
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:35357/v3
username = placement
password = password

次のコマンドで正しく設定を行ったか確認します。

controller# less /etc/nova/nova.conf | egrep -v "^\s*$|^\s*#"

データベースに展開

次のコマンドでnovaデータベースのセットアップを行います。

controller# su -s /bin/sh -c "nova-manage api_db sync" nova
controller# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
controller# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
controller# su -s /bin/sh -c "nova-manage db sync" nova

最後のコマンドは処理に少々、時間がかかります。

Nova Cellの確認

controller# nova-manage cell_v2 list_cells

Novaサービスの再起動

設定を反映させるため、Novaのサービスを再起動します。

controller# service nova-api restart
controller# service nova-consoleauth restart
controller# service nova-scheduler restart
controller# service nova-conductor restart
controller# service nova-novncproxy restart

不要なデータベースファイルの削除

データベースはMariaDBを使用するため、不要なSQLiteファイルを削除します。

controller# rm /var/lib/nova/nova.sqlite
controller# rm /var/lib/nova/nova_api.sqlite

Nova Computeのインストールと設定(コンピュートノード)

ここまでcontrollerノードの環境構築を行ってきましたが、ここでcomputeノードに切り替えて設定を行います。

パッケージのインストール

aptコマンドを使って、nova-computeパッケージをインストールします。多くのパッケージをインストールするため、インストール完了まで少々時間を要します。

compute# apt install nova-compute

Novaの設定を変更

nova.confの設定を行います。 すでにいくつかの設定は行われています。各セクションから設定項目を探して同じように設定するか、項目が見つからない場合は設定を追加してください。言及していない設定はそのままで構いません。viで/[DEFAULTのようにセクション名の最後の括弧をのぞいて検索すると、項目を見つけられやすいと思います。

computeノードではデータベースサーバーとの接続は不要なため、設定ファイルにデータベースの項目が設定されている場合はコメント化してください。

compute# vi /etc/nova/nova.conf

[DEFAULT]
#log_dir = /var/log/nova   ← コメントアウト
#lock_path = /var/lock/nova   ← コメントアウト
...
transport_url = rabbit://openstack:password@controller
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
my_ip = 10.0.0.112

[api]
...
auth_strategy = keystone

[glance]
...
api_servers = http://controller:9292

[vnc]
...
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html

[api_database]

connection = sqlite:////var/lib/nova/nova_api.sqlite ← コメントアウト

[database] ...

connection = sqlite:////var/lib/nova/nova.sqlite ← コメントアウト

[keystone_authtoken] ... auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = nova password = password

[oslo_concurrency] ... lock_path = /var/lib/nova/tmp

[placement]

os_region_name = openstack ← コメントアウト

... os_region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://controller:35357/v3 username = placement password = password


次のコマンドで正しく設定を行ったか確認します。

```shell
compute# less /etc/nova/nova.conf | egrep -v "^\s*$|^\s*#"

まず次のコマンドを実行し、computeノードでLinux KVMが動作可能であることを確認します。コマンド結果が1以上の場合は、CPU仮想化支援機能がサポートされています。 もしこのコマンド結果が0の場合は仮想化支援機能がサポートされていないか、設定が有効化されていないので、libvirtでKVMの代わりにQEMUを使用します。後述のnova-compute.confの設定でvirt_type = qemuを設定します。

compute# cat /proc/cpuinfo |egrep 'vmx|svm'|wc -l
4

VMXもしくはSVM対応CPUの場合は「virt_type = kvm」と設定することにより、仮想化部分のパフォーマンスが向上します。先のコマンドの実行結果が0になる場合は「virt_type = qemu」を設定してください。

compute# vi /etc/nova/nova-compute.conf

[libvirt]
...
virt_type = kvm

Novaコンピュートサービスの再起動

設定を反映させるため、nova-computeサービスを再起動します。

compute# service nova-compute restart

nova-computeサービスが起動しない場合は/var/log/nova/nova-compute.logを確認してください。Ocata以降ではPlacement APIの設定がnova.confに存在しないとnova-computeサービスを起動できませんので注意してください。

また、AMQP server on controller:5672 is unreachableのようなメッセージが出る場合はcontrollerのRabbitMQサービスが起動しているか、Bind IPアドレスやポートは適切かを確認します。

コントローラーノードとの疎通確認

computeとcontrollerノードの疎通を確認します。操作するノードをcontrollerノードに切り替えて、各コマンドを実行してください。

controller# source admin-openrc

Cellデータベースへのコンピュートノードの追加

controller# openstack compute service list --service nova-compute
+----+--------------+---------+------+---------+-------+----------------------------+
| ID | Binary       | Host    | Zone | Status  | State | Updated At                 |
+----+--------------+---------+------+---------+-------+----------------------------+
|  6 | nova-compute | compute | nova | enabled | up    | 2017-09-05T07:07:03.000000 |
+----+--------------+---------+------+---------+-------+----------------------------+

controller# 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 compute nodes from cell 'cell1': 3da28a07-3e02-4b58-99bd-bc03a120b81c
Found 1 unmapped computes in cell: 3da28a07-3e02-4b58-99bd-bc03a120b81c
Checking host mapping for compute host 'compute': 6ac62de6-08bf-4bba-aa4e-f1027419bc59
Creating host mapping for compute host 'compute': 6ac62de6-08bf-4bba-aa4e-f1027419bc59

Novaサービスの確認

Novaコンピュートサービスの状態を確認します。openstack compute service listコマンドで関連サービスのステータスを確認します。またopenstack catalog listコマンドでIdentityサービスのAPIエンドポイントのリストを表示して、サービスとの接続を確認します。nova,placement,keystone,glanceサービスが表示され、それぞれpublic,admin,internalのエンドポイントが表示されていることを確認します。

また、イメージサービスから情報を引き出せるか確認するため、openstack image listを実行します。CellsとPlacement APIが正常に動作しているか確認するためにnova-status upgrade checkコマンドを実行します。

controller# nova-status upgrade check
+---------------------------+
| Upgrade Check Results     |
+---------------------------+
| Check: Cells v2           |
| Result: Success           |
| Details: None             |
+---------------------------+
| Check: Placement API      |
| Result: Success           |
| Details: None             |
+---------------------------+
| Check: Resource Providers |
| Result: Success           |
| Details: None             |
+---------------------------+

results matching ""

    No results matching ""