puppet之原理及安装

puppet之原理及安装_第1张图片

puppet官方网站:https://puppet.com/
puppet中文wiki:http://puppet.wikidot.com/
puppet中文论坛:http://www.puppetfans.com/

一、puppet概述

Puppet是开源的基于Ruby的系统配置管理工具,基于C/S的部署架构。是一个为实现数据中心自动化管理而设计的配置管理软件,它使用跨平台语言规范,管理配置文件、用户、软件包、系统服务等。客户端默认每隔半小时会和服务器通信一次,确认是否有更新。当然也可以配置主动触发来强制客户端更新。这样就把日常的系统管理任务代码化了,代码化的好处是可以分享,保存,避免重复劳动,也可以快速恢复以及快速的大规模部署服务器。

扩展阅读:

Puppet Labs Documentation - https://docs.puppetlabs.com/
Puppet Forge - https://forge.puppetlabs.com/

二、puppet构架

puppet的服务器端保存着所有的对客户端服务器的配置代码,在puppet里面叫做manifest. 客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。Puppet架构如下:

puppet之原理及安装_第2张图片

三、工作模型

puppet之原理及安装_第3张图片
  • define:使用puppet语言来定义资源状态
  • 模拟:根据资源关系图,puppet模拟部署(无损运行c)测试代码
  • 强制:比对客户端主机状态和定义的资源状态是否一致,自动强制执行
  • report:通过puppet api将日志发送到第三方监控工具(dashboard,foreman)
puppet之原理及安装_第4张图片

四、工作原理

Puppet采用了非常简单的C/S架构,所有数据的交互都通过SSL进行,以保证安全

puppet之原理及安装_第5张图片
  • (1)客户端Puppetd向Master发起认证请求,或使用带签名的证书。

  • (2)Master告诉Client你是合法的。

  • (3)客户端Puppetd调用Facter,Facter探测出主机的一些变量,例如主机名、内存大小、IP地址等。Puppetd将这些信息通过SSL连接发送到服务器端。

  • (4)服务器端的Puppet Master检测客户端的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。Facter送过来的信息可以作为变量处 理,node牵涉到的代码才解析,其他没牵涉的代码不解析。解析分为几个阶段,首先是语法检查,如果语法错误就报错;如果语法没错,就继续解析,解析的结 果生成一个中间的“伪代码”(catelog),然后把伪代码发给客户端。

  • (5)客户端接收到“伪代码”,并且执行。

  • (6)客户端在执行时判断有没有File文件,如果有,则向fileserver发起请求。

  • (7)客户端判断有没有配置Report,如果已配置,则把执行结果发送给服务器。

  • (8)服务器端把客户端的执行结果写入日志,并发送给报告系统。

这就是puppet的工作流程,最重要的莫过于puppet-master来管理node的配置文件。

五、安装puppet

环境说明:

172.16.252.134 master.localdomain //Puppet Server

172.16.252.131 agent1.localdomain //Puppet Agent

这里的机器名称不要有下划线等特殊符合,否则后面会报“the scheme puppet does not accept registry part”这样的错误信息。

centos的官方软件库里面不包含puppet包,但是在epel项目里面有包含puppet包。epel 是一个对rhel软件仓库的扩展,把一些有用的,但是rhel库没包含的软件收集在一起做成的一个软件仓库。

1、安装Puppet Server

[root@centos7 ~]# hostnamectl set-hostname master.localdomain    //设置机器名称

[root@centos7 ~]# systemctl reboot    //重启

[root@master ~]#vim /etc/hosts
172.16.252.134  master.localdomain
172.16.252.131  agent1.localdomain

[root@master ~]#yum install puppet-server -y  //安装Puppet Server


打开配置文件添加以下内容:
[root@master ~]#vim /etc/puppet/puppet.conf
[master]
    certname=master.localdomain

[root@master ~]#systemctl start puppetmaster.service  //启动服务
[root@master ~]#systemctl enable puppetmaster.service  //设置开机自启


[root@master ~]#iptables -F  //关闭防火墙
[root@master ~]#setenforce 0  //关闭Selinux

2、安装Puppet Agent

[root@centos7 ~]# hostnamectl set-hostname agent.localdomain    //设置机器名称

[root@centos7 ~]# systemctl reboot    //重启

