openstack-train安装 · 2022年10月8日 0

手动部署OpenStack Train双节点-安装nova(控制节点)

OpenStack云计算平台Nova组件需要在控制节点和计算节点分别安装。本篇是控制节点安装部分。
官方说明文档

一、在控制节点安装与配置Nova

1、安装Nova软件包

[root@controller ~]# yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-scheduler openstack-nova-novncproxy 

在控制节点共安装了Nova的4个软件包,它们分别如下。
“openstack-nova-api”:Nova与外部的接口模块。
“openstack-nova-conductor”:Nova传导服务模块,提供数据库访问。
“nova-scheduler”:Nova调度服务模块,用以选择某台主机进行云主机创建。
“openstack-nova-novncproxy”:Nova的虚拟网络控制台( Virtual Network Console,VNC)代理模块,支持用户通过VNC访问云主机。

2、创建Nova的数据库并授权

第1步,用下面的方法进入MariaDB数据库服务器。

[root@controller ~]# mysql -uroot -p000000

第2步,新建“nova_api”“nova_cell0”“nova”数据库。

MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova_cell0;
MariaDB [(none)]> CREATE DATABASE nova;  

数据库验证截图:

第3步,给用户授权使用新建数据库。
GRANT ALL PRIVILEGES ON 数据库名. TO ‘nova’@’localhost’ IDENTIFIED BY ‘000000’;
GRANT ALL PRIVILEGES ON 数据库名.
TO ‘nova’@’%’ IDENTIFIED BY ‘000000’;

这里数据库名分别是“nova_api”“nova_cell0”“nova”,即6条语句。

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '000000';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '000000';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '000000';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '000000';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '000000';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '000000';

第4步,退出数据库

MariaDB [(none)]> quit

3、修改nova配置文件

(1)将配置文件去掉注释和空行
第1步,备份配置文件。

[root@controller ~]# cp /etc/nova/nova.conf /etc/nova/nova.bak

第2步,去掉所有注释和空行,生成新的配置文件。

[root@controller ~]# grep -Ev '^$|#' /etc/nova/nova.bak >/etc/nova/nova.conf

这里的正则表达式“^|#”的具体含义为:匹配空行(“^”,其中“^”是一行的开头,“$”是一行的结尾),或者(符号“|”表示或者)匹配第一个字符为“#”的行。结合反向匹配参数“-v”,最终匹配的是所有不为空和不以注释符号“#”开头的行。
(2)编辑新的配置文件
第1步,打开配置文件进行编辑。

[root@controller ~]#  vi /etc/nova/nova.conf

第2步,修改“[api_database]”和“[database]”部分,实现与数据库“nova_api”“nova”的连接。

[api_database]

connection = mysql+pymysql://nova:000000@controller/nova_api
[database]

connection = mysql+pymysql://nova:000000@controller/nova

第3步,修改“[api]”与“[keystone_authtoken]”部分,实现与Keystone交互。

[api]

auth_strategy = keystone

[keystone_authtoken]

www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/v3/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 000000

第4步,修改“[placement]”部分,实现与Placement交互。

[placement]

region_name = RegionOne
project_domain_name = Default
project_name = project
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3/
username = placement
password = 000000

第5步,修改“[glance]”部分,实现与Glance交互。

[glance]

api_servers = http://controller:9292

第6步,修改“[oslo_concurrency]”,配置锁路径。

[oslo_concurrency]

lock_path = /var/lib/nova/tmp

这里的“/var/lib/nova/tmp”是在安装软件包时由“nova”用户创建的,因此“nova”对它拥有所有权限。不要随意更改该路径。
第7步,修改“[DEFAULT]”部分,配置使用消息队列及防火墙等信息。

[DEFAULT]

enabled_apis = osapi_compute,metadata
transport_url = rabbit://rabbitmq:000000@controller:5672/
my_ip = 192.168.100.10
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver

第8步,修改“[vnc]”部分,配置VNC连接模式。

[vnc]

enabled = true
server_listen = my_ip
server_proxyclient_address =my_ip

文件内容中的“”表示取变量值,因此“my_ip”就是指在“[DEFAULT]”中定义的“my_ip”的值“192.168.100.10”。

4、初始化Nova的数据库

第1步,初始化“nova_api”数据库。

[root@controller ~]# su -s /bin/sh -c "nova-manage api_db sync" nova

第2步,创建“cell1”单元,该单元将使用“nova”数据库。

