OpenStack学习笔记-7.Compute service安装

1.Controller node安装Compute service

1.1 安装前准备

1.1.1 数据库配置

1.创建 nova_api, nova, nova_cell0, placement数据库

mysql
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
CREATE DATABASE placement;

2.为上述数据库创建用户及授权

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';

GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'PLACEMENT_DBPASS';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'PLACEMENT_DBPASS';

1.1.2 导入环境变量

. admin-openrc

1.1.3 Identity和api配置

1.新建一个nova用户

root@ubuntu-ControllerNode:/home/ubuntu# openstack user create --domain default --password-prompt nova
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 0e4173fb2fea40cab39b719dfd31f49c |
| name                | nova                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

2.将nova用户设置为admin权限

openstack role add --project service --user nova admin

3.创建nova服务的服务条目(Identity service提供的服务列表)

root@ubuntu-ControllerNode:/home/ubuntu# openstack service create --name nova --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 8b7ac23d80bc4129a25f2a6e68d089a7 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+

4.创建Compute api的访问点

root@ubuntu-ControllerNode:/home/ubuntu#  openstack endpoint create --region RegionOne \
>   compute public http://controller:8774/v2.1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 4e092cd93324414eb37f18400f0e9da3 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8b7ac23d80bc4129a25f2a6e68d089a7 |
| service_name | nova                             |
| service_type | compute                          |
| url          | http://controller:8774/v2.1      |
+--------------+----------------------------------+
root@ubuntu-ControllerNode:/home/ubuntu# openstack endpoint create --region RegionOne \
>   compute internal http://controller:8774/v2.1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | e4b8f7e0653544908c91c9cfd76776d0 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8b7ac23d80bc4129a25f2a6e68d089a7 |
| service_name | nova                             |
| service_type | compute                          |
| url          | http://controller:8774/v2.1      |
+--------------+----------------------------------+
root@ubuntu-ControllerNode:/home/ubuntu# openstack endpoint create --region RegionOne \
>   compute admin http://controller:8774/v2.1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 4f7e7e0275644631942508c45b168014 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8b7ac23d80bc4129a25f2a6e68d089a7 |
| service_name | nova                             |
| service_type | compute                          |
| url          | http://controller:8774/v2.1      |
+--------------+----------------------------------+

5.创建placement服务的用户

openstack user create --domain default --password-prompt placement
root@ubuntu-ControllerNode:/home/ubuntu# openstack user create --domain default --password-prompt placement
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 86e0a78c71c64dd0a1e549377678ecc2 |
| name                | placement                        |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

6.将placement用户设置为管理员

openstack role add --project service --user placement admin

7.在服务目录中创建Placement API的条目

root@ubuntu-ControllerNode:/home/ubuntu# openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Placement API                    |
| enabled     | True                             |
| id          | dca77f1e87a7490a8b82e7ceed16fe0a |
| name        | placement                        |
| type        | placement                        |
+-------------+----------------------------------+

8.创建Placement API的访问链接

root@ubuntu-ControllerNode:/home/ubuntu# openstack endpoint create --region RegionOne placement public http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | bbb01b7d79ee40398d358c2b4bb134e6 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | dca77f1e87a7490a8b82e7ceed16fe0a |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+
root@ubuntu-ControllerNode:/home/ubuntu# openstack endpoint create --region RegionOne placement internal http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | cd826ab7b53b4de3838e723f4ff1727d |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | dca77f1e87a7490a8b82e7ceed16fe0a |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+
root@ubuntu-ControllerNode:/home/ubuntu# openstack endpoint create --region RegionOne placement admin http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 7ce81328b9724a5f9d5fad256d166429 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | dca77f1e87a7490a8b82e7ceed16fe0a |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+

1.2 安装和配置

1.2.1 安装所需软件包

apt install nova-api nova-conductor nova-novncproxy nova-scheduler nova-placement-api

1.2.2 修改/etc/nova/nova.conf

1.修改数据库相关的节,NOVA_DBPASS等替换成之前设置好的

