简介
Puppet是开源的基于Ruby的系统配置管理工具,puppet是一个C/S结构, 当然,这里的C可以有很多,因此,也可以说是一个星型结构. 所有的puppet客户端同一个服务器端的puppet通讯. 每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置服务器. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息.
工作流程
(1)客户端puppetd调用facter,facter探测出主机的一些变量,例如主机名,内存大小,ip地址等。pupppetd 把这些信息通过ssl连接发送到服务器端;
(2)服务器端的puppetmaster 检测客户端的主机名,然后找到manifest里面对应的node配置, 并对该部分内容进行解析,facter送过来的信息可以作为变量处理,node牵涉到的代码才解析,其他没牵涉的代码不解析。解析分为几个阶段,语法检查,如果语法错误就报错。如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”,然后把伪代码发给客户端;
(3)客户端接收到“伪代码”,并且执行,客户端把执行结果发送给服务器;
(4)服务器端把客户端的执行结果写入日志。
准备
Master |
Agent |
|
系统 |
Centos 6.6 |
Centos 6.6 |
ip(自设) |
192.168.2.40 |
192.168.2.42 |
主机名(自设) |
master.kisspuppet.com |
agent.kisspuppt.com |
安装
Puppet 不在 CentOS 的基本源中,需要加入 PuppetLabs 提供的官方源:
wget http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm yum install puppetlabs-release-6-1.noarch.rpm yum update
Master端
yum install -y ruby facter puppet-server # 启动 service puppet start service puppetmaster start # 设置开机自启动 chkconfig puppet on chkconfig puppetmaster on
Agent端
yum install -y ruby facter puppet 启动 service puppet start 设置开机自启动 chkconfig puppet on 配置 vim /etc/puppet/puppet.conf 添加下面一行 server=master.kisspuppet.com 重启puppet service puppet restart
Agent申请证书
Master自动签发证书设置
设置master自动签发所有的证书,我们只需要在/etc/puppet目录下创建 autosign.conf文件。(不需要修改 /etc/puppet/puppet.conf文件,因为我默认的autosign.conf 文件的位置没有修改)
[ root @ master ~ ] # cat > / etc / puppet / autosign . conf < < EOF > * . redking . com > EOF [ root @ master ~ ] # service puppetmaster restart Stopping puppetmaster: [ OK ] Starting puppetmaster: [ OK ] [ root @ master ~ ] #
这样就会对所有来自fisteam2.com的机器的请求,都自动签名。Agent需要向服务器端发出请求, 让服务器对客户端进行管理. 这其实是一个证书签发的过程. 第一次运行 puppet 客户端的时候会生成一个 SSL 证书并指定发给 Puppet 服务端, 服务器端如果同意管理客户端,就会对这个证书进行签发,可以用这个命令来签发证书,由于我们已经在客户端设置了server地址,因此不需要跟服务端地址
Agent向Master请求认证
输入下列命令就可以申请证书了
[ root @ agent1 ~ ] # puppet agent --test
由于我配置的自动签发证书,所以直接就签发了,在服务端执行下列命令进行查看是否认证成功。
[ root @ master ~ ] # puppet cert list --all
测试
现在可以在服务端写个小例子来测试一下。这个例子作用很简单,用来在客户端的 /tmp 目录下新建一个 helloworld.txt 文件,内容为 hello, world. 在Master端编写代码:
# vi /etc/puppet/manifests/site.pp node default { file { "/tmp/helloworld.txt": content => "hello, world"; } }
在Agent端上执行 puppet,运行成功后会在 /tmp 看到新生成的 helloworld.txt:
$ puppet agent --test --server=master.vpsee.com warning: peer certificate won't be verified in this SSL session info: Caching certificate for client.vpsee.com info: Caching certificate_revocation_list for ca info: Caching catalog for client.vpsee.com info: Applying configuration version '1330668451' notice: /Stage[main]//Node[default]/File[/tmp/helloworld.txt]/ensure: defined content as '{md5}e4d7f1b4ed2e42d15898f4b27b019da4' info: Creating state file /home/vpsee/.puppet/var/state/state.yaml notice: Finished catalog run in 0.03 seconds
查看Agent端
$ cat /tmp/helloworld.txt hello, world
这样就说明puppet能够正常运行。