[root@agent1 ~]#vim /etc/hosts
172.16.252.134  master.localdomain


[root@agent1 ~]#yum install puppet -y  //安装Puppet Agent


[root@agent1 ~]#vim /etc/puppet/puppet.conf
[agent]
    certname = agent1.localdomain
    server = master.localdomain
    repot = true


[root@agent1 ~]#systemctl start puppet.service   //启动服务
[root@agent1 ~]#systemctl enable puppet.service  //设置开机自启

六、证书申请

Puppet客户端与服务器端是通过SSL隧道通信的,客户端安装完成后,需要向服务器端申请证书:
首次连接服务器端会发起证书申请,在客户端执行命令如下:
(1)客户端执行

[root@agent1 ~]#puppet agent --server=master.localdomain --no-daemonize --onetime --verbose --debug

如果返回以下信息说明证书请求成功了

Debug: Finishing transaction 22955040
Debug: Using cached certificate for ca
Debug: Using cached certificate for ca
Debug: Using cached certificate_request for agent1.localdomain
Debug: Using cached certificate for ca
Debug: Using cached certificate_request for agent1.localdomain
Debug: Using cached certificate for ca
Debug: Using cached certificate for ca

(2)服务器端查看证书请求
在puppet服务器端查看到申请证书的客户端的主机名

[root@master ~]#puppet cert list --all

注:前面有+号的说明已经授权签发了

(3)服务器端颁发证书

[root@master ~]#puppet cert --sign agent1.localdomain
Notice: Signed certificate request for agent1.localdomain
Notice: Removing file Puppet::SSL::CertificateRequest agent1.localdomain at '/var/lib/puppet/ssl/ca/requests/agent1.localdomain.pem'

查看是否颁发成功

[root@master ~]#puppet cert list -all

注意:
在证书申请过程中,如果有问题,可以删除证书重新申请,一般都能解决问题(删除Server和Agent的过期证书)。

Agent:
[root@agent1 ~]# rm -rf /var/lib/puppet     #删除缓存文件
[root@agent1 ~]# systemctl restart puppetagent.service //重启服务

Server:
[root@master ~]# puppet cert clean agent1.localdomain
[root@master ~]# systemctl restart puppetmaster.service

(4)验证puppet配置
在服务器端写个例子测试一下。这个例子作用很简单。用来在客户端/tmp目录下新建一个woyoo.txt文件,内容为:hello,puppet!在服务器端/etc/puppet/mainifests下编写代码:【服务器端不需要创建这个文件】

[root@master manifests]#vim site.pp
node default{
file {"/tmp/woyoo.txt":
content => "hello,puppet";          
}
}

在客户端上执行puppet,运行成功后会在/tmp看到新生成的woyoo.txt文件

[root@agent1 ~]#puppet agent --test --server=master.localdomain
Info: Retrieving pluginfacts
Info: Retrieving plugin
Error: NetworkManager is not running.
Info: Caching catalog for agent1.localdomain
Info: Applying configuration version '1506308907'
Notice: /Stage[main]/Main/Node[default]/File[/tmp/woyoo.txt]/ensure: defined content as '{md5}5b9e88dda7036e785544bc9fc9d60cd4'
Notice: Finished catalog run in 0.03 seconds

[root@agent1 ~]#cat /tmp/woyoo.txt
hello,puppet

示例

(1)文件同步
服务器端编写文件同步脚本

[root@master manifests]#vim site.pp

node default{
        file {"/tmp/woyoo.txt":
                content => "hello,puppet";
        }
}

node "agent1.localdomain"{
        host {"agent1.localdomain":
        ip => "172.16.252.131",
        target => "/data/ops/cut_nginx_logs.py",
        ensure => present;
        }
        }

注意:目录:/data/ops/ 要事先再客户端(agent)存在

客户端同步策略

[root@agent1 ~]#puppet agent --test --server=master.localdomain
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.localdomain
Info: Applying configuration version '1506309924'
Notice: /Stage[main]/Main/Node[agent1.localdomain]/Host[agent1.localdomain]/ensure: created
Notice: Finished catalog run in 0.08 seconds

[root@agent1 ~]#cd /data/ops/
[root@agent1 ops]#ls
cut_nginx_logs.py

你可能感兴趣的:(puppet之原理及安装)