计算服务Nova
使用OpenStack Compute来托管和管理云计算系统。 OpenStack Compute是基础架构即服务(IaaS)系统的主要部分。 主要模块用Python实现。
OpenStack Compute与OpenStack Identity交互以进行身份验证; 用于磁盘和服务器映像的OpenStack映像服务; 和OpenStack Dashboard用于用户和管理界面。
图像访问受项目和用户的限制; 配额是按项目限制的(例如,实例数)。 OpenStack Compute可以在标准硬件上水平扩展,并将图像下载到启动实例。

节点配置信息说明:

控制节点:controller: 
IP:192.168.164.128 
hostname&hosts:likeadmin

计算加点:Nova: 

IP:192.168.164.129 
hostname&hosts:likenode

块存储节点:cinder: 

IP:192.168.164.136 
hostname&hosts:likeblock

1. OpenStack计算服务由下列组件所构成:
``nova-api``服务
接收和响应来自最终用户的计算API请求。此服务支持OpenStack计算服务API,Amazon EC2 API,以及特殊的管理API用于赋予用户做一些管理的操作。它会强制实施一些规则,发起多数的编排活动,例如运行一个实例。
``NOVA-API-metadata``服务
接受来自实例的元数据请求。 当您在具有nova-network安装的多主机模式下运行时,通常会使用nova-api-metadata服务。 有关详细信息,请参阅“OpenStack管理员指南”中的元数据服务。
``NOVA-API-metadata``服务
接受来自实例的元数据请求。 当您在具有nova-network安装的多主机模式下运行时,通常会使用nova-api-metadata服务。 有关详细信息,请参阅“OpenStack管理员指南”中的元数据服务。
``nova-compute``服务
一个持续工作的守护进程,通过Hypervior的API来创建和销毁虚拟机实例。例如:
XenServer/XCP 的 XenAPI
KVM 或 QEMU 的 libvirt
VMware 的 VMwareAPI
过程是蛮复杂的。最为基本的,守护进程同意了来自队列的动作请求,转换为一系列的系统命令如启动一个KVM实例,然后,到数据库中更新它的状态。
nova-placement-api服务
跟踪每个提供商的库存和使用情况。
``NOVA-scheduler``服务
拿到一个来自队列请求虚拟机实例,然后决定那台计算服务器主机来运行它。
``NOVA-conductor``模块
调解nova-compute服务与数据库之间的交互。它消除了nova-compute服务对云数据库的直接访问。 nova-conductor模块水平缩放。但是,请勿将其部署在运行nova-compute服务的节点上。有关更多信息,请参阅“配置参考指南”
nova-cert模块
服务器守护进程向Nova Cert服务提供X509证书。用来为``euca-bundle-image``生成证书。仅仅是在EC2 API的请求中使用
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。

2.安装并配置控制节点
注:这个部分将描述如何在控制节点上安装和配置 Compute 服务,即 nova
在安装和配置 Compute 服务前,你必须创建数据库服务的凭据以及 API endpoints。

为了创建数据库,必须完成这些步骤:

用数据库连接客户端以 root 用户连接到数据库服务器:
$ mysql -u root -p

1)创建计算服务器的nova_api, nova, and nova_cell0 数据库:
MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;

2)对数据库进行正确的授权:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
IDENTIFIED BY 'djl18001';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
IDENTIFIED BY 'djl18001';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY 'djl18001';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY 'djl18001';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
IDENTIFIED BY 'djl18001';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
IDENTIFIED BY 'djl18001';
用合适的密码代替 NOVA_DBPASS。此试验环境选用的是:djl18001作为密码,生成环境,请使用密文作为密码。

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| glance |
| information_schema |
| keystone |
| mysql |
| nova |
| nova_api |
| nova_cell0 |
| performance_schema |
+--------------------+
8 rows in set (0.00 sec)

2)获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
[root@likeadmin ~]# source /root/.admin-openrc

3)创建Compute服务凭据:
创建 nova 用户:
[root@likeadmin ~]# openstack user create --domain default --password-prompt nova
User Password: djl18001
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 42c406d7a7ed4784a08a6f2696c2db6c |
| name | nova |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
[root@likeadmin ~]#
给 nova 用户添加 admin 角色:
[root@likeadmin ~]# openstack role add --project service --user nova admin
创建 nova 服务实体:
[root@likeadmin ~]# openstack service create --name nova \
> --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | 4378f37a2c6a4f14b0123f2c9b46a9ec |
| name | nova |
| type | compute |
+-------------+----------------------------------+
[root@likeadmin ~]#

