一、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服务。


二、案例

环境拓扑:



puppet部署与与应用

实施步骤:

搭建puppetmaster

搭建puppetclient

配置测试节点

客户端主动拉取

服务器推送

 

1.搭建ntp时间服务器

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

puppet部署与与应用

安装ntp


puppet部署与与应用

添加以下两行:

puppet部署与与应用

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


puppet部署与与应用

开启ntpd服务


puppet部署与与应用

开启防火墙例外

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


2.搭建puppetmaster

1)规划服务器主机名

puppet部署与与应用

puppet部署与与应用

puppet部署与与应用

修改主机名


puppet部署与与应用

puppet部署与与应用

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


2)服务器时间同步

puppet部署与与应用

puppet部署与与应用


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

puppet部署与与应用

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


puppet部署与与应用

检查ruby版本


4)facterpuppet安装

puppet部署与与应用


1)安装facter

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

puppet部署与与应用

解压源码包


puppet部署与与应用

编译安装源码包


2)安装puppet

puppet部署与与应用

解压源码包


puppet部署与与应用

编译安装源码包


puppet部署与与应用

复制配置文件


puppet部署与与应用

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


puppet部署与与应用

创建puppet主目录

manifests:存储节点信息

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

 

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

puppet部署与与应用

puppet部署与与应用

修改主配置文件

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

 

puppet部署与与应用

启动puppet主程序


puppet部署与与应用

puppetmaster所监听的端口为8140


puppet部署与与应用

配置防火墙,添加例外。

 

3.搭建puppetclient

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

puppet部署与与应用

puppet部署与与应用

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

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


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

修改配置文件

puppet部署与与应用

puppet部署与与应用

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


申请与注册(以client1为例)

client1

puppet部署与与应用

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


master

puppet部署与与应用

查看申请注册的客户端


puppet部署与与应用

puppet部署与与应用

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


puppet部署与与应用

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

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


4.配置实例

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

1)配置一个测试节点

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

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

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

puppet部署与与应用

puppet部署与与应用

puppet部署与与应用

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

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

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

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


puppet部署与与应用

修改权限


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

puppet部署与与应用

puppet部署与与应用

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


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

puppet部署与与应用

puppet部署与与应用

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

puppet部署与与应用

puppet部署与与应用

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

puppet部署与与应用

puppet部署与与应用


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

puppet部署与与应用

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


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

puppet部署与与应用

puppet部署与与应用


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

puppet部署与与应用

puppet部署与与应用


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

puppet部署与与应用

puppet部署与与应用


(10)重新启动puppet

puppet部署与与应用

 

2)客户端主动拉取

Client

puppet部署与与应用

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

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


puppet部署与与应用

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


3)服务器推送同步

Client

(1)修改配置文件

puppet部署与与应用

puppet部署与与应用

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


puppet部署与与应用

puppet部署与与应用

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

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

 

2)启动puppet客户端

puppet部署与与应用

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

 

(3)服务器推送

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

puppet部署与与应用

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

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


(4)校验结果

puppet部署与与应用

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