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由以下几个方面组成:

nova­api 服务

    接受并响应最终用户的计算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 ment­api 服务

跟踪每个提供商的库存和使用情况。有关详细信息,请参阅Placement API。

nova-compute服务定时将收到的计算节点的信息(内存、CPU)发送给nova-placement-api服务。

nova-compute服务收集信息过程:kvm虚拟化层到libvirtd服务在到nova-compute服务。

nova-placement-api服务部署在控制节点上。

nova­ scheduler 服务

从队列获取虚拟机实例请求,并确定运行哪个计算服务器主机。决策一个虚拟机应该调度到哪个计算节点上,需要分两个步骤:

  1. 过滤(过滤内容包括计算节点的内存、CPU等)
  2. 调度算法:

       随机算法:计算主机在所有可用域内随机选择

       可用域算法:跟随机算法相仿,但是计算主机在指定的可用域内随机选择。

       简单算法:这种方法选择负载最小的主机运行实例。负载信息可通过负载均衡器获得。

nova­ conductor module 模块

nova ­compute服务与数据库之间的交互。它消除了由nova­compute服务器对云数据库的直接访问。新星导体模块水平放置。但是,不要在运行nova­compute服务的节点上部署它。

nova-conductor是nova-compute与数据库的中间件,nova-compute对数据库的操作都借由nova-conductor完成,nova-conductor通过rpc对外提供API服务。

数据库写入数据时必须经过nova­conductor module 模块,读取不必经过nova­conductor module 模块,这样保证了数据库安全性。并且nova­conductor module 模块只能在控制节点上部署。

nova­cert 模块

为X509证书提供Nova Cert服务的服务器守护程序。用于生成euca­bundle­image的证书。只需

要EC2 API。

nova­ consoleauth 守护进程

为控制台代理提供的用户授权令牌。参见nova­novncproxy和nova­xvpvncproxy。此服务必须运行才能使控制台代理工作。您可以在集群配置中针对单个nova­consoleauth服务运行任一类型的代理

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

  1. 修改配置文件 /etc/nova/nova.conf 、  /etc/httpd/conf.d/00-nova-placement-api.conf
  2. 同步数据库;

   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、查看支持虚拟化的计算机

查看服务目

查看当前镜像文件