4)创建Compute API服务端点:
[root@likeadmin ~]# openstack endpoint create --region RegionOne \
> compute public http://likeadmin:8774/v2.1/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | ea27f64912a3468f9c77df9298ae6fd7 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 4378f37a2c6a4f14b0123f2c9b46a9ec |
| service_name | nova |
| service_type | compute |
| url | http://likeadmin:8774/v2.1/%(tenant_id)s |
+--------------+------------------------------------------+
[root@likeadmin ~]# openstack endpoint create --region RegionOne \
> compute internal http://likeadmin:8774/v2.1/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | 829019c5bfe94637af4876725213690e |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 4378f37a2c6a4f14b0123f2c9b46a9ec |
| service_name | nova |
| service_type | compute |
| url | http://likeadmin:8774/v2.1/%(tenant_id)s |
+--------------+------------------------------------------+
[root@likeadmin ~]# openstack endpoint create --region RegionOne \
> compute admin http://likeadmin:8774/v2.1/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | 2d3ee70a3c4c4cb399ba3a689a7fdf82 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 4378f37a2c6a4f14b0123f2c9b46a9ec |
| service_name | nova |
| service_type | compute |
| url | http://likeadmin:8774/v2.1/%(tenant_id)s |
+--------------+------------------------------------------+
[root@likeadmin ~]#
[root@likeadmin ~]# openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
| 0f5af5f9e444442eb07ad78fe1314705 | RegionOne | keystone | identity | True | internal | http://likeadmin:5000/v3/ |
| 2d3ee70a3c4c4cb399ba3a689a7fdf82 | RegionOne | nova | compute | True | admin | http://likeadmin:8774/v2.1/%(tenant_id)s |
| 36495ec2b54a4a07a8cd83745a3a19b8 | RegionOne | glance | image | True | public | http://likeadmin:9292 |
| 59ee7ce4b50d4142b5a66c8ab3c8e01a | RegionOne | glance | image | True | admin | http://likeadmin:9292 |
| 829019c5bfe94637af4876725213690e | RegionOne | nova | compute | True | internal | http://likeadmin:8774/v2.1/%(tenant_id)s |
| 8a1893ba8035440f8e4a7bdc440ffef8 | RegionOne | glance | image | True | internal | http://likeadmin:9292 |
| b572d79c6f5c47a789b258ec7474599c | RegionOne | keystone | identity | True | public | http://likeadmin:5000/v3/ |
| ea27f64912a3468f9c77df9298ae6fd7 | RegionOne | nova | compute | True | public | http://likeadmin:8774/v2.1/%(tenant_id)s |
| ed967ed76c6141cba66f6f20b9b9c5f2 | RegionOne | keystone | identity | True | admin | http://likeadmin:35357/v3/ |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
[root@likeadmin ~]#

5)使用您选择的PLACEMENT_PASS创建一个Placement服务用户:
[root@likeadmin ~]# openstack user create --domain default --password-prompt placement
User Password: djl18001
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 4025c84b6bfe4470bcb8d66d530fce62 |
| name | placement |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
[root@likeadmin ~]#
使用admin角色将Placement用户添加到服务项目:
[root@likeadmin ~]# openstack role add --project service --user placement admin

6)在服务目录中创建Placement API条目:
[root@likeadmin ~]# openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Placement API |
| enabled | True |
| id | a9d8071fc5024ea7a160ffdf2b2629cd |
| name | placement |
| type | placement |
+-------------+----------------------------------+
[root@likeadmin ~]#

7)创建Placement API服务端点:
[root@likeadmin ~]# openstack endpoint create --region RegionOne placement public http://likeadmin:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 5e5a460effe3446bbad3d434a0c128c4 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | a9d8071fc5024ea7a160ffdf2b2629cd |
| service_name | placement |
| service_type | placement |
| url | http://likeadmin:8778 |
+--------------+----------------------------------+
[root@likeadmin ~]# openstack endpoint create --region RegionOne placement internal http://likeadmin:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 94c895aac78141f8a397a1c0f80f8ea1 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | a9d8071fc5024ea7a160ffdf2b2629cd |
| service_name | placement |
| service_type | placement |
| url | http://likeadmin:8778 |
+--------------+----------------------------------+
[root@likeadmin ~]# openstack endpoint create --region RegionOne placement admin http://likeadmin:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | e54a008fe46741588458cf66fd67c31f |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | a9d8071fc5024ea7a160ffdf2b2629cd |
| service_name | placement |
| service_type | placement |
| url | http://likeadmin:8778 |
+--------------+----------------------------------+
[root@likeadmin ~]#

