浅辙OpenStack Nova组件

引.言

当前我们正处于大众创新、万众创业的时代背景中,云计算技术强大的整合能力能够给商业模式带来更多的创新。随着云计算技术的普及,在一定程度上也帮助到各企业完善基础设施、快速构建科技系统架构,但云计算平台的建设不是简单的软、硬件集成项目,它的种种特性依赖于它底层繁多的组件,在享受技术便利的同时需要接受其运维的复杂性,作为运维人员我们该如何与其相处呢?

面对云计算如此庞大且复杂的平台架构,一定要抱着“弱水三千,只取一瓢”的学习精神,OpenStack本身是由一系列软件开源项目组合而成,毕竟是当年NASA(美国国家航空航天局)和Rackspace众大神合作研发,千万不要勉强自己一口吃个胖子,我们学习过程可以通过对OpenStack平台进行一步步拆解,先从单个组件开始学习原理特性,按照这些特性再去尝试解读源代码,本次分享主要是对OpenStack Nova组件功能特性进行讲解。

浅辙OpenStack Nova组件

概览OpenStack组件逻辑架构

浅辙OpenStack Nova组件

OpenStack逻辑架构图

由上图可以看到Nova 处于 OpenStack 架构的中心,其他组件都为 Nova 提供支持(注意官方不是随便画的)在此仅为让大家清楚Nova地位举足轻重,本节重点讲它,不作拓展。

浅辙OpenStack Nova组件

Nova是什么?

Nova 是 OpenStack 最核心的服务模块

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

Nova是OpenStack的计算服务

负责维护和管理的网络和存储,提供计算服务。

Nova组件介绍

浅辙OpenStack Nova组件
浅辙OpenStack Nova组件

由上图我们可以看到Nova又包含了一众组件和功能,莫急先看下它们之间是如何通信的:

  • Nova包括多个服务器进程,每个进程执行不同的功能。面向用户的界面是一个RESTAPI,而内部的Nova组件通过RPC消息传递机制进行通信(通过消息队列通信)。

  • Nova-api处理REST请求,通常涉及数据库读/写,可选地将RPC消息发送给其他Nova服务;

  • Nova-compute通过Nova-conductor请求代理给DB。

下面为大家准备出Nova组件详细信息:

浅辙OpenStack Nova组件

华为Stack Database的应用参考:

浅辙OpenStack Nova组件

1、关键组件Nova-Conductor介绍

  • OpenStack G版本引进;

浅辙OpenStack Nova组件
  • 对数据库操作会使用到,解耦其他组件(Nova-compute)数据库访问;

  • 负责Nova复杂流程控制,如创建、冷迁、热迁、虚拟机规格调整以及虚拟机重建;

  • 其他组件的依赖。如Nova-compute需要依赖Nova-conductor启动成功后才能启动成功;

  • 其他组件的心跳定时写入,Nova-compute,Nova-conductor,Nova-scheduler,Nova-console,Nova-consoleauth;

  • 可水平扩展。

2、关键组件Nova-Scheduler介绍

Nova配置文件/etc/Nova/Nova.conf中调度算法默认的驱动类是FilterScheduler。

Scheduler原理

  • 过滤:过滤器(filter)负责筛选满足条件的计算节点;

  • 称重:通过权重(weight)计算选择最优的计算节点;

  • 一种情况除外:指定计算节点(本文不涉及)。

下面我们还原一下Nova-Scheduler工作过程:

①  过滤:

浅辙OpenStack Nova组件

6台计算节点通过过滤器(filter)进行层层过滤,2和4被刷掉了,1、3、5、6计算权重,5得分最高被选中(暂以考试成绩好为优者)。

浅辙OpenStack Nova组件

②  称重:

浅辙OpenStack Nova组件

权值计算默认为内存权值(支持CPU权重),6台计算节点,通过主机拥有的剩余内存来进行权值计算,内存剩余越多,权值越小,最终4为最优(实际为得分越低越为优)。

3、关键组件Nova-compute介绍

  • 虚拟机各生命周期操作的真正执行者(会调用对应的hypervisor的driver);

  • 底层对接不同虚拟化的平台(kvm,vmware,xen,FusionCompute,hyperv等);

  • 内置周期性任务,完成资源刷新,虚拟机状态同步等功能;

  • 资源管理模块(resource_tracker)配合插件机制,完成资源的统计。Claim模块完成资源的分配和释放。

Nova-compute中的周期性任务

浅辙OpenStack Nova组件

Nova-compute资源管理图解

浅辙OpenStack Nova组件

由上图可看出:

  • 底层周期性任务调用driver获取原始资源信息。(Hypervisor周期性执行任务,获取原始资源信息)

  • 原始资源信息在Nova-compute的经过资源管理对象resource_tracker经过计算后保存在在本地的self.compute对象中,并最后将该内容持久化到数据库中。(Nova-compute将收集的原始资源信息通过计算->内存记录结果->结果上传->数据库落盘)

  • Nova-scheduler每次调度时从数据库中获取该资源信息,并更新到内存的host_state_map对象中,后面的资源扣除会在该内存对象中进行。(发生调度,资源信息变化,更新到内存对象中,并在内存对象中完成资源扣除)

  • 在虚拟机的生命周期中会触发资源的分配和释放。

  • 每个资源可以通过插件式管理,便于扩展。

  • 资源更新的地方需要加锁控制,避免资源竞争导致资源扣除不准确。

浅辙OpenStack Nova组件

Nova组件服务间的布局

浅辙OpenStack Nova组件

服务间随着规模的扩大,最终会因最大规模限制或者安全问题而要求服务再分离以及隔离。

小规模部署-服务间关系示意图(即通信路径)——在同一消息总线上通信。

浅辙OpenStack Nova组件

拓展:Cell组件

  • G版本引进;

  • 目的:防止Nova集群大规模部署,导致数据库和消息队列出现瓶颈的情况发生

  • 根Cell0的Nova-api提供全局服务,每个cell独有Nova-cells、Database、AMQP、以及Nova-conductor,其余组件服务为全局服务;

  • 由华为云开源社区提供级联方案——(级联与被级联层)

    大规模部署-服务间关系示意图(即通信路径)

  • 将服务分割成多个Cell;

  • 消息总线按照Cell DB相同的线路进行拆分;

  • 每个Cell有专用的数据库和消息队列;

  • 由super conductor负责区分每个Cell中conductor位置及用途;

浅辙OpenStack Nova组件

Nova典型的操作

浅辙OpenStack Nova组件
浅辙OpenStack Nova组件
浅辙OpenStack Nova组件

文章作者:苏栋强

排版设计:王蔚棋

手绘插画:岳   媛

在看不好意思,那就点个赞吧

原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/33423.html

(0)
EBCloud的头像EBCloud
上一篇 2024年4月2日 下午3:28
下一篇 2024年4月2日 下午3:28

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注