OpenStack之Fuel架构及其工作原理
一、Fuel架构
Fuel是一个开源的OpenStack部署和管理的工具,它允许用户通过Web UI进行OpenStack的部署和管理,并可以通过插件来扩展。
Fuel的目标:加快和简化不同配置的OpenStack环境的部署、测试和维护。
Fuel面向普通用户提供了多种不同需求的简化的OpenStack部署方式,主要特性有:
自动发现硬件环境;
UI界面配置;
多OpenStack集群管理;
可选是否做HA;
部署前的配置及网络检查;
部署后的OpenStack环境测试;
UI界面实时查看日志;
支持CentOS和Ubuntu,通过扩展也可支持其他版本。
Fuel的架构如下:

Fuel由许多独立的组件构成,有些组件来自第三方,如Cobbler、Puppet、Mcollective等。
UI基于bootstrap和backbone框架使用JavaScript开发。
Nailgun是Fuel的核心组件,使用Python开发。它提供用于部署和管理的REST API;管理磁盘卷配置数据、网络配置数据以及其他环境相关的数据。它能够根据编排逻辑按照正确顺序生成部署命令。Nailgun使用SQL数据库保存数据,使用AMQP服务与workers进行交互。用户通过Web UI或 Fuel CLI与其进行交互。
Astute是另外一个重要的组件,代表着nailgun的workers。它主要是根据nailgun提供的指令运行着某些操作。Astute实际上什么东西都没有只是一层封装着所有细节和相互影响的服务比如cobbler、puppet、shell scripts等等,和提供了异步通用接口给那些服务。它是通过其他基本本地协议(比如XML-RPC协议)来管理这些服务或者可以使用Mcollective agents去提供定义好的命令比如运行’puppet apply’在其他的远程节点上面或运行某些脚本。当然它是通过AMQP来与nailgun交互数据。
Cobbler用于网卡启动环境准备,被用来提供快速网络安装的linux服务。
Puppet用户部署,可以通过MCollective agent去管理其他的配置管理框架,比如Chef,SaltStack等。
Mcollective agents用于执行类似硬件驱动清理、网络连接探查等特别任务。
OSTF(OpenStack Testing Framework/Health Check)是一个独立的组件,用于在部署后测试OpenStack环境。
二、Fuel执行原理
1、节点部署
Fuel说具体点就是个管理节点。这个节点包含了给节点提供网络、安装操作系统以及部署openstack创建云平台环境等所有服务。上面说了nailgun是fuel里面的最重要的服务。它是用Python编写的RESTful应用程序包含所有系统的业务逻辑。

一个用户能通过页面或者CLI来编辑配置、给新节点分配角色以及搭建集群。
Naligun的数据都是存储在postgreSQL数据库里(跟mysqlfreedb一样属于开源的数据库)。这些数据包含了新节点硬件配置信息、角色、环境配置、现状部署情况等。
管理节点里的PXE服务使用了特殊的bootstrap image来发现新的节点。这个bootstrap image运行着特殊的脚本——nailgun agent.rb这个脚本收集了服务器硬件信息并提交给了nailgun通过REST API。
部署程序是在用户配好了环境才开始启动的。Nailgun服务端会创建一个环境配置的JSON数据文件然后交给rabbitmq队列中。这个信息会被一个“任务执行者“——Astute接受。最终由它去发送配置任务给其他组件安装部署节点。

Astute workers会去主动监听rabbitmq队列并接受消息。首先,一旦有提供环境的节点,astute会使用XML-RPC去给cobbler设置那些节点的配置并使用mcollective重启那些节点让cobbler去安装基础操作系统。Cobbler是一个部署系统能控制DHCP和TFTP服务并使用他们去网络启动那些节点以及部署系统根据用户的配置内容。
Astute发送一个特殊的信息给rabbitmq队列包含着所有需要在托管节点的操作。在已经被引导启动的节点上mcollectvie服务端会去监听刚才发送消息,一旦有消息过来他们就会运行所需的代理的操作与给定的参数。Mcollective客户端只是一组ruby脚本程序。这些程序会去运行mcollective所需要的执行的操作。

