教学内容及过程旁批课前准备:
检查自己前面的系统配置是否完全完成,必须完成后才能进入这一段学习。并且
先进行系统快照。
教学引入:
OpenStack云主机的创建和管理是由Nova组件负责的。安装Nova组件和前面的Keystone、Glance、Placement组件类似,但是它需要在两个节点(控制节点和计算节
点)上进行安装,其中计算节点主机负责生成云主机。
Nova是OpenStack中最核心的服务模块,负责管理和维护计算资源。比如平台提
供的核心服务——云主机也称为实例(Instances)的整个生命周期的所有活动都由Nova
管理。
教学内容与教学设计:
14.1 Nova的基本概念
14.1.1 计算服务(Nova)
Nova负责管理OpenStack中云主机实例的创建、删除、启动、停止等。Nova位于
Openstack架构的中心,其他服务或者组件(比如Glance、Placement、Cinder、Neutron
等)对它提供支持。其中Glance为实例提供镜像、Cinder为实例提供块存储、Neutron
为实例提供网络支持。Nova自身并没有任何虚拟化能力,它通过Libvirt(一种管
理虚拟化平台的开源应用接口)来创建和管理云主机。Libvirt API是管理虚拟化平
台的开源的应用接口,提供对多种虚拟化技术如KVM、Xen、VMware ESX,QEMU
和其他虚拟化技术的统一接口服务。
14.1.2 Nova计算服务的组件架构
Nova这一组件由许多的小组件组成,主要组件如图14.1所示。
图14.1 Nova的模块组成
(1)Nova-api
接收和响应外部请求,也是外部可用于管理NOVA的唯一组件。它是对外的窗口,
负责与外部联系并响应用户的请求。
(2)Nova-scheduler
虚拟机调度服务,与Placement合作,负责从计算机集中选择某一主机去创建虚拟机。
(3)Nova-compute
Nova的核心服务,负责虚拟机的创建以及资源的分配。它本身并不提供任何虚拟化功能,但它却通过Libvirt API实现生成、管理不同的虚拟机形式(如KVM、Xen、QEMU等)云主机。如图14.1所示,三个组件之间的信息并不是直接传递,而是通过消息队列(Rabbit MQ)进行消息的传递。
(4)Nova-conductor
Nova还有一个重要的组件是Nova-conductor,它负责与数据库的连接管理,Nova 中其他组件均通过它与数据库交互。
14.1.3 Nova的基本工作流程
图14.2 创建云主机基本流程
通过图14.2我们可以知道,在OpenStack中创建实例的大致流程为:
1.用户通过管理界面或命令行发起实例创建请求,Keystone从请求中获取用户相关信息并进行身份验证;
2.验证通过后,用户获得认证Token,实例创建请求通过Nova-api传递给Nova-scheduler;
3.Nova-scheduler进行实例创建目的主机的调度选择,主机选取完成后,请求转入Nova-compute;
4.Nova-compute通过Nova-conductor从数据库中获取创建实例的信息,在成功获取实例信息后,Nova-compute分别与Glance、Neutron和Cinder交互以获取镜像资源、网络资源和云存储资源;
5.一切资源准备就绪后,Nova-compute调用Libvirt接口来创建虚拟机。
14.2安装与配置控制节点Nova计算服务
14.2.1 安装和配置Nova
(1)安装Nova软件包
[root@controller ~]#yum install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler -y
以上语句共安装了四个软件,它们分别是:
openstack-nova-api:Nova与外部的接口组件;
openstack-nova-conductor:Nova数据库服务,提供数据库访问;
openstack-nova-novncproxy:Nova的vnc服务,提供虚拟控制台,用户可以通过该控制台管理实例;
nova-scheduler:Nova调度服务,以选择某台计算节点主机进行创建实例。
安装软件包时和前面几章的组件一样会自动创建“nova”用户和同名的用户组。
[root@controller ~]# cat /etc/passwd | grep nova
nova:x:162:162:OpenStack Nova Daemons:/var/lib/nova:/sbin/nologin
[root@controller ~]# cat /etc/group | grep nova
nobody:x:99:nova
nova:x:162:nova
如上面的语句执行后能获得数据,则说明“nova”用户和用户组已经创建成功。(2)创建一个nova数据库并授权
①进入数据库
[root@controller ~]# mysql -uroot -p000000
因为MariaDB数据库完全兼容MySql数据库,因此在使用方式上是与MySql数据库是一样的。该命令的参数“-u”后为用户名,“-p”后为密码,可以不需要空格。
登录数据库成功后就进入如上画面。
②建立nova数据库
Nova需要创建三个数据库,分别是nova、nova_api、nova_cell0数据库,我们采用下面三条语句进行创建:
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova_cell0;
③为数据库授权
分别给三个数据各授予nova用户从本地和远程的访问权限。
1)数据库nova授权
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
如何搭建云平台MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
2)数据库nova_api授权
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED B
Y 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
3)数据库nova_cell0授权
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%'
IDENTIFIED BY 'NOVA_DBPASS';
【提示】密码可以根据需要变更,不一定是'NOVA_DBPASS',但是需要记住更改后的密码,后面配置连接数据库的配置文件时会使用得到。
④退出数据库
MariaDB [(none)]> exit;
(3)修改Nova配置文件
该文件为“/etc/f”。
①备份配置文件
[root@controller ~]# cp /etc/f /etc/f.bak
②去掉所有注释,生成新的配置文件
[root@controller ~]# grep -Ev '^$|#' /etc/f.bak >/etc/f
③编辑新的配置文件
[root@controller ~]# vi /etc/f
我们可以看到该文件内容已经不存在空行和注释行。接下来针对该配置文件进行如下修改。
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/
my_ip = 192.168.14.10
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api]
auth_strategy = keystone
[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
[glance]
api_servers = controller:9292
[keystone_authtoken]
www_authenticate_uri = controller:5000/
auth_url = controller:5000/
memcached_servers = controller:11211