分享

使用puppet部署openstack

desehawk 发表于 2015-3-18 12:59:29 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 2 31243
问题导读


1.Puppet是什么工具?
2.puppet工作原理是什么?
3.puppet目录结构包含哪些内容?





puppet简介
*        Puppet是一个IT基础设施自动化管理工具,帮助系统管理员管理基础设施整个生命周期的供应(provisioning),配置(configuration),联动(orchestration)及报告(reporting)。
*        基于puppet可以实现自动化重复任务,快速部署关键性应用以及在本地或者云端完成主动管理变更和快速部署扩展架构。
*        当然,对于管理员它是抽象的,只依赖于facter工具(可以检索出不同系统的基本信息)和ruby语言环境(主要以模版的形式来开发)。
*        Puppet能管理40多种资源,架构模式是master/agent管理与被管理的关系并非主从关系。

puppet工作原理
1.png


(1)客户端Puppetd向Master发起认证请求,或使用带签名的证书。
(2)Master告诉Client你是合法的。
(3)客户端Puppetd调用Facter,Facter探测出主机的一些变量,例如主机名、内存大小、IP地址等。Puppetd将这些信息通过SSL连接发送到服务器端。
(4)服务器端的PuppetMaster检测客户端的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。Facter送过来的信息可以作为变量处理,node牵涉到的代码才解析,其他没牵涉的代码不解析。解析分为几个阶段,首先是语法检查,如果语法错误就报错;如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”(catelog),然后把伪代码发给客户端。
(5)客户端接收到“伪代码”,并且执行。
(6)客户端在执行时判断有没有File文件,如果有,则向fileserver发起请求。
(7)客户端判断有没有配置Report,如果已配置,则把执行结果发送给服务器。
(8)服务器端把客户端的执行结果写入日志,并发送给报告系统。

认证过程
任何一台puppet客户端想要获取服务器的配置信息第一步必须先要认证完毕。具体认证过程如下:
(1)puppet客户端请求节点配置。
(2)puppetmaster进行SSL认证。
(3)将信息日志写入cactlog。
(4)puppet解析器解释代码(包括错误检查以及语法检查),并写入日志。
(5)客户端发送日志。
(6)ssl认证授权结束,整个流程结束。
puppet目录结构
  1. root@cloud-32:~# tree /etc/puppet/ --charset gbk -L 1
  2. /etc/puppet/
  3. |-- auth.conf
  4. |-- autosign.conf
  5. |-- etckeeper-commit-post
  6. |-- etckeeper-commit-pre
  7. |-- fileserver.conf
  8. |-- manifests
  9.    |-- site.pp
  10. |-- modules
  11. |-- namespaceauth.conf
  12. |-- puppet.conf
  13. |-- puppet-queue.conf
  14. |`-- templates
  15. 3 directories, 8 files
复制代码



puppet.conf主配置文件
fileserver.conf允许访问的文件控制
auth.conf访问权限配置
autosign.conf自动验证配置文件
   manifests文件存储目录(puppet会先读取该目录的.pp文件<site.pp>)
site.conf全局配置文件
   modules定义模块
   templates模块配置目录

应用背景:
目前puppet官方有根据openstack各种环境编辑好了一整套部署脚本,这一套也已经上传到社区(比如github)给一些相关人士进行维护并更新。我们只要获取那些脚本,在根据我们自己的需求来封装自己的一个类,这个类就是关于怎么调用那些人家已经完善得非常好的各种相关openstack组件模块。

操作系统:centos6.5
Openstack版本:havana icehousejuno
Puppet版本:2.7或以上(如果一些脚本需要的话可能要把版本更新到3.x以上的)
安装puppet
设置源:
安装:
Agent端:yuminstall puppet
Server端:yuminstall puppet-server
获取脚本:
puppet module install puppetlabs-openstack
下载git上面的脚本:
cd /etc/puppet/modules
git clonegit://github.com/stackforge/puppet-openstack.git openstack
cdopenstack
gem installlibrarian-puppet
librarian-puppet install--path ../
openstack模块
[root@puppet modules]# tree -L 1
.
├── 99cloud
├── apache
├── ceilometer
├──certmonger
.
.
.
├──vlan
├──vswitch
└──xinetd

50 directories, 0 files

在这50个左右的模块里面控制整个openstack流程安装部署的就在openstack这个模块里面,
在openstack这个模块里面主要是把各个openstack各个组件模块调用起来最后形成了可以灵活地运用各种参数去部署openstack的脚本。这是由于openstack有很多配置文件以及后面要更变配置,所有才有了如此之多的参数。当然,你可以根据自己的需要,比如一些组件你不安装或者一些配置是不需要的,然后自己组成一个模块之类的。

部署
在自己脚本完成后并测试没有什么语法错误就可以开始部署安装,当然在这之前肯定要经过大量的测试来完善自己的脚本:
There are two kinds of use:
---1
         stand-alone mode: directcalling scripts
         allinone     #sudo puppet apply -e "class {99cloud::allinone: }"
         controller   #sudo puppet apply -e "class {99cloud::controller: }"
         only compute #sudo puppetapply -e "class { 99cloud::compute: }"
---2
         server-agent mode:
         a: pick out one end as aservice
         b: edit/etc/puppet/manifests/site.pp (If not,please create)
         c: depending on thefqdn(hostname+domain) to deploy different nodes
For your controller node, you need to assign your node the controllerrole. For example:
```
node 'control.localdomain' {
         include 99cloud::controller
}
```
allinone:
include 99cloud::allinone
```
compute:
         include 99cloud::compute
```
d: on your node exec:
#puppet agent -t --server 'service of fqdn'

也就是说主要有2种部署方式,一种是单机模式,另一种是C/S模式。如果你的服务器有上几十台以上就需要用到C/S模式,否则尽量用单机模式来部署。这样既节省时间,又方便控制各个服务器。

从裸机到openstack平台

简而言之,就是先对一台裸机进行PXE(安装系统)之后再利用puppet把openstack平台架起来

2.png
3.png







已有(2)人评论

跳转到指定楼层
496487028 发表于 2015-4-14 14:07:13
版主你好,openstack社区上好像说J版本需要5.X的PUPPET吧,使用3.X版本安装J版本可以吗?
回复

使用道具 举报

desehawk 发表于 2015-4-14 15:42:33
496487028 发表于 2015-4-14 14:07
版主你好,openstack社区上好像说J版本需要5.X的PUPPET吧,使用3.X版本安装J版本可以吗?

最好用最新版本,否则可能会遇到更多的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条