openstack组件之nova详细概要介绍及部署

31 篇文章 0 订阅
5 篇文章 0 订阅

简介

Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源。OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的。

用途与功能 :

(1)实例生命周期管理

(2)管理计算资源

(3)网络和认证管理

(4)REST 风格的 API

(5)异步的一致性通信

(6)Hypervisor 透明:支持Xen,XenServer/XCP,KVM, UML, VMware vSphere and Hyper-V

Nova 处于 Openstak 架构的中心,其他组件都为 Nova 提供支持: Glance 为 VM 提供 image Cinder 和
Swift 分别为 VM 提供块存储和对象存储 Neutron 为 VM 提供网络连接。

在这里插入图片描述

Nova组件中各个子服务

1、Nova API :

HTTP服务,用于接收和处理客户端发送的HTTP请求
NOva-api对接受到的HTTP API请求做以下处理:
(1)检查客户端传入的参数是否合法有效
(2)调用nova其他服务来处理客户端HTTP请求
(3)格式化nova其他子服务返回结果并返回给客户端

nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层。

2、Nova Cell :

Nova Cell子服务的目的便于实现横向扩展和大规模的部署,同时不增加数据库和RPC消息中间件的复杂度。在Nova Scheduler服务的主机调度的基础上实现了区域调度。

产生原因

  • 当openstacknova集群的规模变大时,数据库和消息队列服务就会出现瓶颈问题。Nova为提高水平扩展及分布式、大规模的部署能力,同时又不增加数据库和消息中间件的复杂度,引入了Cell概念。
  • Cell可译为单元。为支持更大规模的部署,openstack将大的nova集群分成小的单元,每个单元都有自己的消息队列和数据库,可以解决规模增大时引起的瓶颈问题。在Cell中Keystone.Neutron.Cinder.Glance等资源是共享的。
    架构

Cell结构中主要分为 API Cell(Parent Cell )以及 Child Cell 两种形式,其中,API Cell 主要包含的服务如下: AMQP、Broker、Database、nova-cells、nova-api、Keystone;Child Cell主要包含的服务有:AMQP、Broker、Database、nova-cells、nova-scheduler、nova-network、nova-compute、Keystone。

每一个Cell 包含独立的 Message Broker 以及 Database,其中 API Cell 主要包含 nova-api服务,用于接收用户请求,并将用户请求通过 message 的形式发送至指定的 Cell。Cells 之间的通信主要通过传递 message实现的,API Cell 会将用户的请求合成一个含有指定 Child Cell 的 message,含有请求的 message 会在 Children Cells 中间进行路由,直至指定的 Cell 节点进行处理。Child Cell 包含除 nova-api 之外的所有nova-*服务,实现具体的 Nova Compute 节点服务;API Cell 与 Child Cell 共享 Glance 服务,且各Cells 之间的通信均通过 nova cells 服务进行。

3、Nova Cert :

用于管理证书,为了兼容AWS。AWS提供一整套的基础设施和应用程序服务,使得几乎所有的应用程序在云上运行

4、Nova Compute :

Nova组件中最核心的服务,实现虚拟机管理的功能。实现了在计算节点上创建、启动、暂停、关闭和删除虚拟机、虚拟机在不同的计算节点间迁移、虚拟机安全控制、管理虚拟机磁盘镜像以及快照等功能。

支持方式:
通过Driver (驱动)架构支持多种Hypervisor虚拟机管理器

  • 面对多种Hypervisor, nova-compute为这些Hypervisor定义统一的接口
  • Hypervisor只需要实现这些接口, 就可以Driver的形式即插即用到OpenStack系统中

功能

定期向OpenStack报告计算节点的状态

  • 每隔一-段时间,nova-compute就会报告当前计算节点的资源使用情况和nova-compu服务状态。
  • nova-compute是通过Hypervisor的驱动获取这些信息的。

实现虚拟机实例生命周期的管理

  • OpenStack对虚拟机实例最主要的操作都是通过nova-compute实现的。
    创建、关闭、重启、挂起、恢复、中止、调整大小、迁移、快照
  • 以实例创建为例来说明nova- compute的实现过程。

为实例准备资源。
创建实例的镜像文件。
创建实例的XML定义文件。
创建虚拟网络并启动虚拟机。

组件图

在这里插入图片描述

支持方式

通过Driver (驱动)架构支持多种Hypervisor虚拟机管理器

面对多种Hypervisor, nova-compute为这些Hypervisor定义统一的接口 Hypervisor只需要实现这些接口,
就可以Driver的形式即插即用到OpenStack系统中

功能

定期向OpenStack报告计算节点的状态

每隔一-段时间,nova-compute就会报告当前计算节点的资源使用情况和nova-compu服务状态。
nova-compute是通过Hypervisor的驱动获取这些信息的。

实现虚拟机实例生命周期的管理

OpenStack对虚拟机实例最主要的操作都是通过nova-compute实现的。 创建、关闭、重启、挂起、恢复、中止、调整大小、迁移、快照
以实例创建为例来说明nova- compute的实现过程。
为实例准备资源。
创建实例的镜像文件。
创建实例的XML定义文件。
创建虚拟网络并启动虚拟机。

5、Nova Conductor :

RPC服务,主要提供数据库查询功能。以前的openstack版本中,Nova Compute子服务中定义了许多的数据库查询方法。但是,由于Nova Compute子服务需要在每个计算节点上启动,一旦某个计算节点被攻击,就将完全获得数据库的访问权限。有了Nova Compute子服务之后,便可在其中实现数据库访问权限的控制。