3。安全并配置组件
1)安装软件包:
#yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler openstack-nova-placement-api
2)编辑``/etc/nova/nova.conf``文件并完成下面的操作:
在``[DEFAULT]``部分,只启用计算和元数据API:
[DEFAULT]
# ...
enabled_apis = osapi_compute,metadata

在``[api_database]``和``[database]``部分,配置数据库的连接:
[api_database]
# ...
connection = mysql+pymysql://nova:djl18001@likeadmin/nova_api

[database]
# ...
connection = mysql+pymysql://nova:djl18001@likeadmin/nova
用你为 Compute 数据库选择的密码来代替 NOVA_DBPASS。

在``[DEFAULT]``部分,配置``RabbitMQ``消息队列访问权限:
[DEFAULT]
# ...
transport_url = rabbit://openstack:djl18001@likeadmin
用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。

In the [api] and [keystone_authtoken] sections, configure Identity service access:
[api]
# ...
auth_strategy = keystone

[keystone_authtoken]
# ...
auth_uri = http://likeadmin:5000
auth_url = http://likeadmin:35357
memcached_servers = likeadmin:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = djl18001
使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``。

在 [DEFAULT 部分,配置``my_ip`` 来使用控制节点的管理接口的IP 地址。
[DEFAULT]
# ...
my_ip = 192.168.164.128

在 ``[DEFAULT]``部分,启用网络服务支持:
[DEFAULT]
# ...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
注解:默认情况下,计算服务使用内置的防火墙服务。由于网络服务包含了防火墙服务,你必须使用``nova.virt.firewall.NoopFirewallDriver``防火墙服务来禁用掉计算服务内置的防火墙服务

在``[vnc]``部分,配置VNC代理使用控制节点的管理接口IP地址 :
[vnc]
enabled = true
# ...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip

在 [glance] 区域,配置镜像服务 API 的位置:
[glance]
# ...
api_servers = http://likeadmin:9292

在 [oslo_concurrency] 部分,配置锁路径:
[oslo_concurrency]
# ...
lock_path = /var/lib/nova/tmp

在[placement]部分中,配置Placement API:
[placement]
# ...
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://likeadmin:35357/v3
username = placement
password = djl18001
将PLACEMENT_PASS替换为您在Identity服务中为放置用户选择的密码。 注释掉[placement]部分中的任何其他选项。

由于 packaging bug,您必须通过将以下配置添加到/etc/httpd/conf.d/00-nova-placement-api.conf来启用对Placement API的访问:
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>

Restart the httpd service:
# systemctl restart httpd

3)填充nova-api数据库:
# su -s /bin/sh -c "nova-manage api_db sync" nova

4)注册cell0数据库:
[root@likeadmin ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
5)创建cell1小区:
[root@likeadmin ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
1a73b8c8-e82f-4378-9323-a34fe771904b
6)Populate the nova database:
[root@likeadmin ~]# su -s /bin/sh -c "nova-manage db sync" nova
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `block_device_mapping_instance_uuid_virtual_name_device_name_idx`. This is deprecated and will be disallowed in a future release.')
result = self._query(query)
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `uniq_instances0uuid`. This is deprecated and will be disallowed in a future release.')
result = self._query(query)
[root@likeadmin ~]#

7)验证nova cell0和cell1是否正确注册:
[root@likeadmin ~]# nova-manage cell_v2 list_cells
+-------+--------------------------------------+
| Name | UUID |
+-------+--------------------------------------+
| cell0 | 00000000-0000-0000-0000-000000000000 |
| cell1 | 1a73b8c8-e82f-4378-9323-a34fe771904b |
+-------+--------------------------------------+
[root@likeadmin ~]#

4.完成安装
启动 Compute 服务并将其设置为随系统启动:

# 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

注:至此在控制节点上部署计算服务Nova已完成