[api_database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

[database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova

[placement_database]
# ...
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement

2.配置RabbitMQ访问,RABBIT_PASS替换成之前设置的

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

3.设置api和keystone token,NOVA_PASS替换成之前设置的

[api]
# ...
auth_strategy = keystone

[keystone_authtoken]
# ...
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = NOVA_PASS

4.设置自身ip并启用网络服务

[DEFAULT]
# ...
my_ip = 10.0.0.11
[DEFAULT]
# ...
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver

5.配置vnc

[vnc]
enabled = true
# ...
server_listen = $my_ip
server_proxyclient_address = $my_ip

6.配置glance api

[glance]
# ...
api_servers = http://controller:9292

7.设置lock path

[oslo_concurrency]
# ...
lock_path = /var/lib/nova/tmp

8.删除default节当中的log_dir

[DEFAULT]
log_dir = /var/log/nova  #删除

9.设置placement的api,其中PLACEMENT_PASS设置成之前设置的。

[placement]
# ...
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

1.2.3.迁移nova-api和placement的数据库

su -s /bin/sh -c "nova-manage api_db sync" nova

1.2.4 注册cell0 数据库

su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

1.2.5 创建一个名为cell1的cell

su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

1.2.6 迁移nova数据库

su -s /bin/sh -c "nova-manage db sync" nova

1.2.7 确认cell0和cell1是否已注册成功

root@ubuntu-ControllerNode:/home/ubuntu# 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 |  False   |
| cell1 | 34ab3fb6-388b-4d1a-99df-1356731d563f | rabbit://openstack:****@controller |    mysql+pymysql://nova:****@controller/nova    |  False   |
+-------+--------------------------------------+------------------------------------+-------------------------------------------------+----------+

1.2.8 重启全部服务使配置生效

service nova-api restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart

2. Compute node安装Compute service

2.1安装与设置

2.1.1 安装所需软件包

apt install nova-compute

2.1.2 修改/etc/nova/nova.conf

1.修改RabbitMQ 配置,RABBIT_PASS替换成自己的

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

2.修改api和身份认证,NOVA_PASS替换成之前设置的

[api]
# ...
auth_strategy = keystone

[keystone_authtoken]
# ...
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = NOVA_PASS

3.修改my_ip ,这个MANAGEMENT_INTERFACE_IP_ADDRESS要替换成这台compute节点在管理网络中的ip地址,本次搭建中使用的地址为10.0.0.31

[DEFAULT]
# ...
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS

4.开启network service支持

[DEFAULT]
# ...
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver

5.配置vnc

[vnc]
# ...
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html

6.配置glance api

[glance]
# ...
api_servers = http://controller:9292

7.配置oslo_concurrency的lock path

[oslo_concurrency]
# ...
lock_path = /var/lib/nova/tmp

8.删除[DEFAULT]节中的log_dir 9.设置placement认证

[placement]
# ...
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

2.2 确认安装

1.在compute节点上使用如下命令

egrep -c '(vmx|svm)' /proc/cpuinfo

如果返回结果不是0那么说明你的计算节点cpu支持硬件加速,如果返回结果是0,如下,那么需要额外配置。

root@ubuntu-ComputeNode:/home/ubuntu# egrep -c '(vmx|svm)' /proc/cpuinfo
0
root@ubuntu-ComputeNode:/home/ubuntu#

修改/etc/nova/nova-compute.conf

[libvirt]
# ...
virt_type = qemu

2.重启服务

service nova-compute restart

3.将计算节点添加到cell数据库中

以下操作均在controller node上执行 1.导入环境变量,确认一下compute节点是否在数据库里

root@ubuntu-ControllerNode:/home/ubuntu# . admin.opensrc
root@ubuntu-ControllerNode:/home/ubuntu# openstack compute service list --service nova-compute
+----+--------------+--------------------+------+---------+-------+----------------------------+
| ID | Binary       | Host               | Zone | Status  | State | Updated At                 |
+----+--------------+--------------------+------+---------+-------+----------------------------+
|  5 | nova-compute | ubuntu-ComputeNode | nova | enabled | up    | 2019-01-10T03:40:20.000000 |
+----+--------------+--------------------+------+---------+-------+----------------------------+

2.发现计算节点

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

注:这个操作需要在每次添加计算节点后都执行一次。如果觉得麻烦也可以在/etc/nova/nova.conf中添加自动扫描:

[scheduler]
discover_hosts_in_cells_interval = 300