&"/>

puppet部署与与应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了puppet部署与与应用相关的知识,希望对你有一定的参考价值。

一、puppet工作原理

技术分享

    

        Puppetclient运行时,客户端主动拉取服务器配置;

        Puppetclient不运行时,客户端被动接受服务器推送。

1、工作流程

1)客户端puppet调用facterfacter是通过ssl加密收集及检测分析客户端配置信息的一个工具),facter探测出主机的一些变量,如主机名,内存大小,ip地址等。Puppet把这些信息通过ssl连接发送到服务器器端

2)服务器端的puppetmaster通过facter工具分析检测客户端的主机名,然后找到项目主配置文件mainfest里面对应的node配置,并对该部分内容进行解析。Facter发送过来的信息可以作为变量处理,node牵扯到的代码才解析,其他没牵涉的代码不解析,解析分为几个阶段,首先进行语法检查,如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”,然后把伪代码发送给客户端。

3)客户端接收到伪代码,并执行,客户端把执行的结果发送给服务器。

4)服务器把客户端的执行结果写入日志。

 

Puppet工作过程有以下两点值得注意:

1)为了保证安全,clientmaster之间是基于ssl和证书的,只有经master证书认证的client可以与master通信。

2)Puppet会让系统保持在人们所期望的某种状态并一直维持下去,例如:检测某个文件并保证其一直存在,保证ssh服务始终开启,如果文件被删除了或者ssh服务被关闭了,puppet下次执行时(默认30分钟),会重新创建该文件或者启动ssh服务。


二、案例

环境拓扑:



技术分享

实施步骤:

搭建puppetmaster

搭建puppetclient

配置测试节点

客户端主动拉取

服务器推送

 

1.搭建ntp时间服务器

由于facter使用SSL证书,依赖时间同步,所以需要搭建NTP服务器。

技术分享

安装ntp


技术分享

添加以下两行:

技术分享

作用是当/etc/ntp.conf中定义的server都不可用时,将使用local时间作为NTP服务提供给NTP客户端。


技术分享

开启ntpd服务


技术分享

开启防火墙例外

ntpd服务使用的是udp协议,监听123端口。


2.搭建puppetmaster

1)规划服务器主机名

技术分享

技术分享

技术分享

修改主机名


技术分享

技术分享

修改hosts文件,添加记录(没有DNS服务器)


2)服务器时间同步

技术分享

技术分享


3)安装rubypuppet就是基于ruby语言开发的,所以需要安装ruby

技术分享

需要注意:先安装compat-readline5,再安装ruby


技术分享

检查ruby版本


4)facterpuppet安装

技术分享


1)安装facter

通过facter工具分析检测客户端传输过来的信息

技术分享

解压源码包


技术分享

编译安装源码包


2)安装puppet

技术分享

解压源码包


技术分享

编译安装源码包


技术分享

复制配置文件


技术分享

给服务的脚本文件赋予执行权限


技术分享

创建puppet主目录

manifests:存储节点信息

modules:模块目录,存放客户端的应用配置。

 

2)puppet服务证书请求与签名

技术分享

技术分享

修改主配置文件

[main]标题下添加一行:配置服务器模块路径

 

技术分享

启动puppet主程序


技术分享

puppetmaster所监听的端口为8140


技术分享

配置防火墙,添加例外。

 

3.搭建puppetclient

1)搭建puppetclient的步骤与搭建puppetmaster的基本相同,同样需要规划主机名、添加host记录、同步时间、安装ruby、安装facter、安装puppet

技术分享

技术分享

安装完puppet后,需要复制配置文件,并且赋予脚本文件的执行权限。

注意:这里复制的服务脚本文件是client.init,重命名为puppetclient


2)puppet服务证书请求与签名

修改配置文件

技术分享

技术分享

修改/etc/puppet/puppet.conf,在[main]标题下添加一行:设置服务器的域名。


申请与注册(以client1为例)

client1

技术分享

此时,可以按ctrl+c结束,因为puppet一直在等待任务,但是已经从server查看到了申请信息。


master

技术分享

查看申请注册的客户端


技术分享

技术分享

将未注册的客户端进行注册


技术分享

