NOVA概述
openstack是提供IaaS服务的云计算平台,主要功能是提供虚拟机instance给用户,instance的创建和管理主要由nova完成,nova通过api接口和底层的hypervisor进行交互,比如通过libvirt和底层的KVM交互,通过XenAPI和XenServer交互,通过VMwareAPI和VMware ESXi交互,以api的方式,大大提高了nova的可扩展性。
nova作为openstack的核心组件,需要和其他组件进行交互,如和keystone完成认证,获得token和资源的访问端点endpoint;和glance进行交互,获取镜像资源,完成镜像的下载与启动;和neutron进行交互,完成虚拟机网络的构建,如地址分配,端口创建,网桥创建和安全组规则的建立;与dashboard交互,完成页面对hypervisor和instance的管理。
nova主要由以下几个服务共同完成相关的功能:
1. nova-api:负责接收和相应外部的api请求,支持OpenStack Compute API和Amazon EC2 Api接口
2. nova-scheduler:负责虚拟机的调度,根据多种调度算法,选择合适的hypervisor,常见的调度有:基于CPU,基于内存,随机调度等
3. nova-compute:通过API接口和底层的hypervisor交互,完成instance的创建,管理和销毁,并将状态同步至DB
4. nova-conductor:和nova-compute相互结合,完成compute节点对数据库状态的更新,避免数据库的接口直接被compute访问
5. nova-consoleauth:完成控制台,如VNC对instance访问的认证,compute节点通过proxy的方式,交由nova-consoleauth完成认证
6. nova-novncproxy:提供一个访问instance的web接口,该接口基于VNC协议,不需要安装客户端即可实现
7. 消息队列:高级消息队列完成和其他项目交互的中心通信枢纽,支持的MQ有:Rabbitmq,qpid,ZeroMQ等
8. database:nova将instance创建,运行时的状态信息,都保存在数据库中,便于后续数据的持久化,通常使用MySQL或MariaDB。
十五、NOVA的配置与安装(在controller上root用户进行)
#创建数据库并授权
# mysql -uroot -popenstack
> create database nova;
> grant all privileges on nova.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
> grant all privileges on nova.* to 'nova'@'%' identified by 'NOVA_DBPASS';
> quit
# mysql -u nova -pNOVA_DBPASS -e 'show databases;'
#创建keystone认证用户
# source admin-openrc.sh
#创建nova用户
# keystone user-create --name nova --pass NOVA_PASS --email nova@example.com --enabled true
# keystone user-list
#赋予nova用户admin权限,连接admin角色和nova用户
# keystone user-role-add --user nova --tenant service --role admin
# keystone user-role-list --user nova --tenant service
#创建nova服务并注册到keystone中,创建nova服务实体
# keystone service-create --name nova --type compute --description "Openstack Nova Compute Service"
# keystone service-list
#创建nova的api端点,将nova service的端点注册到keystone中
# keystone endpoint-create --service-id $(keystone service-list | awk '/ compute / {print $2}') --publicurl http://controller0:8774/v2/%\(tenant_id\)s --internalurl http://controller0:8774/v2/%\(tenant_id\)s --adminurl http://controller0:8774/v2/%\(tenant_id\)s --region regionOne
# keystone endpoint-list
#安装nova
# yum update
# yum -y install openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler python-novaclient
#配置数据库连接
# openstack-config --set /etc/nova/nova.conf database connection mysql://nova:NOVA_DBPASS@controller0/nova
# cat /etc/nova/nova.conf |more
查看是否修改成功
#配置rabbit
# openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend rabbit
# openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_host controller0
# openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_port 5672
# openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_userid nova
# openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_password NOVA_MQPASS
#配置rabbitmq,rabbitmq负责openstack各组件之间的通信
# openstack-config --set /etc/nova/nova.conf DEFAULT rabbit_virtual_host /
# cat /etc/nova/nova.conf |more
#配置keystone认证信息
# openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone
# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller0:5000/v2.0
# openstack-config --set /etc/nova/nova.conf keystone_authtoken identity_uri http://controller0:35357
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_tenant_name service
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_user nova
#认证机制
# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_password NOVA_PASS
# cat /etc/nova/nova.conf |more
#配置VNC信息
# openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 10.20.0.10
#vnc监听地址
# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_listen 10.20.0.10
#vnc代理客户端地址
# openstack-config --set /etc/nova/nova.conf DEFAULT vncserver_proxyclient_address 10.20.0.10
# yum list | grep websockify
# yum downgrade python-websockify-0.5.1-1.el7.noarch -y
注:openstack-icehouse需要的python-websockify版本<=0.5.1,但是在安装时默认使用了epel源中的0.6.0版本。对该软件包进行降级。这里不降级的话,查看状态会提示openstack-nova-novncproxy dead but pid file exists,openstack-nova-novncproxy服务无法启动,状态异常,在VM控制台Web端会显示10.20.0.10拒绝我们的请求。
#配置glance连接,配置镜像的位置
# openstack-config --set /etc/nova/nova.conf glance host controller0
# cat /etc/nova/nova.conf |more
#开启debug日志(可选)
# openstack-config --set /etc/nova/nova.conf DEFAULT debug True
#创建nova所需要的表
#更新数据库
# su -s /bin/sh -c "nova-manage db sync" nova
# mysql -unova -pNOVA_DBPASS -e 'show tables from nova;'
#下图只截取了一部分
#启动nova相关的服务
# service openstack-nova-api start
# chkconfig openstack-nova-api on
# service openstack-nova-scheduler start
# chkconfig openstack-nova-scheduler on
# service openstack-nova-cert start
# chkconfig openstack-nova-cert on
# service openstack-nova-consoleauth start
# chkconfig openstack-nova-consoleauth on
# service openstack-nova-conductor start
# chkconfig openstack-nova-conductor on
# service openstack-nova-novncproxy start
# chkconfig openstack-nova-novncproxy on
#校验controller上的nova服务是否正常
# source admin-openrc.sh
#结果中显示up,表示nova已经启动完毕
# nova service-list
注:以上的nova配置,都是在controller上执行的配置,我们知道还需要在compute上操作,compute节点负责和底层的hypervisor交互,完成instance的整个生命周期。
nova安装完毕后,需要注意的是:controller上需要启动的服务有:openstack-nova-api,openstack-nova-scheduler,openstack-nova-cert,openstack-nova-consolauth,openstack-nova-conductor,openstack-nova-novncproxy。compute节点则需要启动openstack-nova-compute和libvirtd服务,如果发现服务无法启动的话,检查对应的日志文件,根据日志的错误信息,排错,如openstack-nova-api的日志文件/var/log/nova/nova-api.log,检查日志文件信息,查找解决方案。