2、openstack环境部署
各节点的基础操作系统安装完成后,Astute便开始部署OpenStack的服务了。
1) 首先,Astute通过uploadfile agent将节点配置传至节点机器的/etc/astute.yaml文件,该文件包含所在节点的所有参数和配置信息;
2) 然后,Astute通过puppetsync agent同步Puppet的modules和manifests到各节点。这个agent其实就是运行rsync命令,而rsyncd服务就在Master节点。
3) 同步完成后,Astute通过puppet apply(Fuel没有使用puppet的master-agent的方式,而是直接在各节点apply的)命令执行Puppet manifest的site.pp。MCollective agent使用daemonize工具在后台执行puppet(不过在Fuel9.0部署后的节点上没有找到这个文件):
daemonize puppet apply /etc/puppet/manifests/site.pp
同时,Astute定期通过agent检查部署过程是否已经完成,并将进度通过RabbitMQ报告给Nailgun,从而可以在UI前端看到安装进度和实时的日志。
部署过程启动后,Puppet读取astute.yaml文件作为fact,然后转化数据到$fuel_settings数据结构中,后者在部署过程中用来获取所有的配置信息。
当puppet进程退出来之后无论成功还是返回一个错误,astute都会从节点得到一个报告文件并发送一个结果给nailgun。然后用户可以通过监控看到这个日志,无论是从fuel界面还是cli。
Astute也可以做额外的部署操作,这要根据用户的环境配置,都可以添加无论部署是否已经完成:
生成和上传SSH keys
网络验证
上传cirros镜像
上传/etc/hosts文件给所有节点
上传RadosGW map(ceph节点)
OpenStack之Fuel架构及其工作原理的更多相关文章
- 转载->CPU的内部架构和工作原理
CPU的内部架构和工作原理 本片博客转自:http://www.cnblogs.com/onepixel/p/8724526.html 感谢博主分享! 内部架构 CPU 的根本任务就是执行指令,对计 ...
- CPU处理器架构和工作原理浅析
CPU处理器架构和工作原理浅析 http://c.biancheng.net/view/3456.html 汇编语言是学习计算机如何工作的很好的工具,它需要我们具备计算机硬件的工作知识. 基本微机设计 ...
- 1、cpu架构和工作原理
cpu架构和工作原理 计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出.运算器和控制器封装到一起,加上寄存器组和cpu内部总线构成中央处理器(CPU).cpu的根本任务,就是执行指令,对计 ...
- CPU的内部架构和工作原理 (转,相当不错)
http://blog.chinaunix.net/uid-23069658-id-3563960.html 一直以来,总以为CPU内部真是如当年学习<计算机组成原理>时书上所介绍的那样, ...
- CPU的内部架构和工作原理
一直以来,总以为CPU内部真是如当年学习<计算机组成原理>时书上所介绍的那样,是各种逻辑门器件的组合.当看到纳米技术时就想,真的可以把那些器件做的那么小么?直到看了Intel CPU制作流 ...
- [基础架构]PeopleSoft工作原理(从浏览器发送请求开始)
PeopleSoft体系结构是由几大组成部分构成,之前文章已经详细讲过,了解这几大组成部分是怎么协同工作的更为重要.在本文中将帮助您了解PeopleSoft的工作原理以及用户发送的请求是如何被解析以及 ...
- CPU的内部架构和工作原理-原文
CPU从逻辑上可以划分成3个模块,分别是.和,这三部分由CPU内部总线连接起来.如下所示: 控制单元:控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register). ...
- Hive架构与工作原理
组成及作用: 用户接口:ClientCLI(hive shell).JDBC/ODBC(java访问hive).WEBUI(浏览器访问hive) 元数据:Metastore 元数据包括:表名.表所属的 ...
- Linux运维---1.Ceph分布式存储架构及工作原理
Ceph理论 Ceph 简介 Ceph 是一个开源项目,它提供软件定义的.统一的存储解决方案 .Ceph 是一个具有高性能.高度可伸缩性.可大规模扩展并且无单点故障的分布式存储系统 . Ceph 是软 ...
随机推荐
- 【深度学习篇】--Windows 64下tensorflow-gpu安装到应用
一.前述 一直以为自己的笔记本不支持tensflow-gpu的运行,结果每次运行模型都要好久.偶然间一个想法,想试试自己的笔记本,结果竟然神奇的发现能用GPU.于是分享一下安装步骤. 二.具体 因为版 ...
- 如何将Azure DevOps中的代码发布到Azure App Service中
标题:如何将Azure DevOps中的代码发布到Azure App Service中 作者:Lamond Lu 背景 最近做了几个项目一直在用Azure DevOps和Azure App Servi ...
- 微信小程序 Request faild 请求后台失败
首先确认你的域名和ssl证书是否配置完成. 如果后台没有进行域名配置,先去配置一个有效的备案的自持https的域名. 1.建议备案超过24小时 2.ssl证书可以直接采用阿里云的免费证书 进行ss ...
- OA发展史:由点到生态
在当今无边界组织的商业背景下,企业与员工关系已经转化为联盟关系,以往通过工作场所.劳动合同等约束的形式已经逐步弱化,管理行为空前复杂,OA正是将一个个散点整合起来的看不见的手.那么,推动OA发展的核心 ...
- Golang 入门 : 映射(map)
映射是一种数据结构,用于存储一系列无序的键值对,它基于键来存储值.映射的特点是能够基于键快速检索数据.键就像是数组的索引一样,指向与键关联的值.与 C++.Java 等编程语言不同,在 Golang ...
- Linux之用户和权限
自从我大微软终于放下身段,决定给开源社区一个迟来的拥抱,追随多年的拥趸们像是突然得到了女神的垂青,各种茫然失措.痛哭流涕.欢欣鼓舞,纷纷唱了起来:“等了好久终于等到今天,梦了好久终于把梦实现……”唱完 ...
- 通过 UI 管理 docker
Docker 正在被用在越来越多的场景中,对于不太习惯命令行工具的朋友来说,docker cli 用起来可能会比较吃力.本文笔者将介绍一个功能强大的 docker web 客户端:portainer( ...
- Docker最全教程之使用Tencent Hub来完成CI(九)
使用Tencent Hub来完成CI 关于Tencent Hub Tencent Hub是腾讯出品的DevOps服务.主要提供多存储格式的版本管理,支持Docker Image.Binary.Helm ...
- js对象数组(JSON) 根据某个共同字段 分组
首先判断 var arr = [ {"id":"1001","name":"值1","value": ...
- js + 加号 报错,IIS 配置
一.问题描述: 1开发环境完全没有问题: 2 build 后生成的js脚本,带有+号. 程序发布到IIS后,带加+号js脚本报错. 二.解决方案 1 修改build规则,让它不产生特殊符号. 能力有 ...