nova是openstack中的核心组件之一,主要负责与计算相关的服务,如对虚拟机生命周期的管理。nova组件主要包括以下几大服务:
1.nova-api服务:对外提供REST API服务,是nova服务的入口
2.nova-compute服务:提供计算服务,是nova中对虚拟机管理的核心服务,它可以通过调用不同Hypervisor的API来实现对虚拟机生命周期的管理。常见的Hypervisor有KVM,Xen和VMWare等。
3.nova-conductor服务:是nova中各个服务组件与数据库交互的接口。nova架构设计中,因为nova-compute服务经常需要更新数据,因此出于安全性和可扩展性的考虑,nova-compute不会直接访问数据库,而是通过nova-conductor来访问数据库。(其他的nova服务包括nova-api,nova-scheduler可以直接访问数据库)
4.nova-scheduler服务:提供对计算资源的调度,它提供了多种算法来应对不同场景下nova对资源的调度
5.nova-novncproxy服务:提供一个代理,用于访问正在运行的实例,通过VNC协议,支持基于浏览器的novnc客户端
6.nova-placement-api服务:Placement API 在 Newton 版本中被引入 Nova,主要用于跟踪记录 Resource Provider 的 Inventory 和 Usage,并使用不同的 Resource Classes 来标记资源类型。例如:一个 resource provider 可以是一个 compute node,一个 shared storage pool,或者是一个 IP allocation pool。
通常情况下,nova服务会部署于控制节点和计算节点上,其中nova-compute部署在计算节点,其他服务部署在控制节点。为了后续能够进行虚拟机在不同节点之间冷迁移和热迁移的实验,本次部署了两个计算节点1和2,两个计算节点的部署方法完全相同,所以nova的安装部署教程主要分为两个部分,控制节点的安装部署和计算节点的安装部署。
mysql -uroot -pwwwwww
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'nova';
nova:
openstack user create --domain default --password-prompt nova
openstack role add --project service --user nova admin
openstack service create --name nova --description "OpenStack Compute" compute
placement:
openstack user create --domain default --password-prompt placement
openstack role add --project service --user placement admin
openstack service create --name placement --description “Placement API” placement
nova:
openstack endpoint create --region RegionOne compute public http://控制节点主机名:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://控制节点主机名:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://控制节点主机名:8774/v2.1
placement
openstack endpoint create --region RegionOne placement public http://控制节点主机名:8778
openstack endpoint create --region RegionOne placement internal http://控制节点主机名:8778
openstack endpoint create --region RegionOne placement admin http://控制节点主机名:8778
yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api
编辑配置文件/etc/nova/nova.conf
cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
vim /etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:wwwwww@控制节点主机名
my_ip = 控制节点ip
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
connection = mysql://nova:nova@控制节点主机名/nova_api
[database]
connection = mysql://nova:nova@控制节点主机名/nova
[api]
auth_strategy = keystone
[keystone_authtoken]
auth_url = http://控制节点主机名:35357/v3
memcached_servers = 控制节点主机名:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = nova
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
[glance]
api_servers = http://控制节点主机名:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://控制节点主机名:35357/v3
username = placement
password = placement
为了实现对placement API的访问,还需要在/etc/httpd/conf.d/00-nova-placement-api.conf添加如下配置并重启httpd服务
= 2.4>
Require all granted
Order allow,deny
Allow from all
systemctl restart httpd
systemctl status httpd
# 填充nova-api数据库(忽略此输出中的任何弃用消息):
su -s /bin/sh -c “nova-manage api_db sync” nova
# 注册cell0数据库:
su -s /bin/sh -c “nova-manage cell_v2 map_cell0” nova
# 创建cell1单元格:
su -s /bin/sh -c “nova-manage cell_v2 create_cell --name=cell1 --verbose” nova
# 填充nova数据库:
su -s /bin/sh -c “nova-manage db sync” nova
进入nova相关数据库验证是否写入成功,此时nova库中应该有110张表,nova-api库中应该有32张表
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
systemctl status openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
该服务支持多个虚拟机管理程序来部署实例或虚拟机(VM)。为简单起见,此配置使用Quick EMUlator(QEMU)虚拟机管理程序和支持虚拟机硬件加速的计算节点上的基于内核的VM(KVM)扩展。在传统硬件上,此配置使用通用QEMU管理程序。您可以通过稍作修改来遵循这些说明,以使用其他计算节点水平扩展您的环境。为了后续实验虚拟机在不同计算节点的冷热迁移,安装部署了两个计算节点,两个节点的安装部署步骤完全相同
yum install openstack-nova-compute
修改/etc/nova/nova.conf的配置
cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
vim /etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:wwwwww@控制节点主机名
my_ip = 本计算节点ip地址
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api]
auth_strategy = keystone
[keystone_authtoken]
www_authenticate_uri = http://控制节点主机名:5000/
auth_url = http://控制节点主机名:35357/
memcached_servers = 控制节点主机名:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = nova
[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://控制节点主机名:6080/vnc_auto.html
[glance]
api_servers = http://控制节点主机名:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://控制节点主机名:35357/v3
username = placement
password = placement
检查计算节点是否支持虚拟机的硬件加速
egrep -c '(vmx|svm)' /proc/cpuinfo
如果返回值为0,表明计算节点不支持虚拟机的硬件加速,需要在/etc/nova/nova.conf文件中修改如下配置
[libvirt]
virt_type = qemu
启动nova-compute服务
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
完成两个计算节点的安装配置后,在控制节点进行同步数据库操作,将两个节点加入nova_cell数据库中
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
nova官方安装文档:https://docs.openstack.org/nova/train/install/get-started-compute.html