关闭

Fuel-OpenStack架构学习

标签: openstackmirantisfuel
464人阅读 评论(0) 收藏 举报
分类:
一.什么是fuel1.简介
Fuel是一个开源的软件用来部署和管理openstack,并且与openstck社区息息相关有着自己的GUI界面来管理整个openstack平台。

值得注意的是,Fuel是Mirantis公司开发的部署openstack集群工具,主要功能为裸机PXE安装操作系统,master节点提供DHCP、TFTP服务,能够实现openstack服务编排,通过puppet进行配置服务管理,此外还提供了openstack关键服务的健康检查和log实时查看等基础运维服务。支持openstack服务HA部署,有比较友好的交互式的web界面。
这里有一个在线demo—传送门:http://demo.fuel-infra.org:8000/
2.特点
Ø  硬件的自动查询
Ø  在UI配置网络和磁盘分区
Ø  可以管理和加快多个openstack节点集群
Ø  提供了HA部署模式
Ø  安装前的检查包括网络可通性
Ø  安装后的自动测试
Ø  可以在UI里面查看到实时的日志
Ø  提供了不止centos、ubuntu等linux版本
Ø  提供了多种Openstack版本

二.OpenStack Hypervisor
openstack的hypervisor支持多种,目前支持 KVM,XEN,VMware和docker。openstack负责管理hypervisor的项目是nova。因此可以通过在计算节点,修改nova的配置文件中的compute_driver选项,来选择不同的驱动来使用不同的hypervisor。


三.Fuel架构
1.操作系统配置

1.1节点配置




MCollective是一个构建服务器编排(ServerOrchestration)和并行工作执行系统的框架。
首先,MCollective是一种针对服务器集群进行可编程控制的系统管理解决方案。在这一点上,它的功能类似:Func,Fabric 和 Capistrano。


1.2网络验证



1.3集群配置和部署细节(via Facter extension)



说明
一旦部署和配置消息由Astute接受,配置方法被调用。供应部分Cobbler创建系统和超过Cobbler会重启。那么Astute使用MCollective直接寻址模式,并检查所有必需的节点可用,包括puppet。如果某些节点还没有准备好,Astute等待几秒钟,并试图再次请求。当节点引导的目标OS,Astute使用upload_fileMCollective插件数据推到目标系统上的一个特殊的文件/etc/astute.yaml。数据包括:角色和部署所需的所有其它变量。于是,Astute要求puppetdMCollective插件开始部署。用puppet启动节点。

因此,puppet agent开始其运行。模块包含facter扩展,在部署之前运行。扩展读取/etc/astute.yaml数据放置mcollective,并与它延伸Facter数据作为单个事实,然后由parseyaml功能解析以创建$ :: fuel_settings数据结构。该结构包含所有变量作为一个单一的哈希和支持嵌入等丰富的结构,如节点哈希或数组。箱体结构运行中的类选择相应的类基础,/etc/astute.yaml发现role和deployment_mode变量。

本小节参考自:
http://docs.mirantis.com/fuel-dev/develop/sequence.html



2.Fuel架构分析






Fuel不是巨大的单片,而是由几个相互依赖的组件构成的!其中有一些是fuel定义的组件,还有一些是第三方服务提供的比如cobbler、puppet、mcollective等等。一些组件可以被重复利用不需要任何更改,而一些则需调整。
2  UI 是一个用JaveScript写的页面应用,主要还是用bootstrap框架。
2  Nailgun是fuel的核心,当然是用python写的。它实现了REST API以及部署数据管理。这些数据包括磁盘卷配置、网络配置和其他使之部署成功必要的数据。它需要有编制逻辑去建造指令使部署能顺序性地完成。nailgun主要是使用SQL存储数据和AMQP服务来关联其他workers。Fuel的命令行也是由它提供的。
2  Astute是另外一个重要的组件,代表着nailgun的workers。它主要是根据nailgun提供的指令运行着某些操作。Astute实际上什么东西都没有只是一层封装着所有细节和相互影响的服务比如cobbler、puppet、shell scripts等等,和提供了异步通用接口给那些服务。它是通过其他基本本地协议(比如XML-RPC协议)来管理这些服务或者可以使用Mcollective agents去提供定义好的命令比如运行’puppet apply’在其他的远程节点上面或运行某些脚本。当然它是通过AMQP来与nailgun交互数据。
2  Cobbler 被用来提供快速网络安装的linux服务。
2  Puppet 仅仅是一个部署安装服务。当然它还创建了mcollective agent去管理其他配置管理框架比如chef、saltstack等!
2  Mcollective agents 实现具体的任务像设备清理,网络连接性测试等等。
2  OSTF (OpenStack Testing Framwork,or Health Check)主要执行在部署完成后验证openstack。


3.如何工作
Fuel说具体点就是个管理节点。这个节点包含了给节点提供网络、安装操作系统以及部署openstack创建云平台环境等所有服务。上面说了nailgun是fuel里面的最重要的服务。它是用Python编写的RESTful应用程序包含所有系统的业务逻辑。





一个用户能过通过页面或者CLI来编辑配置、给新节点分配角色以及搭建集群。
Naligun的数据都是存储在postgreSQL数据库里(跟mysqlfreedb一样属于开源的数据库)。这些数据包含了新节点硬件配置信息、角色、环境配置、现状部署情况等。
管理节点里的PXE服务使用了特殊的bootstrap image来发现新的节点。这个bootstrap image运行着特殊的脚本——nailgun agent.这个脚本收集了服务器硬件信息并提交给了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所需要的执行的操作。



当节点的操作系统被安装完成后,Astute会去启动部署openstack的服务。首先它会上传节点的配置给/etc/astute.yaml这个文件,通过uploadfile agent这个文件包好了所有部署需要的变量与配置。
接下来,astute会去使用puppetsync agent去同步puppet模块和脚本。这个agent运行了一个rsync进程——它会去同步master节点并下载最新版本的puppet模块和脚本。
当模块同步完成后,astute就会去运行部署脚本通过puppet主要清单文件site.pp。mcolletve agent使用daemonize工具在后台运行puppet脚本进程:
  1. daemonize puppet apply /etc/puppet/manifests/site.pp"
复制代码

Astute会定期地调用agent去检查部署是否完成并汇报给nailgun,当然这一过程也是通过rabbitmq队列实现的。
部署开始的时候,puppet会去读取astute.yaml文件内容通过fact并解析它到$fuel_settings结构,这样一来就可以获取所有部署配置。
当puppet进程退出来之后无论成功还是返回一个错误,astute都会从节点得到一个报告文件并发送一个结果给nailgun。然后用户可以通过监控看到这个日志,无论是从fuel界面还是cli。
Astute也可以做额外的部署操作,这要根据用户的环境配置,都可以添加无论部署是否已经完成:
2  生成和上传SSH keys
2  网络验证
2  上传cirros镜像
2  上传/etc/hosts文件给所有节点
2  上传RadosGW map(ceph节点)
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:470次
    • 积分:7
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行
    评论排行