OpenStack之Nova
一 、Nova
使用OpenStack Compute来托管和管理云计算系统。 OpenStack Compute是基础架构即服务
(IaaS)系统的主要部分。 主要模块在Python中实现:
1因为认证,与OpenStack 身份认证keystone 交互。
2因为磁盘和服务器镜像, 与镜像服务Glance 交互。
3因为提供图形界面,与仪表盘Dashboard交互。
Nova是OpenStack云中的计算组织控制器。支持OpenStack云中实例(instances)生命周期的所有活动都由Nova处理。这样使得Nova成为一个负责管理计算资源、网络、认证、所需可扩展性的平台。但是,Nova自身并没有提供任何虚拟化能力,相反它使用libvirt API来与被支持的Hypervisors交互。Nova 通过一个与Amazon Web Services(AWS)EC2 API兼容的web services API来对外提供服务。
OpenStack Compute与OpenStack Identity(身份)进行交互以进行身份验证; 用于磁盘和服务器映像的OpenStack Image服务; 和用于用户和管理界面的OpenStack仪表板。 图像访问受到项目和用户的限制; 每个项目的配额有限(例如数量)。 OpenStack Compute可以在标准硬件上水平扩展,并下载图像以启动实例。
功能和特点:
实例生命周期管理
管理计算资源
网络和认证管理
REST风格的API
异步的一致性通信
Hypervisor透明:支持Xen,XenServer/XCP, KVM, UML, VMware vSphere and Hyper-V
OpenStack Compute由以下几个方面组成:
novaapi 服务
接受并响应最终用户的计算API调用。 该服务支持OpenStack Compute API,Amazon EC2 API 和特殊的Admin API,用于特权用户执行管理操作。 它执行一些策略并启动大多数业务流程活动,例如运行一个实例。
openstack云平台所有的服务相互之间进行通讯走各个服务的API接口。
访问API的方式:CLI命令行方式、web方式、第三方工具
nova api metadata 服务
接受来自实例的元数据请求,保存相关虚拟机的硬件数据,同时需要使用network。 当您使用nova network安装在多主机模式下运行时,通常会使用nova api metadata服务。
nova compute 计算服务
创建虚拟机的方式:CLI形式(virt-manager、virsh install)、Nova-compute服务形式。
两种方式最终都是通过libvirtd创建虚拟机。
nova compute 计算服务功能:
1 定时向OpenStack报告计算节点的状态(CPU、内存等资源的使用状态)。
2 nova compute 与Hypervisor一起实现OpenStack对instance(实例)生命周期的管理。
3 通过虚拟机管理程序API创建和终止虚拟机实例的工作程序守护程序。
(1)适用于XenServer / XCP的XenAPI
(2)KVM或QEMU的libvirt
(3)适用于VMware的VMwareAPI
处理相当复杂。 基本上,守护程序接受队列中的操作,并执行一系列系统命令,例如启动
KVM实例并更新数据库中的状态。
nova place mentapi 服务
跟踪每个提供商的库存和使用情况。有关详细信息,请参阅Placement API。
nova-compute服务定时将收到的计算节点的信息(内存、CPU)发送给nova-placement-api服务。
nova-compute服务收集信息过程:kvm虚拟化层到libvirtd服务在到nova-compute服务。
nova-placement-api服务部署在控制节点上。
nova scheduler 服务
从队列获取虚拟机实例请求,并确定运行哪个计算服务器主机。决策一个虚拟机应该调度到哪个计算节点上,需要分两个步骤:
- 过滤(过滤内容包括计算节点的内存、CPU等)
- 调度算法:
随机算法:计算主机在所有可用域内随机选择
可用域算法:跟随机算法相仿,但是计算主机在指定的可用域内随机选择。
简单算法:这种方法选择负载最小的主机运行实例。负载信息可通过负载均衡器获得。
nova conductor module 模块
nova compute服务与数据库之间的交互。它消除了由novacompute服务器对云数据库的直接访问。新星导体模块水平放置。但是,不要在运行novacompute服务的节点上部署它。
nova-conductor是nova-compute与数据库的中间件,nova-compute对数据库的操作都借由nova-conductor完成,nova-conductor通过rpc对外提供API服务。
数据库写入数据时必须经过novaconductor module 模块,读取不必经过novaconductor module 模块,这样保证了数据库安全性。并且novaconductor module 模块只能在控制节点上部署。
novacert 模块
为X509证书提供Nova Cert服务的服务器守护程序。用于生成eucabundleimage的证书。只需
要EC2 API。
nova consoleauth 守护进程
为控制台代理提供的用户授权令牌。参见novanovncproxy和novaxvpvncproxy。此服务必须运行才能使控制台代理工作。您可以在集群配置中针对单个novaconsoleauth服务运行任一类型的代理
nova novn cproxy 守护进程
提供通过VNC连接访问运行实例的代理,图形化远程连接。 支持基于浏览器的novnc客户端。
nova spicehtml5proxy 守护进程
提供通过SPICE连接访问运行实例的代理。 支持基于浏览器的HTML5客户端。
nova xvpvncproxy 守护进程
提供通过VNC连接访问运行实例的代理。 支持特定于OpenStack的Java客户机。
the queue
服务内部守护进程之间传递消息的中心枢纽。 通常用RabbitMQ实现,异步传输,减少等待时间。也可以用另一个AMQP消息队列来实现,如ZeroMQ。
SQL数据库
二、nova的逻辑架构
存储云基础架构的大部分构建时间和运行时状态,包括:
(1)可用的实例类型
(2)正在使用的实例
(3)可用网络
(4)项目
理论上,OpenStack Compute可以支持SQLAlchemy支持的任何数据库。 公共数据库是用于测试和开发工作的SQLite3,MySQL,MariaDB和PostgreSQL。
OpenStack异构:可管理不同kvm、VMware、xen类型的虚拟机。
Nova 逻辑架构
1、客户端利用 API 发出请求,要求启动一个实例。
2、该请求通过一系列检查 (比如身份验证、配额、权限等等)后,由 Nova API 服务器进行处理。
3、Nova API 服务器将客户端请求的URL进行拆分,存储到消息队列中。
4、Nova-scheduler服务接受到启动实例的任务后,先去查看Nova-placement-api服务收集到的信息。
5、Nova-scheduler服务根据调度规则决定在哪运行实例 — 即从 N 个计算节点中选取符合规则的节点。
6、Nova-scheduler服务通过队列向指定的计算节点发出消息让其开始创建实例。
7、计算节点通用 Glance API 在 Glance 注册表中查找所需的镜像文件。
8、Glance API 向计算节点返回该镜像文件的物理位置和元数据。
9、得到了物理位置等信息,计算节点就可以 Swift Proxy 请求镜像文件。
10、Swift Proxy 从 Swift 工作单元中获得映象,并将其传递给计算节点。
11、获得了镜像文件之后,计算节点就可以利用 libvirt API 来与被支持的Hypervisors交互。
12、计算节点将下载到本地的镜像文件派生出一个镜像文件供实例使用,并且计算节点会在数据库中更新实例的详细信息。
13、计算节点向网络节点的队列发出消息以便为实例配置网络。
14、一旦收到返回的网络信息,计算节点就开始最后的配置调整,并启动实例。
15、创建实例完成之后,无论成功与否,计算节点都会更新数据库,并在消息队列中发出通知。
三 、base节点设置
1、创建数据库nova、nova_api、nova_cell0;
2、创建用户、设置登录密码、权限、登录方式;
四、并查看数据库中所有用户
1、ctrl节点设置
1.1、创建nova相关用户、为nova用户设置角色、创建nova服务
1.2、为nova节点创建compute类型、范围为RegionOne的endpoint;
1.3创建placement用户、并添加到admin角色中、为placement创建placement服务
1.4为placement服务创建endpoint
(1)安装nova相关软件;
yum install \
openstack-nova-api \ openstack-nova-conductor \ openstack-nova-novncproxy \ openstack-nova-scheduler \ openstack-nova-placement-api \ openstack-nova-console
- 修改配置文件 /etc/nova/nova.conf 、 /etc/httpd/conf.d/00-nova-placement-api.conf
- 同步数据库;
1.5、重启服务、并开机自启;
systemctl restart openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
systemctl enable openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
四、compute节点配置
1.1克隆虚拟机
1.2在新克隆的虚拟机上修改IP、dns、主机名;并在DNS中添加新虚拟机的正解、反解
1.3宿主机开启透传、然后重启该虚拟机、查看透传状态、查看一层虚拟机是否具有kvm_intel模块、是否支持vmx
重启、开机自启libvirtd
1.4、安装 openstack-nova-compute 软件
1.5、修改配置文件/etc/nova/nova.conf,并查看支持vmx或svm的CPU核心数量
1.6、重启、开机自启动libvirtd、openstank-nova-compute
1.7、查看支持虚拟化的计算机
查看服务目
查看当前镜像文件