openstack-7-(Nova)

nova的定义

使用OpenStack计算来托管和管理云计算系统。OpenStack计算是基础设施即服务(IaaS)系统的重要组成部分。主要模块是用Python实现的。

OpenStack计算与OpenStack身份交互以进行身份验证;用于磁盘和服务器映像的OpenStack映像服务;以及用户和管理界面的OpenStack仪表板。图像访问受到项目和用户的限制;每个项目的配额是有限的(例如,实例的数量)。OpenStack计算可以在标准硬件上水平扩展,可以下载图片来启动实例。

Nova是openstack中最核心的组件。openstack的其他组件归根结底是为Nova组件服务的,基于用户需求为VM提供计算资源管理。

Nova的架构
openstack-7-(Nova)_第1张图片
目前的Nova主要由API、Compute、Conductor、Scheduler四个核心服务组成,他们之间通过AMQP通信。 API是进入Nova的HTTP接口。Compute和VMM(虚拟机管理器)交互来运行虚拟机并管理虚拟机的生命周期(通常是一个主机一个compute服务)。Scheduler从可用池中选择最合适的节点来创建虚拟机实例。

Nova 的逻辑模块
Nova服务是由多个子服务构成,子服务是通过RPC实现通信。服务之间有很松的耦合性。各个逻辑模块如下:
(1)Nova API :HTTP服务,用于接收和处理客户端发送的HTTP请求
(2)Nova Cell :Nova Cell子服务的目的便于实现横向扩展和大规模的部署,同时不增加数据库和RPC消息中间件的复杂度。在Nova Scheduler服务的主机调度的基础上实现了区域调度。
(3)Nova Cert :用于管理证书,为了兼容AWS。AWS提供一整套的基础设施和应用程序服务,使得几乎所有的应用程序在云上运行。
(4)Nova Compute :Nova组件中最核心的服务,实现虚拟机管理的功能。实现了在计算节点上创建、启动、暂停、关闭和删除虚拟机、虚拟机在不同的计算节点间迁移、虚拟机安全控制、管理虚拟机磁盘镜像以及快照等功能。
(5)Nova Conductor :RPC服务,主要提供数据库查询功能。以前的openstack版本中,Nova Compute子服务中定义了许多的数据库查询方法。但是,由于Nova Compute子服务需要在每个计算节点上启动,一旦某个计算节点被攻击,就将完全获得数据库的访问权限。有了Nova Compute子服务之后,便可在其中实现数据库访问权限的控制
(6)Nova Scheduler :Nova调度子服务。当客户端向Nova 服务器发起创建虚拟机请求时,决定将虚拟机创建在哪个节点上
(7)Nov Console、Nova Consoleauth、Nova VNCProxy :Nova控制台子服务。功能是实现客户端通过代理服务器远程访问虚拟机实例的控制界面

Nova启动一个虚拟机的过程
nova 启动虚拟机的过程如图
openstack-7-(Nova)_第2张图片
流程如下:
1)界面或者命令行通过RESTful API向keystone发送认证信息。
2)Keystone通过用户认证消息,并生成auth_token返回给对应的认证请求。
3)界面或者命令行通过RESTful API向nova API发送一个boot instance的请求(携带auth-token)
4)nova-api接受请求后,向keystone发送认证请求,查看token是否为有效用户的token。
5)keystone验证token是否有效,如有效,则返回有效的认证和对应的角色(备注:有些操作需要有角色权限才能操作)
6)通过认证后,nova-api和数据库通信。
7)初始化新建虚拟机的数据库记录。
8)nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
9)nova-schduler进程监听消息队列,获取nova-api的请求。
10)nova-scheduler通过nova数据库中计算资源的的情况,并通过调度算法计算符合虚拟机创建需要的的主机。
11)对于有符合虚拟机创建的主机,nova-scheduler更新数据库虚拟机对应的物理主机信息。
12)nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。、
13)nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
14)nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息(flavor)。
15)nova-conductor从消息队列中拿到nova-compute请求信息。
16)nova-conductor根据消息查询虚拟机对应的消息。
17)nova-conductor 从数据库中获取虚拟机对应信息。
18)nova-conductor把虚拟机信息通过消息的方式发送的消息队列中。
19)nova-compute从对应的消息队列中获取虚拟节信息消息。
20)nova-compute通过keystone的RESTfull API拿到的认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要的镜像。
21)glance-api向keystone认证token是否有效,并返回验证结果。
22)token验证通过,nova-compute获取虚拟机镜像信息(URL)。
23)nova-compute通过keystone的RESTfull API拿到的认证的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
24)neutron-server向keystone认证token是否有效,并返回验证结果。
25)token验证通过,nova-compute获取网络信息。
26)nova-compute通过keystone的RESTfull API拿到的认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
27)cinder-api向keystone认证token是否有效,并返回验证结果。
28)token验证通过,nova-compute获取虚拟机持久化存储信息。
29)nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。

Nova Scheduler Filter的类型
选择一个虚拟机在哪个主机运行的方式有多种,nova支持的方式主要有以下三种:
1)ChanceScheduler(随机调度器):从所有nova-compute服务正常运行的节点中随机选择。

2)FilterScheduler(过滤调度器):根据指定的过滤条件以及权重挑选最佳节点。

3)CachingScheduler:FilterScheduler一种,在FileterScheduler的基础上,将主机资源的信息存到本地的内存中,然后通过后台的定时任务定时的从数据库中获取最新的主机资源信息。

