OpenStack Ussuri マニュアルインストールその5―Nova 編
- Nova は VM インスタンスの起動・停止など管理する
- 裏で KVM/QEMU の
libvirt
を叩く(libvirt
以外もできるらしい)
コントローラノード
OpenStack Docs: Install and configure controller node for Ubuntu
Controller
- コントローラノードには主に VM インスタンスを計画的に建てるための API 群が入る(?)
前提条件
OpenStack Docs: Install and configure controller node for Ubuntu - Prerequisites
Nova をインストールする前にデータベースを作成する必要がある
root user
mysql
# 以下は`MariaDB [(none)]>`のプロンプトに入力する CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
-
Caution
NOVA_DBPASS
は適切なパスワードに書き換える nova_api
,nova
,nova_cell0
データベースの作成とアクセス権限の付与
-
Caution
admin
環境スクリプトの読み込みany user
. admin-openrc
サービス資格情報
nova
ユーザ作成any user
openstack user create --domain default --password-prompt nova # 対話形式のパスワードプロンプトがでる User Password: Repeat User Password:
+---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 8a7dbf5279404537b1c7b86c033620fe | | name | nova | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+
-
パスワードプロンプトでは Caution
NOVA_PASS
を入力
-
パスワードプロンプトでは Caution
service
プロジェクト、nova
ユーザにadmin
の役割を割り当てるany user
openstack role add --project service --user nova admin
compute
サービス (name: nova
) を作成any user
openstack service create --name nova --description "OpenStack Compute" compute
+-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Compute | | enabled | True | | id | 060d59eac51b4594815603d75a00aba2 | | name | nova | | type | compute | +-------------+----------------------------------+
compute
サービスに API エンドポイント作成any user
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
+--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | enabled | True | | id | 3c1caa473bfe4390a11e7177894bcc7b | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 060d59eac51b4594815603d75a00aba2 | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1 | +--------------+-------------------------------------------+
any user
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
+--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | enabled | True | | id | e3c918de680746a586eac1f2d9bc10ab | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 060d59eac51b4594815603d75a00aba2 | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1 | +--------------+-------------------------------------------+
any user
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
+--------------+-------------------------------------------+ | Field | Value | +--------------+-------------------------------------------+ | enabled | True | | id | 38f7af91666a47cfb97b4dc790b94424 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 060d59eac51b4594815603d75a00aba2 | | service_name | nova | | service_type | compute | | url | http://controller:8774/v2.1 | +--------------+-------------------------------------------+
public
、internal
、admin
にそれぞれ作成
Nova API インストール
OpenStack Docs: Install and configure controller node for Ubuntu - Install and configure components
パッケージインストール
root user
apt install nova-api nova-conductor nova-novncproxy nova-scheduler
/etc/nova/nova.conf
編集[DEFAULT] # ... # バグがあるようなので`log_dir`は消す # log_dir = ... # コントローラノードの管理ネットワークIPアドレス # ex) my_ip = 192.168.0.11 my_ip = CONTROLLER_MANAGEMENT_IP # `RABBIT_PASS`は適切なパスワードに書き換える transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ # ... [api_database] # ... # `NOVA_DBPASS`は適切なパスワードに書き換える connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api [database] # ... # `NOVA_DBPASS`は適切なパスワードに書き換える connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova [api] # ... # `keystone`を利用することを指定 auth_strategy = keystone [keystone_authtoken] # 他のオプションはすべて削除またはコメントアウトする # `NOVA_PASS`は適切なパスワードに書き換える www_authenticate_uri = http://controller:5000/ auth_url = http://controller:5000/ memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = NOVA_PASS [neutron] # 次の手順でインストールするNeutronの設定部分も先に書いておく # 他のオプションはすべて削除またはコメントアウトする # `NEUTRON_PASS`、`METADATA_SECRET`は適切なパスワードに書き換える auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS service_metadata_proxy = true metadata_proxy_shared_secret = METADATA_SECRET [vnc] # ... enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip [glance] # ... # GlanceのAPIサーバ api_servers = http://controller:9292 [oslo_concurrency] # ... lock_path = /var/lib/nova/tmp [placement] # 他のオプションはすべて削除またはコメントアウトする # `PLACEMENT_PASS`は適切なパスワードに書き換える region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://controller:5000/v3 username = placement password = PLACEMENT_PASS # ...
Caution
RABBIT_PASS
は適切なパスワードに書き換えるCaution
NOVA_DBPASS
は適切なパスワードに書き換えるCaution
NOVA_PASS
は適切なパスワードに書き換えるCaution
NEUTRON_PASS
は適切なパスワードに書き換えるCaution
METADATA_SECRET
は適切なパスワードに書き換えるCaution
PLACEMENT_PASS
は適切なパスワードに書き換えるちなみに、コントローラノードとコンピュートノードを分離しない All-in-One 構成の場合は コントローラノードの処理にメモリや CPU を事前に予約しておくといいかも…?です
[DEFAULT] # ... reserved_host_memory_mb = 4096 reserved_host_cpus = 2
- 上の例ではメモリ 4G と CPU2 スレッド(単位はコアではなくスレッドのはず)をコンピュートノード用に事前確保している
- (特にチューニングしたわけではないので、いくつにすればよいかは不明です)
Nova API データベース同期
root user
su -s /bin/sh -c "nova-manage api_db sync" nova
cell0
データベース登録root user
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
- Nova ではスケーラビリティのためにマルチセル方式を採用している
- セルの中でも
cell0
は特別なセルであり、最小限の DB 情報しかもっていないらしい - よくわかってないので気になったら調べてください
cell1
セル作成root user
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
- Nova ではスケーラビリティのためにマルチセル方式を採用している
cell1
は実際に VM インスタンスを建てたりするセルになるみたい
Nova データベース同期
root user
su -s /bin/sh -c "nova-manage db sync" nova
セルの登録確認
root user
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
+-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+ | Name | UUID | Transport URL | Database Connection | Disabled | +-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+ | cell0 | 00000000-0000-0000-0000-000000000000 | none:/ | mysql+pymysql://nova:****@controller/nova_cell0?charset=utf8 | False | | cell1 | f690f4fd-2bc5-4f15-8145-db561a7b9d3d | rabbit://openstack:****@controller:5672/nova_cell1 | mysql+pymysql://nova:****@controller/nova_cell1?charset=utf8 | False | +-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+
コントローラノードのサービス再起動
OpenStack Docs: Install and configure controller node for Ubuntu - Finalize installation
root user
systemctl restart nova-api
systemctl restart nova-scheduler
systemctl restart nova-conductor
systemctl restart nova-novncproxy
コンピュートノード
OpenStack Docs: Install and configure a compute node for Ubuntu
Compute
- コンピュートノードでは実際に VM インスタンスの作成、起動、停止などをおこなう
- ドキュメントの構成では KVM/QEMU の
libvirt
をもとにする
Nova Compute インストール
OpenStack Docs: Install and configure a compute node for Ubuntu - Install and configure components
パッケージインストール
root user
apt install nova-compute
/etc/nova/nova.conf
編集[DEFAULT] # ... # コンピュートノードの管理ネットワークIPアドレス # ex) my_ip = 192.168.0.12 my_ip = COMPUTE_MANAGEMENT_IP # `RABBIT_PASS`は適切なパスワードに書き換える transport_url = rabbit://openstack:RABBIT_PASS@controller # ... [api] # ... # `keystone`を利用することを指定 auth_strategy = keystone [keystone_authtoken] # 他のオプションはすべて削除またはコメントアウトする # `NOVA_PASS`は適切なパスワードに書き換える www_authenticate_uri = http://controller:5000/ auth_url = http://controller:5000/ memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = NOVA_PASS [neutron] # 次の手順でインストールするNeutronの設定部分も先に書いておく # 他のオプションはすべて削除またはコメントアウトする # `NEUTRON_PASS`は適切なパスワードに書き換える auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS [vnc] # ... enabled = true server_listen = 0.0.0.0 server_proxyclient_address = $my_ip # 以下のURLはHorizonでWebコンソールを開くときのリンクアドレスになる # ドキュメントの通り`http://controller:6080/vnc_auto.html`とすると # ブラウザで`http://controller:6080/vnc_auto.html`にアクセスしようとしてしまう # アクセス可能なドメイン名またはIPアドレスに書き換えること novncproxy_base_url = http://[Accessable Domain Name / IP Address]:6080/vnc_auto.html [glance] # ... # GlanceのAPIサーバ api_servers = http://controller:9292 [oslo_concurrency] # ... lock_path = /var/lib/nova/tmp [placement] # 他のオプションはすべて削除またはコメントアウトする # `PLACEMENT_PASS`は適切なパスワードに書き換える region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://controller:5000/v3 username = placement password = PLACEMENT_PASS # ...
-
Caution
RABBIT_PASS
は適切なパスワードに書き換える -
Caution
NOVA_DBPASS
は適切なパスワードに書き換える -
Caution
NOVA_PASS
は適切なパスワードに書き換える -
Caution
NEUTRON_PASS
は適切なパスワードに書き換える -
Caution
PLACEMENT_PASS
は適切なパスワードに書き換える
-
Caution
KVM 対応確認
any user
egrep -c '(vmx|svm)' /proc/cpuinfo
1
以上の値の場合 KVM に対応している(追加設定の必要なし)0
を返す場合は KVM に対応していないので仮想化すべてを QEMU でおこなうように設定する必要がある/etc/nova/nova-compute.conf
編集[libvirt] # ... # libvirtが仮想化すべてをQEMUでおこなうように設定 virt_type = qemu
コンピュートノードが物理マシンの場合は BIOS で INTEL VT-X あるいは AMD-V の仮想化ハードウェア拡張を有効化すれば KVM 利用可能になるはず
コンピュートノードが仮想マシンの場合はハイパーバイザ側で VM に INTEL VT-X あるいは AMD-V の仮想化ハードウェア拡張を有効化するよう設定すれば KVM 利用可能になるはず
KVM 対応させた方が仮想 CPU のパフォーマンスが圧倒的にあがるらしいので対応させておくとよい
コンピュートノードのサービス再起動
OpenStack Docs: Install and configure a compute node for Ubuntu - Finalize installation
root user
systemctl restart nova-compute
コンピュートノードをコントローラノードのセルデータベースに追加する
Controller
admin
環境スクリプトの読み込みany user
. admin-openrc
データベースにコンピュートホストが存在することを確認する
any user
openstack compute service list --service nova-compute
+----+-------+--------------+------+-------+---------+----------------------------+ | ID | Host | Binary | Zone | State | Status | Updated At | +----+-------+--------------+------+-------+---------+----------------------------+ | 1 | node1 | nova-compute | nova | up | enabled | 2017-04-14T15:30:44.000000 | +----+-------+--------------+------+-------+---------+----------------------------+
コンピュートホストを検出してセルデータベースに追加
root user
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': ad5a5985-a719-4567-98d8-8d148aaae4bc Found 1 computes in cell: ad5a5985-a719-4567-98d8-8d148aaae4bc Checking host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3 Creating host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3
コンピュートノードを追加構築するたびに以上の手順をするか、
/etc/nova/nova.conf
に自動検出するための設定を書く必要がある自動検出したい場合は
/etc/nova/nova.conf
編集# ... [scheduler] # ... # 単位は秒? # 設定する場合は適切な値を調べてください discover_hosts_in_cells_interval = 300 # ...
- 試してないので動作保証できません
動作確認
OpenStack Docs: Verify operation
Controller
admin
環境スクリプトの読み込みany user
. admin-openrc
Nova のサービス一覧を表示
any user
openstack compute service list
+----+--------------------+------------+----------+---------+-------+----------------------------+ | Id | Binary | Host | Zone | Status | State | Updated At | +----+--------------------+------------+----------+---------+-------+----------------------------+ | 1 | nova-scheduler | controller | internal | enabled | up | 2016-02-09T23:11:15.000000 | | 2 | nova-conductor | controller | internal | enabled | up | 2016-02-09T23:11:16.000000 | | 3 | nova-compute | compute1 | nova | enabled | up | 2016-02-09T23:11:20.000000 | +----+--------------------+------------+----------+---------+-------+----------------------------+
API エンドポイント一覧を表示
any user
openstack catalog list
+-----------+-----------+-----------------------------------------+ | Name | Type | Endpoints | +-----------+-----------+-----------------------------------------+ | keystone | identity | RegionOne | | | | public: http://controller:5000/v3/ | | | | RegionOne | | | | internal: http://controller:5000/v3/ | | | | RegionOne | | | | admin: http://controller:5000/v3/ | | | | | | glance | image | RegionOne | | | | admin: http://controller:9292 | | | | RegionOne | | | | public: http://controller:9292 | | | | RegionOne | | | | internal: http://controller:9292 | | | | | | nova | compute | RegionOne | | | | admin: http://controller:8774/v2.1 | | | | RegionOne | | | | internal: http://controller:8774/v2.1 | | | | RegionOne | | | | public: http://controller:8774/v2.1 | | | | | | placement | placement | RegionOne | | | | public: http://controller:8778 | | | | RegionOne | | | | admin: http://controller:8778 | | | | RegionOne | | | | internal: http://controller:8778 | | | | | +-----------+-----------+-----------------------------------------+
イメージ一覧を表示
any user
openstack image list
+--------------------------------------+-------------+-------------+ | ID | Name | Status | +--------------------------------------+-------------+-------------+ | 9a76d9f9-9620-4f2e-8c69-6c5691fae163 | cirros | active | +--------------------------------------+-------------+-------------+
ステータスチェック
root user
nova-status upgrade check
+--------------------------------------------------------------------+ | Upgrade Check Results | +--------------------------------------------------------------------+ | Check: Cells v2 | | Result: Success | | Details: None | +--------------------------------------------------------------------+ | Check: Placement API | | Result: Success | | Details: None | +--------------------------------------------------------------------+ | Check: Ironic Flavor Migration | | Result: Success | | Details: None | +--------------------------------------------------------------------+ | Check: Cinder API | | Result: Success | | Details: None | +--------------------------------------------------------------------+ | Check: Policy Scope-based Defaults | | Result: Success | | Details: None | +--------------------------------------------------------------------+
おわり
以上で Nova 編終了です
お疲れ様でした
関連記事一覧
- OpenStack Ussuriをマニュアルインストールしてみたメモ
- OpenStack Ussuriマニュアルインストールその1―環境構築編
- OpenStack Ussuriマニュアルインストールその2―Keystone編
- OpenStack Ussuriマニュアルインストールその3―Glance編
- OpenStack Ussuriマニュアルインストールその4―Placement編
- OpenStack Ussuriマニュアルインストールその5―Nova編(当記事)
- OpenStack Ussuriマニュアルインストールその6―Neutron編
- OpenStack Ussuriマニュアルインストールその7―Horizon編
- OpenStack Ussuriマニュアルインストールその8―Cinder編
- OpenStack Ussuriマニュアルインストールその9―起動編
- OpenStack Ussuri 追加インストールその1―Octavia編
- OpenStack Victoriaをマニュアルインストールしてみたメモ
- OpenStack Tips
- Issues