OpenStack计算服务搭建
nova服务概述
使用OpenStack Compute来托管和管理云计算系统。OpenStack Compute是基础架构即服务(IaaS)系统的重要组成部分。主要模块是用Python实现的。
OpenStack Compute与OpenStack Identity进行交互以进行身份验证; 用于磁盘和服务器映像的OpenStack映像服务; 和用于用户和管理界面的OpenStack Dashboard。图像访问受到项目和用户的限制; 每个项目的限额是有限的(例如,实例的数量)。OpenStack Compute可以在标准硬件上水平扩展,并下载映像以启动实例。
OpenStack Compute包含以下区域及其组件:
nova-api 服务
接受并响应最终用户计算API调用。该服务支持OpenStack Compute API,Amazon EC2 API以及特殊用户执行管理操作的特殊管理API。它执行一些策略并启动大多数编排活动,例如运行实例。
nova-api-metadata 服务
接受来自实例的元数据请求。nova-api-metadata通常在nova-network 安装多主机模式下运行时使用该服务。有关详细信息,请参阅 计算管理员指南中的元数据服务。
nova-compute 服务
通过管理程序API创建和终止虚拟机实例的工作守护程序。例如:
处理相当复杂。基本上,守护进程接受来自队列的动作并执行一系列系统命令,例如启动KVM实例并更新其在数据库中的状态。
用于XenServer / XCP的XenAPI
KVM或QEMU的libvirt
适用于VMware的VMwareAPI
nova-placement-api 服务
跟踪每个提供商的库存和使用情况。有关详情,请参阅Placement API。
nova-scheduler 服务
从队列中获取虚拟机实例请求,并确定它在哪个计算服务器主机上运行。
nova-conductor 模
调解nova-compute服务和数据库之间的交互。它消除了由nova-compute服务直接访问云数据库的情况 。该nova-conductor模块水平缩放。但是,请勿将其部署到nova-compute运行服务的节点上。有关更多信息,请参阅配置选项中的conductor部分 。
nova-consoleauth 守护进程
为控制台代理提供的用户授权令牌。见 nova-novncproxy和nova-xvpvncproxy。此服务必须运行以使控制台代理正常工作。您可以在群集配置中针对单个nova-consoleauth服务运行任一类型的代理。有关信息,请参阅关于nova-consoleauth。
nova-novncproxy 守护进程
提供通过VNC连接访问正在运行的实例的代理。支持基于浏览器的novnc客户端。
nova-spicehtml5proxy 守护进程
提供通过SPICE连接访问正在运行的实例的代理。支持基于浏览器的HTML5客户端。
nova-xvpvncproxy 守护进程
提供通过VNC连接访问正在运行的实例的代理。支持OpenStack特定的Java客户端。
队列
守护进程之间传递消息的中心集线器。通常用RabbitMQ实现 ,也可以用另一个AMQP消息队列实现,例如ZeroMQ。
SQL数据库
存储云基础架构的大部分构建时间和运行时状态,其中包括:
理论上,OpenStack Compute可以支持SQLAlchemy支持的任何数据库。通用数据库是
用于测试和开发工作的SQLite3,MySQL,MariaDB和PostgreSQL。
可用的实例类型
正在使用的实例
可用的网络
项目
A.在控制节点安装nova服务
1.创建数据库并授权
进入数据库
[root@controller ~]# mysql -uroot -p 创建nova_api数据库 MariaDB [(none)]> CREATE DATABASE nova_api; 创建nova数据库 MariaDB [(none)]> CREATE DATABASE nova; 创建nova_ce110数据库 MariaDB [(none)]> CREATE DATABASE nova_cell0;
对nova_api数据库进行用户授权 MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.*TO 'nova'@'localhost' IDENTIFIED BY 'nova' MariaDB [mysql]> GRANT ALL PRIVILEGES ON nova_api.*TO 'nova'@'%' IDENTIFIED BY 'nova'; 对nova数据库进行用户授权 MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO'nova'@'localhost' IDENTIFIED BY 'nova'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO'nova'@'%' IDENTIFIED BY 'nova'; 对nova_ce110数据库进行用户授权 MariaDB [mysql]> GRANT ALL PRIVILEGES ON nova_ce110.*TO 'nova'@'localhost' IDENTIFIED BY 'nova'; MariaDB [(none)]> GRANT ALL PRIVILEGES ONnova_ce110.* TO 'nova'@'%' IDENTIFIED BY 'nova';
2.加载环境变量
[root@controller ~]# . admin-openrc
3.创建计算服务凭据
创建nova用户 [root@controller ~]# openstack user create --domaindefault --password-prompt nova 将admin角色添加到nova用户 [root@controller ~]# openstack role add --projectservice --user nova admin
创建服务实体
[root@controller ~]# openstack service create --namenova --description "OpenStack Compute" compute
4. 创建计算服务API端点
[root@controller ~]# openstack endpoint create --regionRegionOne compute public http://controller:8774/v2.1 [root@controller ~]# openstack endpoint create --regionRegionOne compute internal http://controller:8774/v2.1 [root@controller ~]# openstack endpoint create --regionRegionOne compute admin http://controller:8774/v2.1
5.创建位置服务用户
[root@controller ~]# openstack user create --domaindefault --password-prompt placement
将位置用户添加到具有管理员角色的服务项目中
[root@controller ~]# openstack role add --projectservice --user placement admin
6.在服务目录中创建Placement API条目
[root@controller ~]# openstack service create --nameplacement --description "Placement API" placement
7.创建Placement API服务端点
[root@controller ~]# openstack endpoint create --regionRegionOne placement public http://controller:8778 [root@controller ~]# openstack endpoint create --regionRegionOne placement internal http://controller:8778 [root@controller ~]# openstack endpoint create --regionRegionOne placement admin http://controller:8778
8.安装并配置nova软件
安装nova相关组件
yum install openstack-nova-api openstack-nova-conductoropenstack-nova-console openstack-nova-novncproxy openstack-nova-scheduleropenstack-nova-placement-api -y
编辑/etc/nova/nova.conf文件并完成以下操作:
在该[DEFAULT]部分中,仅启用计算API和元数据API:
enable_apis = osapi_compute,metadata
在[api_database]和[database]部分中,配置数据库访问:
[api_database] connection = mysql+pymysql://nova:nova@controller/nova_api [database] connection = mysql+pymysql://nova:nova@controller/nova
在该[DEFAULT]部分中,配置RabbitMQ消息队列访问
transport_url = rabbit://openstack:openstack@controller
在[api]和[keystone_authtoken]部分中,配置身份服务访问
[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
在该[DEFAULT]部分中,将该my_ip选项配置为使用控制器节点的管理接口IP地址:
my_ip = 173.168.16.224
在本[DEFAULT]节中,启用对网络服务的支持:
use_neutron = True firewall_driver = nova.virt.firewall.NoopFirewallDriver
在本[vnc]节中,将VNC代理配置为使用控制器节点的管理接口IP地址:
[vnc] enabled = true vncserver_listen = $my_ip vncserver_proxyclient_address = $my_ip
在该[glance]部分中,配置ImageService API的位置:
[glance] api_servers = http://controller:9292
在该[oslo_concurrency]部分中,配置锁定路径
[oslo_concurrency] lock_path = /var/lib/nova/tmp
在该[placement]部分中,配置PlacementAPI:
[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
完整配置如下图所示:
由于软件包bug,您必须启用对PlacementAPI的访问权限,方法是将以下配置添加到
/etc/httpd/conf.d/00-nova-placement-api.conf: <Directory /usr/bin> <IfVersion>= 2.4> Require allgranted </IfVersion> <IfVersion< 2.4> Orderallow,deny Allow fromall </IfVersion> </Directory>
配置如下图所示:
重启httpd服务
[root@controller ~]#systemctl restart httpd
9.初始化nova数据库
初始化nova_api数据库
[root@controller ~]# su -s /bin/sh -c "nova-manageapi_db sync" nova
注册ce110数据库
[root@controller ~]# su -s /bin/sh -c "nova-managecell_v2 map_cell0" nova
创建ce110的单元格
[root@controller ~]# su -s /bin/sh -c "nova-managecell_v2 create_cell -- name=cell1 --verbose" nova
初始化nova数据库,忽略其中的输出信息
[root@controller ~]# su -s /bin/sh -c "nova-managedb sync" nova
验证nova cell0和cell1是否正确注册
[root@controller ~]# nova-manage cell_v2 list_cells
启动计算服务并将其配置为在系统引导时启动
[root@controller ~]# systemctl enable openstack-nova-apiopenstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductoropenstack-nova-novncproxy [root@controller ~]# systemctl start openstack-nova-apiopenstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductoropenstack-nova-novncproxy