[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

第3步,映射“nova”到“cell0”数据库,使“cell0”的表结构和“nova”的保持一致。

[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

第4步,初始化“nova”数据库,由于映射的存在,在“cell0”中同时创建相同数据表。

[root@controller ~]# su -s /bin/sh -c "nova-manage db sync" nova

5、检查单元注册情况

用下列语句获得已注册的单元列表。

[root@controller ~]# nova-manage cell_v2 list_cells
+--------+-------+-------------------+-----------------------------------------------------------------+----------+
|  Name|UUID |Transport URL|               Database Connection                              |Disabled|
+--------+-------+-------------------+------------------------------------------------------------------+----------+
| cell0     | ***** |  ********           | mysql+pymysql://nova:****@controller/nova_cell0 | False   |
| cell1     | *****     |  ********       | mysql+pymysql://nova:****@controller/nova           | False   |
+--------+--------+------------------+-------------------------------------------------------------------+----------+

可以看到,当前已经存在“cell0”和“cell1”两个单元。其中“cell0”是用于系统管理的,“cell1”是用于云主机管理的,每增加一个计算节点就应增加一个和“cell1”功能相同的单元。

二、nova组件初始化

1、创建Nova用户并分配角色

第1步,导入环境变量模拟登录。

[root@controller ~]# . admin-login

第2步,在OpenStack云计算平台中创建用户“nova”。

[root@controller ~]# openstack user create --domain default --password 000000 nova
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 987bc32cb3234124a266a22fa0db416f |
| name                | nova                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

第3步,给用户“nova”分配“admin”角色

[root@controller ~]# openstack role add --project project --user nova admin

2、创建Nova服务及端点

(1)创建服务
创建名为“nova”、类型为“compute”的服务。

[root@controller ~]# openstack service create --name nova compute
+---------+----------------------------------+
| Field   | Value                            |
+---------+----------------------------------+
| enabled | True                             |
| id      | 0ee4817dbf1a424aa030d51db472beaf |
| name    | nova                             |
| type    | compute                          |
+---------+----------------------------------+

(2)创建计算服务端点
OpenStack组件的服务端点有3种,分别对应Admin用户(admin)、内部组件(internal)、公众用户(public)服务的地址。
第1步,创建公众用户访问的服务端点。

[root@controller ~]#  openstack endpoint create --region RegionOne nova public http://controller:8774/v2.1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 39f06ae6812648c79faaf4d48b59152a |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 0ee4817dbf1a424aa030d51db472beaf |
| service_name | nova                             |
| service_type | compute                          |
| url          | http://controller:8774/v2.1      |
+--------------+----------------------------------+

第2步,创建内部组件访问的服务端点。

[root@controller ~]# openstack endpoint create --region RegionOne nova internal http://controller:8774/v2.1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | ba47596e1cae475c9bc14b256e4cbdb8 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 0ee4817dbf1a424aa030d51db472beaf |
| service_name | nova                             |
| service_type | compute                          |
| url          | http://controller:8774/v2.1      |
+--------------+----------------------------------+

第3步,创建Admin用户访问端点。

[root@controller ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | a475b330d33b481fbb188fc591217ec3 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 0ee4817dbf1a424aa030d51db472beaf |
| service_name | nova                             |
| service_type | compute                          |
| url          | http://controller:8774/v2.1      |
+--------------+----------------------------------+

3、启动Nova服务

首先,将安装的“openstack-nova-api”“openstack-nova-scheduler”“openstack-nova- conductor”“openstack-nova-novncproxy”四大模块设置为开机启动。

[root@controller ~]# systemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

然后,将这4个模块立即启动。

[root@controller ~]# systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

三、检测控制节点的Nova服务

1.查看端口占用情况
由于Nova服务会占用8774和8775端口,通过查看这两个端口是否启用,可以判断Nova服务是否已经运行。

[root@controller ~]# netstat -nutpl|grep 877
tcp             0       0 0.0.0.0:8774      0.0.0.0:*           LISTEN      46716/python2
tcp             0   0 0.0.0.0:8775      0.0.0.0:*                  LISTEN       46716/python2
tcp6               0    0 :::8778           :::*                       LISTEN       41715/httpd

2.查看计算服务列表

[root@controller ~]# openstack compute service list
+----+----------------+------------+----------+---------+-------+----------------------------+
| ID | Binary         | Host       | Zone     | Status  | State | Updated At                 |
+----+----------------+------------+----------+---------+-------+----------------------------+
|  3 | nova-conductor | controller | internal | enabled | up    | 2022-10-20T06:49:19.000000 |
|  4 | nova-scheduler | controller | internal | enabled | up    | 2022-10-20T06:49:17.000000 |
+----+----------------+------------+----------+---------+-------+----------------------------+

如果获得“nova-conductor”和“nova-scheduler”两个在控制节点上的模块均处于开启状态(up),则表示服务正常。

注意:错误解决办法:

Last login: Thu Oct 20 13:52:41 2022 from 192.168.200.1
net_mlx5: cannot load glue library: libibverbs.so.1: cannot open shared object file: No such file or directory
net_mlx5: cannot initialize PMD due to missing run-time dependency on rdma-core libraries (libibverbs, libmlx5)
PMD: net_mlx4: cannot load glue library: libibverbs.so.1: cannot open shared object file: No such file or directory
PMD: net_mlx4: cannot initialize PMD due to missing run-time dependency on rdma-core libraries (libibverbs, libmlx4)
net_mlx5: cannot load glue library: libibverbs.so.1: cannot open shared object file: No such file or directory
net_mlx5: cannot initialize PMD due to missing run-time dependency on rdma-core libraries (libibverbs, libmlx5)
PMD: net_mlx4: cannot load glue library: libibverbs.so.1: cannot open shared object file: No such file or directory
PMD: net_mlx4: cannot initialize PMD due to missing run-time dependency on rdma-core libraries (libibverbs, libmlx4)

如果出现以上错误,请执行以下命令:

[root@controller ~]# yum install -y libibverbs