Nova Scheduler的工作流程如图
openstack-7-(Nova)_第3张图片
FilterScheduler首先使用指定的Fileters(过滤器)得到符合条件的主机,比如内存小于50%,然后对得到的主机重新计算权重并且排列,获取最佳的一个。具体的Filter有如下几种:
(1)RetryFilter:重试过滤,假设Host1,Host2,Host3过滤筛选出来了,Host1权重最高,被选中,由于其它原因VM在Host1上落地失败,nova-scheduler会重新筛选新的host;Host1因为失败不会再入选。可通过scheduler_max_attempts=3 设置重试的次数

(2)AvalilabilityZoneFilter 可选域过滤,可以提供容灾性和隔离服务,计算节点可以纳入一个创建好的AZ中,创建VM的时候可以指定AZ,这样虚拟机会落到指定的host中

(3)RamFilter 内存过滤 创建VM时会选择flavor,不满足flavor中内存要求的host会过滤掉。可以通过linux里面的free来查看,超量使用的设置:ram_allocation_ratio=3(如果计算节点有16G内存,那个openstack会认为有48G内存)

(4)4)CoreFilter CPU core过滤 创建VM时会选择flavor,不满足flavor中core要求的host会过滤掉。CPU的超量设置 cpu_allocaion_ratio=16.0(若计算节点为24core,那么openstack会认为348core)

(5)DiskFilter 磁盘容量过滤 创建VM时会选择flavor,不满足flavor中磁盘要求的host会过滤掉。Disk超量使用设置:disk_allocation_ratio=1.0(硬盘容量不建议调大)

(6)ComputeFilter nova-compute服务的正常过滤 创建VM时,若host的nova-compute的服务不正常,那么就会别筛掉

(7)ComputeCababilitiesFilter 根据计算节点的特性来筛选,例如x86_64

(8)ImagePropertiesFilter 根据所选的image的属性来匹配计算节点 例如希望某个image只能运行在KVM的hypervisor上,可以通过“Hypervisor Type”属性来指定

(9)ServerGroupAntiAffinityFilter 尽量将Instance部署到不同的节点上。例如vm1,vm2,vm3,计算节点有Host1,host2,host3
创建一个anti-affinity策略 server group “group-1”
nova server-group-create –policy anti-affinity group-1
nova boot-image IMAGE_ID –flavor 1 –hint group-group1 vm1
nova boot-image IMAGE_ID –flavor 1 –hint group-group1 vm2
nova boot-image IMAGE_ID –flavor 1 –hint group-group1 vm3

(10)ServerGroupAffinityFilter 尽量将Instance部署到同一节点上。例如vm1,vm2,vm3,计算节点有Host1,host2,host3
创建一个group-affinity策略 server group “group-2”
nova server-group-create –policy anti-affinity group-2
nova boot-image IMAGE_ID –flavor 1 –hint group-group2 vm1
nova boot-image IMAGE_ID –flavor 1 –hint group-group2 vm2
nova boot-image IMAGE_ID –flavor 1 –hint group-group2 vm3

nova的手动搭建(控制节点)

  1. 在Controller节点上创建库,并授权。
create database nova_api;
create database nova;
create database nova_cell0;

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost'  IDENTIFIED BY 'openstack'; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost'  IDENTIFIED BY 'openstack'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost'  IDENTIFIED BY 'openstack'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'openstack';
  1. 创建nova用户,并在service项目中添加管理员角色、绑定角色
source admin-openrc
openstack user create --domain default --password-prompt nova  //密码openstack

openstack-7-(Nova)_第4张图片

  1. 创件nova服务以及端口
openstack service create --name nova --description "OpenStack Compute" compute

openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne  compute admin http://controller:8774/v2.1

openstack-7-(Nova)_第5张图片

  1. 创建placement用户,并在service项目中添加管理员角色,绑定admin权限
source admin_openrc

openstack user create --domain default --password-prompt placement   //输入nova用户的密码:openstack

openstack role add --project service --user placement admin

openstack-7-(Nova)_第6张图片

  1. 创建placement服务及端口
openstack service create --name placement --description "Placement API" placement

openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778

openstack-7-(Nova)_第7张图片
如果创建端口错误,是可以这样删除的
(1)使用openstack endpoint list |grep placement查看出placement服务端口的ID有哪些。
openstack-7-(Nova)_第8张图片
(2)再使用openstack endpoint delete +对应端口的ID就可以删除后进行重新创建。

  1. 安装相关包并配置
yum install -y penstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api

编辑配置文件/etc/nova/nova.conf如下
在这里插入图片描述
在这里插入图片描述
openstack-7-(Nova)_第9张图片
在这里插入图片描述
在这里插入图片描述
openstack-7-(Nova)_第10张图片
openstack-7-(Nova)_第11张图片
在这里插入图片描述
在这里插入图片描述
openstack-7-(Nova)_第12张图片
openstack-7-(Nova)_第13张图片

  1. 编辑配置文件/etc/httpd/conf.d/00-nova-placement-api.conf,文件末尾添加如下内容

   = 2.4>
      Require all granted
   
   
      Order allow,deny
      Allow from all
   

保存退出后,重启httpd服务

  1. 初始化nova_api数据库表结构
su -s /bin/sh -c "nova-manage api_db sync" nova

出现以下错误,是因为有BUG存在
在这里插入图片描述
解决办法:
修改配置文件vim /usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py 在175行进行操作
在这里插入图片描述
再次初始化就不会再报错

  1. 注册cell0数据库
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
  1. 创建cell1
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
  1. 初始化nova数据库的表结构
su -s /bin/sh -c "nova-manage db sync" nova

openstack-7-(Nova)_第14张图片
这里并不是报错,不放心的可以进去到新建的库中查看其中是否有表存在。

  1. 验证cell0和cell1是否注册
    openstack-7-(Nova)_第15张图片
  2. 服务启动并加入开机自启
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
  1. 查看之前nvoa创建的服务

openstack-7-(Nova)_第16张图片

你可能感兴趣的:(openstack-7-(Nova))