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