刘康的专栏

Enjoy learning IT !

Fuel部署OpenStack过程及原理介绍

1 Fuel及其架构

Fuel是一个开源的OpenStack部署和管理的工具,它允许用户通过Web UI进行OpenStack的部署和管理,并可以通过插件来扩展。
Fuel的目标:加快和简化不同配置的OpenStack环境的部署、测试和维护。
Fuel面向普通用户提供了多种不同需求的简化的OpenStack部署方式,主要特性有:

  • 自动发现硬件环境;
  • UI界面配置;
  • 多OpenStack集群管理;
  • 可选是否做HA;
  • 部署前的配置及网络检查;
  • 部署后的OpenStack环境测试;
  • UI界面实时查看日志;
  • 支持CentOS和Ubuntu,通过扩展也可支持其他版本。

Fuel的架构如下:
Fuel-architecture.png
Fuel由许多独立的组件构成,有些组件来自第三方,比如Cobbler、Puppet、Mcollective等。

  • UI基于bootstrap和backbone框架使用JavaScript开发。
  • Nailgun是Fuel的核心组件,使用Python开发。它提供用于部署和管理的REST API;管理磁盘卷配置数据、网络配置数据以及其他环境相关的数据。它能够根据编排逻辑按照正确顺序生成部署命令。Nailgun使用SQL数据库保存数据,使用AMQP服务与workers进行交互。用户通过Web UI或 Fuel CLI与其进行交互。
  • Astute是另一个比较重要的组件,在部署时执行Nailgun的指令,其实它是相当于“包工头”,手下有Cobbler、Puppet、shell 脚本等。它与Nailgun通过AMQP进行数据交换。
  • Cobbler用于网卡启动环境准备,其中也实现了Ironic的功能。
  • Puppet用户部署,可以通过MCollective agent去管理其他的配置管理框架,比如Chef,SaltStack等。
  • Mcollective agents用于执行类似硬件驱动清理、网络连接探查等特别任务。
  • OSTF(OpenStack Testing Framework/Health Check)是一个独立的组件,用于在部署后测试OpenStack环境。

2 Fuel执行原理

上述Fuel各组件在Fuel Master节点中。
首先来看一下Master节点中最终要的组件Nailgun。我们在Web界面上创建环境、修改设置、添加节点配置角色等都是通过它来完成的。通常Nailgun使用PostgreSQL数据库来保存数据,包括所发现节点的硬件配置、角色、环境设置、当前部署状态与进度等。

2.1 发现节点

Node discovery
待部署节点通过网卡启动后,被Fuel的PXE发现并灌入bootstrap镜像启动。bootstrap中有一个特别的脚本叫做nailgun-agent.rb,它能够收集该节点的硬件信息并通过REST API提交给Nailgun,Nailgun会保存到数据库。

2.2 部署节点


当用户在Web页面点击“部署”按钮时,Nailgun基于环境设置、各节点信息等生产一个JSON结构的数据放在RabbitMQ队列中。Astute workers始终在坚定RabbitMQ队列,因此会很快收到任务并展开部署工作,所有的操作都来自Astute库。

2.2.1 节点准备

开始进行各节点的准备。Astute使用XML-RPC将这些节点的配置传给Cobbler,然后重启各节点,用MCollective agent只会Cobbler给各节点安装基础操作系统。

具体来说,当开始安装操作系统时,Astute会RabbitMQ队列中增加一条消息,该消息包含在各节点需要执行的操作。在每个待部署的节点上都有一个MCollective server,它们会持续监听队列中的消息,当收到这条消息后,便会指挥相应的MCollective agent来执行操作,其实这些agent就是包含一系列动作的Ruby脚本。
OS Provisioning

2.2.2 环境部署

各节点的基础操作系统安装完成后,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数据结构中,后者在部署过程中用来获取所有的配置信息。

  1. Puppet部署过程结束后,Astute将执行结果报告给Nailgun,当然用户可以随时通过Web界面或CLI来监控进度。
    Cluster Deployment

Fuel会在各个节点安装puppet-pull脚本。开发人员可以根据需要手动触发puppet的执行。
根据不同的环境配置或需求,Astute还会进行额外的动作:
* 生成和上传SSH key(应该是用于Fuel到各节点的免密码登录);
* 网络检查时运行net_verify.py脚本;
* 部署完成后上传CirrOS镜像到Glance(就是TestVM);
* 当有新节点部署后,更新其他所有节点的/etc/hosts文件;
* 当Ceph节点部署后,更新RadosGW map。
* 在删除节点或整个环境的时候使用MCollective agents来擦除相关节点的boot sector并重启,从而该节点又可以从新通过网卡启动并灌入bootstrap镜像以便用于OpenStack的部署。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/get_set/article/details/52526234
文章标签: openstack
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