nova是OpenStack一个核心服务,提供计算服务,主要负责虚拟机的各种操作,如启动,销毁,快照,还有选择合适的compute节点部署虚拟机。
nova中的服务有controller和compute之分,是一对多的关系,即一个controller可以有多个compute,所以一些controller服务要装到controller
节点上,compute服务可以装到compute
节点,也可以装到controller
节点来让它充当一部分compute的能力。
由于nova涉及controller
节点和compute
节点的安装,所以分了两篇文章来讲解
这一篇先介绍怎么安装nova的controller服务在controller
节点上。
准备
创建数据库
用
root
用户权限执行mysql
1
mysql
创建
nova_api
,nova
,和nova_cell0
数据库:1
2
3MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;赋予适合的权限给这些数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
替换NOVA_DBPASS
密码为合适的,下面会用到。
- 退出mysql
执行以下命令,进入admin身份
1 | . admin-openrc |
创建计算服务相关权限用户
- 创建
nova
用户:1
2
3
4
5
6
7
8
9
10
11
12
13
14openstack 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 |
+---------------------+----------------------------------+
这里的密码要记住,下面会用到。
给
nova
用户添加admin
角色1
openstack role add --project service --user nova admin
创建
nova
服务1
2
3
4
5
6
7
8
9
10
11
12openstack service create --name nova \
--description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | 060d59eac51b4594815603d75a00aba2 |
| name | nova |
| type | compute |
+-------------+----------------------------------+
创建计算服务API endpoints
1 | openstack endpoint create --region RegionOne \ |
创建一个布置服务(Placement service)的用户
1 | openstack user create --domain default --password-prompt placement |
这里的密码也要记住,下面会用到。
给这个用户添加admin权限
1 | openstack role add --project service --user placement admin |
创建布置服务的api入口
1 | openstack service create --name placement --description "Placement API" placement |
创建布置服务api endpoints
1 | openstack endpoint create --region RegionOne placement public http://controller:8778 |
安装和配置组件
安装包
1 | apt install nova-api nova-conductor nova-consoleauth \ |
修改/etc/nova/nova.conf
- 修改
[api_database]
和[database]
区域1
2
3
4
5
6
7[api_database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
替换NOVA_DBPASS
为你上面配置数据库的密码
- 在
[Default]
区域,对RabbitMQ
配置1
2
3[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
替换RABBIT_PASS
为当时安装rabbitmq时候设置的密码
- 在
[api]
和[keystone——authtoken]
区域,配置keystone相关配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[api]
# ...
auth_strategy = keystone
[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 = NOVA_PASS
替换NOVA_PASS
为你创建nova用户时的密码
在
[DEFAULT]
区域,配置my_ip
为管理网络ip,此为controller节点的管理ip1
2
3[DEFAULT]
# ...
my_ip = 192.168.199.10在
[DEFAUL]
区域,启用neutron作为网络服务的组件1
2
3
4[DEFAULT]
# ...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver配置vnc
1
2
3
4
5[vnc]
enabled = true
# ...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip在
[glance]
区域,配置glance1
2
3[glance]
# ...
api_servers = http://controller:9292在
[oslo_concurrency]
区域,配置锁定路径1
2
3[oslo_concurrency]
# ...
lock_path = /var/lib/nova/tmp在
[DEFAULT]
删除log_dir
选项- 在
[placement]
区域配置placement api1
2
3
4
5
6
7
8
9
10[placement]
# ...
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 = PLACEMENT_PASS
使用创建placement用户时的密码替换PLACEMENT_PASS
初始化nova-api
数据库
1 | su -s /bin/sh -c "nova-manage api_db sync" nova |
注册cell0
数据库
1 | su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova |
创建cell
1 | su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova |
初始化nova
数据库
1 | su -s /bin/sh -c "nova-manage db sync" nova |
验证nova
的cell0
和cell1
1 | nova-manage cell_v2 list_cells |
重启服务
1 | service nova-api restart |