简介
puppet类似于ansible,但ansible是轻量化的自动化运维工具,管理20台左右的机器还是可以的,但是当机器数量多的情况下,ansible就应付不过来了,需要更高级的自动化运维工具puppet、saltstack等,不过puppet是由ruby语言开发的,ruby语言已经江河日下,对于目前来说由python开发的saltstack当然会成为主流,不过这需要以后去挖掘它吧,目前多数企业还是使用puppet来进行自动化部署。
注意:agent严重依赖于主机名,因此最好要配置一台DNS服务器。这里就简单的使用hosts文件来解析主机名吧。
agent与master交互流程
注:这是网上一位朋友的图片,发现画的比较好,就引用一下。
Puppet通信agent和master都采用SSL安全加密协议,以保障所有数据传输的安全性。
一、先是agent和master的安全认证
- Puppet Master 在启动后会向自己签发证书和key。可以在/var/puppet/ssl或/var/lib/puppet/ssl目录下看到它们。
- 等待客户端请求证书签署请求。
- 客户端启动服务,将自己的主机名和签署请求发送给master端,请求签署证书。如果Master一直不签发证书,客户端会每2分钟请求一次。
- master签署证书,根据证书名称就是agent的主机名。这样master和agent端都可以知道对方的证书公钥了。这样客户端就可以和master相互通信了
二、agent和master交互
- agent每隔30分钟把节点名与facts信息发送给master.因此如果在证书签署过后不会立即请求,重启agent服务即可。
- master通过site.pp中包含的node.pp判断agent要做什么,将所需要的class类信息编译后存入catalog并发送给agent。
- agent对catalog进行代码验证(检测语法及错误)并执行,执行信息、结果写入日志
- agent完成执行,系统达到预期状态,把结果及执行数据返回给master
实验
实验描述
我们来配置一个最简单的agent/master,来让agent安装redis,并同步时间。
实验环境
两台主机都安装centos7.3操作系统