6、Nova Scheduler :

Nova调度子服务。当客户端向Nova 服务器发起创建虚拟机请求时,决定将续集你创建在哪个节点上。

架构说明
在这里插入图片描述

6、1过滤器(filter)

过滤出可以创建虚拟机的主机。
scheduler_available_filters选项用于配置可用过滤器,默认是所有nova自带的过滤器都可以用于过滤作用

Nova过滤器类型说明

  • DifferentHostFilter:选择与一个集合的虚拟机不同位置的主机;
  • SameHostFilter:选择与一组虚拟机相同位置的主机;
  • GroupAntiAffinityFilter:选择与一个集合的虚拟机不同位置的主机,集合中的每个元素都是一个虚拟机的组;
  • AggregateInstanceExtraSpecsFilter:返回能够建立某一类型虚拟机的主机列表
  • AvailabilityZoneFilter:通过可用的区域来过滤主机host
  • ComputeCapabilitiesFilter:根据host的capabilities判断是否允许创建虚拟机
  • ComputeFilter:根据主机capabilities的状态和服务的可用性过滤
  • CoreFilter:基于主机的CPU内核数进行过滤
  • DiskFilter:基于磁盘使用率的主机host过滤
  • IoOpsFilter:过滤掉有过多的I/O操作的主机host
  • RamFilter:只返回有足够可使用的RAM主机host
  • RetryFilter:跳过已经尝试过的节点

计算权值(weight)

在这里插入图片描述

OpenStack源码位置
/usr/lib/python2.7/site-packages


权重源码位置
/usr/lib/python2.7site-packages/nova/scheduler/weights

  • 所有权重位于nova/scheduler/weights目录下。目前默认实现是RAMweighter,根据计算节点空闲的内存量计算权重值,空闲越多,权重越大,实例将被部署到当前空闲内存最多的计算节点上

7、Nova Console、Nova Consoleauth、Nova VNCProxy :

Nova控制台子服务。功能是实现客户端通过代理服务器远程访问虚拟机实例的控制界面。

8、DB:

用于数据存储的sql数据库。
总结:Nova 各个子组件之间很松的耦合性。就算其中有些服务不启动,Nova组件也能正常工作。 Nova中要实现基本的虚拟机管理功能,至少需要启动Nova API、Nova Compute、Nova Conductor、Nova Scheduler服务。

部署

openstack其他组件部署连接

创建数据库实例和数据库用户

[root@ct ~]# mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE placement;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'PLACEMENT_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'PLACEMENT_DBPASS';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;

在这里插入图片描述

创建Placement服务用户和API的endpoint

创建placement用户

[root@ct ~]# openstack user create --domain default --password PLACEMENT_PASS placement

在这里插入图片描述

给与placement用户对service项目拥有admin权限

[root@ct ~]# openstack role add --project service --user 

创建一个placement服务,服务类型为placement

[root@ct ~]# openstack service create --name placement --description "Placement API" placement

在这里插入图片描述
注册API端口到placement的service中;注册的信息会写入到mysql中

[root@ct ~]# openstack endpoint create --region RegionOne placement public http://ct:8778
[root@ct ~]# openstack endpoint create --region RegionOne placement internal http://ct:8778
[root@ct~]# openstack endpoint create --region RegionOne placement admin http://ct:8778

安装placement服务

[root@controller ~]# yum -y install openstack-placement-api

修改placement.conf配置文件

openstack-config --set /etc/placement/placement.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement
openstack-config --set /etc/placement/placement.conf api auth_strategy keystone
openstack-config --set /etc/placement/placement.conf keystone_authtoken auth_url  http://ct:5000/v3
openstack-config --set /etc/placement/placement.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/placement/placement.conf keystone_authtoken auth_type password
openstack-config --set /etc/placement/placement.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/placement/placement.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/placement/placement.conf keystone_authtoken project_name service
openstack-config --set /etc/placement/placement.conf keystone_authtoken username placement
openstack-config --set /etc/placement/placement.conf keystone_authtoken password PLACEMENT_PASS

查看placement配置文件
[root@ct placement]# cat placement.conf
[DEFAULT]
[api]
auth_strategy = keystone
[cors]
[keystone_authtoken]
auth_url = http://ct:5000/v3				#指定keystone地址
memcached_servers = ct:11211			#session信息是缓存放到了memcached中
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = PLACEMENT_PASS
[oslo_policy]
[placement]
[placement_database]
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement
[profiler]

启动apache

[root@ct placement]# systemctl restart httpd

curl 测试访问

[root@ct placement]# curl ct:8778
{"versions": [{"status": "CURRENT", "min_version": "1.0", "max_version": "1.36", "id": "v1.0", "links": [{"href": "", "rel": "self"}]}]}

查看端口占用(netstat、lsof)

[root@ct conf.d]# netstat -natp | grep 8778
tcp6       0      0 :::8778                 :::*                    LISTEN      101615/httpd        

检查placement状态

[root@ct conf.d]# placement-status upgrade check
+----------------------------------+
| Upgrade Check Results            |
+----------------------------------+
| Check: Missing Root Provider IDs |
| Result: Success                  |
| Details: None                    |
+----------------------------------+
| Check: Incomplete Consumers      |
| Result: Success                  |
| Details: None                    |
+----------------------------------+

未完待续

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值