通过目录/var/lib/puppet/ssl/ca/signed/可以查看到已经注册的客户端

此时,客户端已经完成了证书的请求与签名。


4.配置实例

批量修改客户端的sshd端口,将端口22修改为9922,并实现重启工作。

1)配置一个测试节点

■ 节点信息:/etc/puppet/manifests/nodes

■ 模块信息:/etc/puppet/modules

(1)创建需要的必要目录

技术分享

技术分享

技术分享

    创建ssh模块,模块目录为ssh,模块下面有三个文件:manifeststemplatesfiles

manifests:包含一个init.pp文件,这是该模块的初始(入口)文件,导入一个模块的时候会从init.pp开始执行。可以把所有的代码都写进init.pp里面,也可以分成多个pp文件,init再去包含其他文件,定义class类命名的时候必须是ssh,这样能实现调用。

files:是该模块的文件发布目录,puppet提供一个文件发布机制,类似于rsync的模块。

templates:包含erb模块文件、这个和file资源的templates属性有关(很少使用)。


技术分享

修改权限


(2)创建模块配置文件install.pp

技术分享

技术分享

以上信息确保客户端安装ssh软件


(3)创建模块配置文件config.pp

技术分享

技术分享

file{ "/etc/ssh/sshd_config":          //配置客户端需要同步的文件

  ensure => present,                   //确定客户端此文件存在

  owner => "root",                     //文件所属用户

  group => "root",                     //文件所属组

  mode => "0600",                      //文件权限

  source=> "puppet://$puppetserver/modules/ssh/ssh/sshd_config",

                                       //从服务器同步文件的路径

  require => Class["ssh::install"],    //调用ssh::install确定openssh已经安装

  notify => Class["ssh::service"],     //如果config.pp发生变化通知service.pp

  }

这个文件的内容主要是定义,发布的配置文件权限以及调用ssh::install检查client是否安装了ssh服务,以及调用ssh::service重新启动sshd服务。

 

4)创建模块配置文件service.pp

技术分享

技术分享

ensure =>running,//确定sshd运行

hasstatus=>true,//puppet该服务支持status命令,即类似service  sshd  status命令                

hasrestart=>true,//puppet该服务支持status命令,即类似service  sshd  restart命令   

enable=>true,//服务是否开机启动

require=>Class["ssh::config"]      //确认config.pp调用

 

(5)创建模块主配置文件init.pp

技术分享

技术分享


(6)建立服务器端ssh统一维护文件

技术分享

一般服务器和客户机的sshd_config文件默认一样,所以这里直接将服务器端/etc/ssh/sshd_config复制到模块默认路径。


(7)创建节点配置文件,将ssh加载进去。

技术分享

技术分享


(8)将测试节点载入puppet,即修改site.pp

技术分享

技术分享


(9)修改服务器维护的sshd_config配置文件

技术分享

技术分享


(10)重新启动puppet

技术分享

 

2)客户端主动拉取

Client

技术分享

在客户端输入上述命令,来主动拉取。

适用于小规模的自动化集群中


技术分享

检查客户端sshd服务端口号,改为了9922


3)服务器推送同步

Client

(1)修改配置文件

技术分享

技术分享

在最后一行添加,使puppet监听8139端口。


技术分享

技术分享

在最后一行添加,允许任何服务端推送。

auth.conf是验证配置文件,定义一些验证信息及访问权限

 

2)启动puppet客户端

技术分享

同样,防火墙要开启8139端口的例外。

 

(3)服务器推送

为了测试方便,这里又把ssh的端口改为了8822

技术分享

puppet kick 后面可以接客户端的主机名,可以使用puppet kick --help来查看帮助信息。

puppet kick --all:将同步推送到所有客户端


(4)校验结果

技术分享

在客户端,再次检查sshd服务的端口,发现变为了8822


本文出自 “网络技术” 博客,请务必保留此出处http://fjc365.blog.51cto.com/11891287/1893887

以上是关于puppet部署与与应用的主要内容,如果未能解决你的问题,请参考以下文章

puppet部署与应用

puppet部署与应用

puppet部署与应用

puppet部署与应用

自动化运维工具puppet的部署与应用

puppet 基础篇