Nova在OpenStack平台中负责了虚拟机的管理,是比较重要的一个组件,而Nova自身也需要多个组件来完成工作:

API:外部访问Nova的唯一途径,将外部请求通过RabbitMQ发送给其他组件。除了支持OpenStack API,还支持亚马逊EC2 API

Scheduler:用于云主机调度,决定了虚拟机创建在哪个计算节点上,它会选择符合条件(资源是否充足、网络是否正常等)的计算节点来创建主机,所以出现虚拟机无法创建的时候看看它的日志。

Conductor:每个计算节点要访问数据库的话需要通过它来进行,所以它是一个访问数据库的中间件。如果出现数据库无法访问的情况就检查该组件日志

Consoleauth:用于控制台的授权验证

Novncproxy:VNC代理,要在Web界面上操作虚拟机的话就需要它。

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

1、为Nova创建数据库和用户以及授权

mysql > create database nova_api;
mysql > create database nova;
mysql > grant all privileges on nova.api.* to 'nova'@'localhost' identified by 'yourpasswd';
mysql > grant all privileges on nova.api.* to 'nova'@'%' identified by 'yourpasswd';
mysql > grant all privileges on nova.* to 'nova'@'localhost' identified by 'yourpasswd';
mysql > grant all privileges on nova.* to 'nova'@'%' identified by 'yourpasswd';

2、获取OpenStack的环境变量,这个变量文件在安装keystone时已经做好 

. admin-openrc

3、在OpenStack中创建Nova用户以及设置角色 

openstack user create --domain default --password-prompt nova  #创建nova用户
openstack role add --project service --user nova admin  #把nova用户加入到service项目,赋予admin角色

4、创建Nova服务和endpoint信息,完成keystone中的注册,这里也可以看到Nova的端口是8774 

openstack service create --name nova --description "OpenStack Compute" compute

openstack endpoint create --region RegionOne  compute public http://controller_IP:8774/v2.1/%\(tenant_id\)s
openstack endpoint create --region RegionOne  compute internal http://controller_IP:8774/v2.1/%\(tenant_id\)s
openstack endpoint create --region RegionOne  compute admin http://controller_IP:8774/v2.1/%\(tenant_id\)s

5、安装Nova相关组件 

yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler

6、修改配置文件/etc/nova/nova.conf,添加数据库和keystone等配置 

[DEFAULT]
enabled_apis = osapi_compute,metadata  #启用计算和元数据的API,只用打开这行的注释即可
transport_url = rabbit://openstack:RABBITMQ_PASS@CONTROLLER_IP  #配置消息队列
auth_strategy = keystone  #使用keystone认证
use_neutron True  #启用网络服务支持
firewall_driver nova.virt.firewall.NoopFirewallDriver  #关闭防火墙

[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@CONTROLLER_IP/nova_api  #配置数据库连接信息

[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@CONTROLLER_IP/nova_api  #配置数据库连接信息

[keystone_authtoken]  #配置keystone认证服务相关内容
auth_uri = http://CONTROLLER_IP:5000
auth_uri = http://CONTROLLER_IP:35357
memcached_servers = CONTROLLER_IP:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = NOVA_PASS

[vnc]  #配置VNC管理接口IP地址
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = CONTROLLER_IP   #控制节点的IP

[glance]
api_servers = http://CONTROLLER_IP:9292    #配置glance服务的位置

[oslo_concurrency] 
lock_path = /var/lib/nova/tmp #配置锁路径

7、同步数据库 

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

8、开机自启动 

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

9、验证Nova服务 

openstack hots list
nova service list

二、Nova计算节点的安装与配置,多个节点也是这样操作,会自动注册。

1、Nova的计算节点只需要安装compute这个组件,之所以叫做计算节点是因为虚拟机都是创建在装有这些服务的节点上。该组件依赖于libvirt来创建虚拟机,所以yum安装时还会把libvirt也装上。

yum install openstack-nova-compute -y

2、计算节点的配置文件可以从控制节点复制,然后做部分修改即可。以下内容就是需要修改的地方,其他配置保持一样就可以了,需要注意配置文件需要给nova用户权限 

vi /etc/nova/nova.conf
[api_database]
#connection = mysql+pymysql://nova:NOVA_DBPASS@CONTROLLER_IP/nova_api  #注释掉

[database]
#connection = mysql+pymysql://nova:NOVA_DBPASS@CONTROLLER_IP/nova_api

[vnc]
enabled = true
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = COMPUTE_IP  #每台机器的这个配置都是不一样的
novncproxy_base_url = http://CONTROLLER_IP:6080/vnc_auto.html

[libvirt] 
virt_type = qemu  #如果该机器不支持虚拟机硬件加速(egrep -c 'vmx|svm' /proc/cpuinfo的值等于0代表不支持),就使用qemu来代替kvm。如果支持的话就不用配置该项,默认值是kvm,大多数情况也是支持的

3、启动计算服务和libvirt,如果启动卡住的话记得看下Nova日志 

systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service