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 |
+---------------------------+