Nova的概述
Nova是OpenStack平台核心组件之一,负责管理网络、存储以及维护云平台的计算资源,还包括整个云环境虚拟机的生命周期。
Nova分为控制节点和计算节点:
计算节点:主要安装Nova-compute(负责虚拟机的创建)
控制节点:安装除Nova-compute外的组件
d
Nova的组件分类
-
Nova-Api
(接收用户的请求,通过消息队列供其他组件调用) -
Rabbit-mq Server
(消息队列服务,组件之间的沟通桥梁,所有通过消息队列来进行资源的调度) -
Nova-compute
(在计算节点运行,创建虚拟机用的) -
Nova-Network
(为虚拟机提供网络服务的,承担IP地址、vlan、安全组的划分) -
Nova-Scheduler
(调度器,从消息队列获取请求,进行合适的调度操作,选择合适的计算节点来运行虚拟机[考虑的因素包括:CPU、内存、存储等]) -
Nova-Conductor
(连接DB数据库用,是Nova-compute和DB数据库之间的中间介。Nova-compute相应访问数据库就是通过这个组件来代理访问的)
Nova的工作原理
客户端想要创建一个虚拟机的请求过程:
首先,客户端提供用户名和密码向keystone进行认证操作,认证通过,返回token。客户端拿着token向Nova发送创建虚拟机的请求,Nova收到token以后,去跟keystone进行验证该用户是否具备该权限。验证通过,Nova-Api通过消息队列(Rabbitmq)告知Nova-Scheduler进行调度操作,通过一系列的选择,将符合条件的计算节点记录到消息队列当中,对应的计算节点从消息队列获取到指令以后,就会进行创建虚拟机的操作。当需要检索数据库以及更新数据库操作时,计算节点通过消息队列告知Nova-Conductor去完成。然后通过消息队列告知计算节点即可
Nova的构建
测试环境
主机 | IP地址 |
controller | ens33:192.168.1.10 ens37:192.168.2.10 |
compute | ens33:192.168.1.20 ens37:192.168.2.20 |
Controller节点的配置
安装Nova相关组件包
[root@controller ~]# yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api -y
创建Nova数据库
[root@controller ~]# mysql -uroot -p
MariaDB [(none)]> create database nova;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on nova.* to 'nova'@'localhost' identified by 'nova';
Query OK, 0 rows affected (0.48 sec)
MariaDB [(none)]> grant all privileges on nova.* to 'nova'@'%' identified by 'nova';
Query OK, 0 rows affected (0.00 sec)
创建Nova-Api数据库
MariaDB [(none)]> create database nova_api;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on nova_api.* to 'nova'@'localhost' identified by 'nova';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all privileges on nova_api.* to 'nova'@'%' identified by 'nova';
Query OK, 0 rows affected (0.00 sec)
创建Nova_cell0数据库
MariaDB [(none)]> create database nova_cell0;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on nova_cell0.* to 'nova'@'localhost' identified by 'nova';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all privileges on nova_cell0.* to 'nova'@'%' identified by 'nova';
Query OK, 0 rows affected (0.00 sec)
修改Nova配置文件,配置数据库连接
[root@controller ~]# vi /etc/nova/nova.conf
[DEFAULT]
3166 transport_url=rabbit://guest:guest@controller
[api_database]
3523 connection=mysql+pymysql://nova:nova@controller/nova_api
[database]
4646 connection=mysql+pymysql://nova:nova@controller/nova
初始化数据库
[root@controller ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
d1fab571-29cd-431e-8296-f9d84ab34a8f
[root@controller ~]# su -s /bin/sh -c "nova-manage db sync" nova
//会出现警告,忽略
创建Nova用户
[root@controller ~]# source admin-openstack.sh
[root@controller ~]# openstack user create --domain default --password nova nova
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | 81bf28300f9c474d9d26d64ec2c751f4 |
| enabled | True |
| id | a3bd94cc2b9747479435c023cd416f31 |
| name | nova |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
赋予service的admin角色
[root@controller ~]# openstack role add --project service --user nova admin
创建Nova服务实体
[root@controller ~]# openstack service create --name nova --description "Openstack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Openstack Compute |
| enabled | True |
| id | 9c803e5e735548e49a99a8437bb6edce |
| name | nova |
| type | compute |
+-------------+----------------------------------+
指定类型为Compute
创建端点信息(public、internal、admin)
创建public端点信息
[root@controller ~]# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | f1cff9146d0d4ff49040ad21975bcab9 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 9c803e5e735548e49a99a8437bb6edce |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1 |
+--------------+----------------------------------+
创建internal端点信息
[root@controller ~]# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 94c0ab36d0f74fa3b268f7551f28d503 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 9c803e5e735548e49a99a8437bb6edce |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1 |
+--------------+----------------------------------+
创建admin端点信息
[root@controller ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | cdfb6fb534be4b9695dd4ddc8cc68e69 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 9c803e5e735548e49a99a8437bb6edce |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1 |
+--------------+----------------------------------+
创建placement用户
[root@controller ~]# openstack user create --domain default --password placement placement
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | 81bf28300f9c474d9d26d64ec2c751f4 |
| enabled | True |
| id | f63d4ca038104d0a824fbae2b95f5119 |
| name | placement |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
赋予admin角色
[root@controller ~]# openstack role add --project service --user placement admin
创建placement服务实体
[root@controller ~]# openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Placement API |
| enabled | True |
| id | e6b27ffd2cc041cfae7c52d750abb4d3 |
| name | placement |
| type | placement |
+-------------+----------------------------------+
创建placement的端点信息
创建public端点信息
[root@controller ~]# openstack endpoint create --region RegionOne placement public http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 181b70279c9c48ca8748c09df9f3c9dc |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | e6b27ffd2cc041cfae7c52d750abb4d3 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
创建internal端点信息
[root@controller ~]# openstack endpoint create --region RegionOne placement internal http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 3ea2d10303d043a7bd81f924671934a0 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | e6b27ffd2cc041cfae7c52d750abb4d3 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
创建admin端点信息
[root@controller ~]# openstack endpoint create --region RegionOne placement admin http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | a093ff8e5aea4db695cf064cba67bc33 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | e6b27ffd2cc041cfae7c52d750abb4d3 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
修改Apache的配置文件
[root@controller ~]# vi /etc/httpd/conf.d/00-nova-placement-api.conf
添加如下信息即可
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
重启httpd服务器
[root@controller ~]# systemctl restart httpd
修改Nova配置文件
[root@controller ~]# vi /etc/nova/nova.conf
[DEFAULT]
启动网络服务支持和关闭防火墙
1765 use_neutron=true
2427 firewall_driver=nova.virt.firewall.NoopFirewallDriver
设置启用的元数据API
2766 enabled_apis=osapi_compute,metadata
开启认证方式为keystone
3231 auth_strategy=keystone
配置镜像服务 API 的位置
[glance]
5351 api_servers=http://controller:9292
配置锁路径
[oslo_concurrency]
7924 lock_path=/var/lib/nova/tmp
RabbitMq(消息队列配置)
3173 rpc_backend=rabbit
8275 rabbit_host=controller
8283 rabbit_port=5672
8295 rabbit_userid=guest
8301 rabbit_password=guest
配置VNC代理使用控制节点的管理接口IP地址
[vnc]
10296 enabled=true
10320 server_listen=controller
10333 server_proxyclient_address=controller
Nova认证配置
[keystone_authtoken]
6158 auth_uri=http://controller:5000
6159 auth_url=http://controller:35357
6209 memcached_servers=controller:11211
6316 auth_type=password
6317 project_domain_name=default
6318 user_domain_name=default
6319 project_name=service
6320 username=nova
6321 password=nova
配置placement
[placement]
8828 os_region_name=RegionOne
8868 auth_type=password
8874 auth_url=http://controller:5000/v3
8889 project_name=service
8895 project_domain_name=default
8915 username=placement
8921 user_domain_name=default
8924 password=placement
启动相关服务即可
[root@controller ~]# systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
设置开机自动启动
[root@controller ~]# systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
验证Nova数据库是否创建成功
[root@controller ~]# nova-manage cell_v2 list_cells
+-------+--------------------------------------+----------------------------------+---------------------------------------------------+
| 名称 | UUID | Transport URL | 数据库连接 |
+-------+--------------------------------------+----------------------------------+---------------------------------------------------+
| cell0 | 00000000-0000-0000-0000-000000000000 | none:/ | mysql+pymysql://nova:****@192.168.1.10/nova_cell0 |
| cell1 | 2dea9f59-2743-45fb-a619-48ed16720473 | rabbit://guest:****@192.168.1.10 | mysql+pymysql://nova:****@192.168.1.10/nova |
+-------+--------------------------------------+----------------------------------+---------------------------------------------------+
查看当前节点运行的组件数量
[root@controller ~]# openstack host list
+------------+-------------+----------+
| Host Name | Service | Zone |
+------------+-------------+----------+
| controller | scheduler | internal |
| controller | conductor | internal |
| controller | consoleauth | internal |
+------------+-------------+----------+
以上就是controller节点的配置
compute节点的配置
安装Nova组件包
[root@compute ~]# yum install openstack-nova-compute -y
修改Nova的配置文件
将controller节点的配置文件复制过来进行修改即可
[root@controller ~]# scp /etc/nova/nova.conf root@compute:/etc/nova/nova.conf
[root@compute ~]# vi /etc/nova/nova.conf
只需要修改如下内容即可
10325 server_listen=0.0.0.0
10338 server_proxyclient_address=compute
10356 novncproxy_base_url=http://compute:6080/vnc_auto.html
然后注释掉数据库连接
3523 #connection = mysql+pymysql://nova:nova@192.168.1.10/nova_api
4646 #connection=mysql+pymysql://nova:nova@192.168.1.10/nova
检查系统处理器是否支持虚拟机的硬件加速
[root@compute ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
(1)如果该命令返回一个1或更大的值,说明你的系统支持硬件加速,通常不需要额外的配置。
(2)如果这个指令返回一个0值,说明你的系统不支持硬件加速,你必须配置libvirt取代KVM来使用QEMU。
[root@compute ~]# vi /etc/nova/nova.conf
6429 virt_type=qemu
启动相关服务即可
[root@compute ~]# systemctl start libvirtd.service openstack-nova-compute.service
[root@compute ~]# systemctl enable libvirtd.service openstack-nova-compute.service
添加计算节点
在controller节点执行
[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
查看添加的效果
[root@controller ~]# openstack host list
+------------+-------------+----------+
| Host Name | Service | Zone |
+------------+-------------+----------+
| controller | scheduler | internal |
| controller | conductor | internal |
| controller | consoleauth | internal |
| compute | compute | nova |
+------------+-------------+----------+
查看nova和keystone连接是否正常
[root@controller ~]# nova service-list
+--------------------------------------+------------------+------------+----------+---------+-------+----------------------------+-----------------+-------------+
| Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason | Forced down |
+--------------------------------------+------------------+------------+----------+---------+-------+----------------------------+-----------------+-------------+
| a1cec9c5-77bd-49b4-8001-b889699d28a2 | nova-scheduler | controller | internal | enabled | up | 2021-01-17T07:18:27.000000 | - | False |
| 78ea7096-30aa-4f3a-a47c-fb989a859f3f | nova-conductor | controller | internal | enabled | up | 2021-01-17T07:18:27.000000 | - | False |
| c81de351-4e2c-40ae-b6f6-13467ca77e07 | nova-consoleauth | controller | internal | enabled | up | 2021-01-17T07:18:28.000000 | - | False |
| b9fc5cff-5d38-49bd-a245-1dc1890dd108 | nova-compute | compute | nova | enabled | up | 2021-01-17T07:18:29.000000 | - | False |
+--------------------------------------+------------------+------------+----------+---------+-------+----------------------------+-----------------+-------------+
至此,Nova服务就搭建完成了