一、概述
使用OpenStack计算服务来托管和管理云计算系统。OpenStack计算服务是基础设施即服务(IaaS)系统的主要部分,模块主要由Python实现。
OpenStack计算组件请求OpenStack Identity服务进行认证;请求OpenStack Image服务提供磁盘镜像;为OpenStack dashboard提供用户与管理员接口。磁盘镜像访问限制在项目与用户上;配额以每个项目进行设定(例如,每个项目下可以创建多少实例)。OpenStack
组件可以在标准硬件上水平大规模扩展,并且下载磁盘镜像启动虚拟机实例。
OpenStack计算服务由下列组件所构成:
nova-api 服务:接受并响应所有计算服务请求,管理虚拟机(云主机)生命周期。
nova-api-metadata 服务:接受来自虚拟机发送的元数据请求。
nova-compute服务(多个):真正管理虚拟机(nova-compute调用libvirt)。
nova-scheduler服务:nova调度器(挑选出最合适的nova-compute来创建虚拟机)。
nova-conductor模块:帮助nova-compute代理修改数据库中虚拟机的状态。
nova-cert模块:服务器守护进程向Nova Cert服务提供X509证书。用来为``euca-bundle-image``生成证书。仅仅是在EC2 API的请求中使用
nova-network worker 守护进程:与``nova-compute``服务类似,从队列中接受网络任务,并且操作网络。执行任务例如创建桥接的接口或者改变IPtables的规则。
nova-consoleauth 守护进程和nova-novncproxy 守护进程:web版的vnc来直接操作云主机。
nova-spicehtml5proxy 守护进程:提供一个代理,用于访问正在运行的实例,通过 SPICE 协议,支持基于浏览器的 HTML5 客户端。
nova-xvpvncproxy 守护进程:提供一个代理,用于访问正在运行的实例,通过VNC协议,支持OpenStack特定的Java客户端。
nova-cert 守护进程:X509 证书。
nova客户端:用于用户作为租户管理员或最终用户来提交命令。
队列:一个在守护进程间传递消息的中央集线器。
二、安装并配置控制节点
1、创建数据库
mysql -u root -p 登录数据库
CREATE DATABASE nova_api; 创建数据库
CREATE DATABASE nova;
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';
2、创建 nova 用户,给 nova 用户添加 admin 角色。
[root@controller ~]# openstack user create --domain default --password NOVA_PASS nova
[root@controller ~]# openstack role add --project service --user nova admin
3、创建 nova 服务实体
[root@controller ~]# openstack service create --name nova --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | dd98c56c7ea948a7bfee86ed3a48bcdf |
| name | nova |
| type | compute |
+-------------+----------------------------------+
4、创建 Compute 服务 API 端点
[root@controller ~]# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1/%(tenant_id)s
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | 8dc955bdeb554ecbbc4fead51ad77dee |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | dd98c56c7ea948a7bfee86ed3a48bcdf |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1/%(tenant_id)s
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | 19d8e664c4b1434eafdb83fc5f72deec |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | dd98c56c7ea948a7bfee86ed3a48bcdf |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1/%(tenant_id)s
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | 8b301d9fe68c4486b1482a5e6d542da7 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | dd98c56c7ea948a7bfee86ed3a48bcdf |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+
5、安装并配置组件
yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler -y
6、备份配置文件
cp /etc/nova/nova.conf{,.bak}
grep '^[a-z[]' /etc/nova/nova.conf.bak >/etc/nova/nova.conf
7、编辑``/etc/nova/nova.conf``文件并完成下面的操作
vim /etc/nova/nova.conf
[DEFAULT]
...
enabled_apis = osapi_compute,metadata 在``[DEFAULT]``部分,只启用计算和元数据API
[api_database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api 在``[api_database]``和``[database]``部分,配置数据库的连接
[database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS 在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列访问,用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。
[DEFAULT]
...
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 在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问,使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``。
[DEFAULT]
...
my_ip = 10.0.0.11 在 [DEFAULT 部分,配置``my_ip`` 来使用控制节点的管理接口的IP 地址。
[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver 在 [DEFAULT] 部分,使能 Networking 服务,默认情况下,计算服务使用内置的防火墙服务。
由于网络服务包含了防火墙服务,你必须使用``nova.virt.firewall.NoopFirewallDriver``防火墙服务来禁用掉计算服务内置的防火墙服务
[vnc]
...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip 在``[vnc]``部分,配置VNC代理使用控制节点的管理接口IP地址
[glance]
...
api_servers = http://controller:9292 在 [glance] 区域,配置镜像服务 API 的位置
[oslo_concurrency]
...
lock_path = /var/run/nova 在 [oslo_concurrency] 部分,配置锁路径
8、同步数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage db sync" nova
9、启动服务
# systemctl enable openstack-nova-api.service
openstack-nova-consoleauth.service openstack-nova-scheduler.service
openstack-nova-conductor.service openstack-nova-novncproxy.service 加入开机自启动
# systemctl start openstack-nova-api.service
openstack-nova-consoleauth.service openstack-nova-scheduler.service
openstack-nova-conductor.service openstack-nova-novncproxy.service 批量启动服务
10、验证,用nova service-list命令查看,表里面为空,nova数据库中的service中也有数据的。
注解:openstack在高版本里修复了网络传输包的一个bug,同时更低版本的也进行了改动,所以在配置过程中需要加一些额外的操作(改配置文件单位源码),其他都照旧,最后就可以配置nova成功。
不论新旧版本都强制增加了cell和placement实例的应用,所以在问题中提及的报错其实是一个提示,配置过程中确实需要创建和实例化cell用户以及placement服务配置才能正常继续。
三、解决遗留问题
1、创建nova_cell0数据库
[root@controller ~]# mysql -u root -p MariaDB [(none)]> CREATE DATABASE nova_cell0; 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';
2、创建 placement用户,给 placement用户添加 admin 角色。
openstack user create --domain default --password PLACEMENT_PASS placement
openstack role add --project service --user placement admin
3、创建 placement 服务实体
openstack service create --name placement --description "Placement API" placement openstack endpoint create --region RegionOne placement public http://controller:8778 openstack endpoint create --region RegionOne placement internal http://controller:8778 openstack endpoint create --region RegionOne placement admin http://controller:8778
4、安装openstack-nova-placement-api服务
yum install openstack-nova-placement-api -y
5、修改配置文件/etc/nova/nova.conf
[DEFAULT] # ... transport_url = rabbit://openstack:RABBIT_PASS@controller [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
6、创建配置文件/etc/httpd/conf.d/00-nova-placement-api.conf
<Directory /usr/bin> <IfVersion >= 2.4> Require all granted </IfVersion> <IfVersion < 2.4> Order allow,deny Allow from all </IfVersion> </Directory>
7、重启服务
systemctl restart httpd
8、同步数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova 109e1d4b-536a-40d0-83c6-5f121b82b650 su -s /bin/sh -c "nova-manage db sync" nova
nova-manage cell_v2 list_cells
+-------+--------------------------------------+
| Name | UUID |
+-------+--------------------------------------+
| cell1 | 109e1d4b-536a-40d0-83c6-5f121b82b650 |
| cell0 | 00000000-0000-0000-0000-000000000000 |
+-------+--------------------------------------+
9、重启服务
systemctl restart openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
10、再次查看
终于成功!!!
11、openstack-nova-api提供命令行服务,openstack-nova-novncproxy提供web版得vnc服务。