Puppet
1. Puppet介绍
1.1. Puppet工作流程
2. 环境配置
2.1. 注意事项
2.2. 基本配置
2.3. epel的yum源配置
3. 管理端节点配置
3.2.1. 开启8140端口
3.2.2. 设置puppetmaster开机自启
3.1. 以yum方式安装puppet-server
3.2. Master配置
4. 客户端节点配置
4.1. 以yum包方式安装puppet
4.2. 设置puppet服务开机自启
4.3. 客户端连接测试
4.4. 证书申请
4.5. 重新生成证书
4.6. 配置客户端自动同步
5. 客户端与管理端常用命令介绍
5.1. puppetrun的使用
5.2. 客户端启动方式
5.3. 服务端命令
5.4. 查看配置项
6. Puppet资源管理
7. 参考资料
1.Puppet客户端请求节点配置Puppet master进行SSL认证 2.将信息日志写入cactlog 3.Puppet解析器解释代码 (包括错误检查以及语法检查),并写入日志 4.事务处理(例如是否有权限,是否要同步文件,是否有collection资源) 5.客户端发送日志 6.Ssl认证授权结束,整个流程结束
安装过程中需要注意以下几点:
1. 管理端与客户端的时间要同步 2. 各主机名使用dns解析最好,若无使用hosts文件设置指定也行
在Master端与Node端需要满足的条件:
操作系统及IP地址
os: rhel5u8 32bit server: 192.168.18.87 client: 192.168.18.187
/etc/hosts文件
[[email protected] ~]# cat /etc/hosts 192.168.18.87 puppet.clear.com puppet 192.168.18.187 web1.clear.com web1 [[email protected] ~]# cat /etc/hosts 192.168.18.87 puppet.clear.com puppet 192.168.18.187 web1.clear.com web1
/etc/sysconfig/network文件
[[email protected] ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=puppet.clear.com [[email protected] ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=web1.clear.com
下载epel的rpm包,在管理端做如下操作。完成后在客户端也做同样的操作,这里略过。
[root@puppet ~]# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm [root@puppet ~]# rpm -ivh epel-release-5-4.noarch.rpm [root@puppet ~]# yum -y install ruby ruby-rdoc
配置好epel源之后,接下来就可以使用yum来方便地安装软件了,管理端需要安装的包如下:
# yum -y install puppet puppent-server facter
# iptables -A INPUT -p tcp -m state --state NEW --dport 8140 -j ACCEPT
在客户端上只需要安装puppet包即可,操作如下:
[root@web1 ~]# yum -y install puppet
[root@web1 ~]# service puppet start[root@web1 ~]# chkconfig �Clevel 345 puppet on
接下来测试,操作如下:
[root@web1 ~]# puppetd --test --server puppet.clear.com Exiting; no certificate found and waitforcert is disabled info: Caching catalog for web1.clear.com info: Applying configuration version '1395971071' notice: Finished catalog run in 0.03 seconds 这里提示认证未找到,因为这是第一次使用,管理端未给客户端签名而已。
这时,到管理端来,查看有没有需要签名的客户端,
[root@puppet ~]# puppetca --list "web1.clear.com" (23:99:E1:61:ED:87:F0:19:33:D3:57:54:E1:31:B5:9D)
接下来我们为web1来签名认证,
[root@puppet ~]# puppetca -s web1.clear.com # 为单个节点进行认证 notice: Signed certificate request for web1.clear.com notice: Removing file Puppet::SSL::CertificateRequest web1.clear.com at '/var/lib/puppet/ssl/ca/requests/web1.clear.com.pem' 我们可以再次的查看有没有需要签名的客户端, [root@puppet ~]# puppetca --list # 此时已经没有输出了 如果有多台客户端来申请签名认证,可以使用下面命令来完成所有认证, [root@puppet ~]# puppetca -s -a
puppet客户端与服务器是通过SSL隧道通信的,客户端安装完成后,需要向服务器端申请证书,
首次连接服务器端会发起证书申请,在客户端执行如下命令
[root@web1 ~]# puppet agent --server puppet.clear.com
在服务器端可以用puppet cert �Clist命令查看到申请证书的客户端主机名
puppet cert -s web1.clear.com为客户端颁发证书
验证puppet配置
在服务端写个简单的例子测试一下,用来在客户端的/tmp目录下创建一个 testfile文件
很多时候由于更换主机名,我们需要重新配置认证。
首先在客户端删除/var/lib/puppet/ssl/文件夹,
[root@web1 ~]# rm -rf /var/lib/puppet/ssl/*
然后在服务器端删除客户端的证书,
[root@puppet ~]# puppetca --clean web1.clear.com
最后在客户端执行,
[root@web1 ~]# puppetd --test --server puppet.clear.com
即可重新生成证书。
在客户端安装完puppet并且认证后,我们可以看到效果,怎样让它自动与服务器同步呢?默认多少分钟跟服务器同步呢?皆可以修改配置文件来搞定。以下看操作,
配置puppet相关参数和同步时间
去掉配置文件里的4行注释,根据自己的环境修改,修改好后如下: [root@web1 ~]# cat /etc/sysconfig/puppet PUPPET_SERVER=puppet.clear.com # 服务器mater的host PUPPET_PORT=8140 # 访问服务器的8140端口 PUPPET_LOG=/var/log/puppet/puppet.log # 本地日志 PUPPET_EXTRA_OPTS=--waitforcert=500 [root@web1 ~]# service puppet restart
修改默认同步时间
客户端会半小时跟服务器同步一次,我们可以根据需要修改此值的大小。 [root@web1 ~]# vim /etc/puppet/puppet.conf runinterval = 60 # 代表60秒跟服务器同步一次 [root@web1 ~]# service puppet restart
puppetrun用于连接客户端,强制运行本地配置文件,在默认安装puppet后puppetrun是不能使用,需要配置,如下:
客户端:
/etc/puppet/puppet.conf下添加: [agent] listen = true /etc/puppet/auth.conf在path /字样上面添加 path /run method save allow * path / auth any /etc/puppet/namespaceauth.conf下 [puppetrunner] allow *
然后重启客户端,
[root@web1 ~]# service puppet restart
当我们配置完毕puppet相关信息时,我们需要更近一步来部署puppet真正应用,puppet常用资源主要有以下几个,
file: 主要负责管理文件 package: 软件包的安装管理 service: 系统服务的管理 cron: 配置自动任务计划 exec: 远程执行命令
File资源
file { "/tmp/test.txt": content => "hello\n"; } 意思是在/tmp新建一个test.txt文件,文件内容为hello。
Package
package { ["screen","ntp"]: ensure => installed; "pppoe": ensure => "absent"; 意思是yum install screen ntp服务,并且卸载pppoe安装包。 }
Service
service { "sshd": ensure => running; "nfs": ensure => stopped; } 意思是定义启动sshd服务,停止nfs服务。
Cron
cron { "ntpdate": command => "/usr/sbin/ntpdate pool.ntp.org", user => root, hour => 0, minute => 0, } 意思是在客户端写入一个计划任务:0 0 * * * /usr/sbin/ntpdate pool.ntp.org自动同步时间。
向客户端推送本地脚本
首先修改/etc/puppet/fileserver.conf文件,添加如下三行: [files] path /etc/puppet/files allow * 然后复制所需的脚本到/etc/puppet/files目录,没有则创建。 file { "/tmp/nginx_install.sh": source => "puppet://puppet.clear.com/files/nginx_install.sh", group => root, owner => root, mode => "755", } 意思是把/etc/puppet/files/nginx_install.sh这个脚本推送到客户端的/tmp下。
Exec远程执行脚本
如第五步,我们把nginx_install.sh推送过去后,这时候我们就可以执行如下: exec { "/tmp/nginx_install.sh": cwd => "/tmp", user => root, path => ["/usr/bin","/usr/sbin","/bin","/bin/sh"], }
执行命令
更新sysctl.conf file { "/etc/sysctl.conf": source => "puppet://puppet.clear.com/files/sysctl.conf", owner => "root"; group => "root", mode => 644, } exec { "sysctl refresh kernel config": path => ["/usr/bin","/usr/sbin","/bin","/sbin"], command => "/sbin/sysctl -p", subscribe => File["/etc/sysctl.conf"], refreshonly => true
1. http://wgkgood.blog.51cto.com/1192594/869694 2. puppetmanual.pdf
Date: 2012-12-03
Created: 2014-03-28 周五 15:30
Emacs 24.3.1 (Org mode 8.2.5c)
Validate