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 是软 ...
随机推荐
- Entity Framework 异常: 'OFFSET' 附近有语法错误。\r\n在 FETCH 语句中选项 NEXT 的用法无效。
在使用 EF 的时候,突然发现更新后在服务器中运行出错,异常信息主要包含以下信息: 'OFFSET' 附近有语法错误.\r\n在 FETCH 语句中选项 NEXT 的用法无效.\r\n关键字 'AS' ...
- ZooKeeper 03 - ZooKeeper集群的脑裂问题 (Split Brain问题)
目录 1 ZooKeeper的主从机制 2 什么是ZooKeeper的脑裂 2.1 脑裂现象的表现 2.2 为什么会出现脑裂 3 ZooKeeper如何解决"脑裂" 3.1 3种可 ...
- 大名鼎鼎的Requests库用了什么编码风格?
原文:https://www.kennethreitz.org/essays/kenneth-reitzs-code-style 作者:Kenneth Reitz 原题:Kenneth Reitz’s ...
- Python:游戏:扫雷(附源码)
这次我们基于 pygame 来做一个扫雷,上次有园友问我代码的 python 版本,我说明一下,我所有的代码都是基于 python 3.6 的. 先看截图,仿照 XP 上的扫雷做的,感觉 XP 上的样 ...
- .NET西安社区 [拥抱开源,又见 .NET] 第二次活动简报
「拥抱开源, 又见 .NET」 随着 .NET Core的发布和开源,.NET又重新回到人们的视野. .NET Core的下个3.0即将release,加入非常多的新功能,越来越拥抱变化,DevOps ...
- 补习系列(12)-springboot 与邮件发送
目录 一.邮件协议 关于数据传输 二.SpringBoot 与邮件 A. 添加依赖 B. 配置文件 C. 发送文本邮件 D.发送附件 E. 发送Html邮件 三.CID与图片 参考文档 一.邮件协议 ...
- 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具NXP-MCUBootUtility用户指南
NXP MCU Boot Utility English | 中文 1 软件概览 1.1 介绍 NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP M ...
- Node.js - 阿里Egg的多进程模型和进程间通讯
前言 最近用Egg作为底层框架开发项目,好奇其多进程模型的管理实现,于是学习了解了一些东西,顺便记录下来.文章如有错误, 请轻喷 为什么需要多进程 伴随科技的发展, 现在的服务器基本上都是多核cpu的 ...
- 二进制数据的序列化反序列化和Json的序列化反序列化的重要区别
前言:最近一个一个很奇怪的问题,很明白的说,就是没看懂,参照下面的代码: /// <summary> /// 反序列化对象 /// </summary> /// <typ ...
- MVC bootstrap-table显示数据时显示No matching records found
问题:bootstrap-table加载数据不显示 @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layou ...