学习Puppet(一)
puppet的入门
1.简介
puppet是一种采用C/S星状结构的linux、Unix平台的集中配置管理系统。
puppet拥有自己的语言,可管理配置文件、用户、cron任务、软件包、系统服务等。
puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源的依赖关系。
2.工作原理
puppet是一个或者多个maste,众多client,所有的客户端都定期(默认为30分钟)使用facter工具把客户端的基本配置信息,通过https的xmlrpc协议发送给服务器端,服务器端通过分析客户端主机名,找到该主机的配置代码,然后编译配置代码,把编译好的配置代码发回客户端,客户端执行代码完成配置。并且把代码执行情况反馈给puppet服务器端。
注释:xmlrpc是使用http协议作为传输协议的rpc机制,使用xml文本的方式传输命令和数据。
3、puppet的工作流程
1) 客户端puppetd调用facter,facter探测出主机的一些变量,例如主机名、内存大小、IP地址等。puppetd把这些信息通过ssl连接发送到服务器端;
2) 服务器端的puppetmaster检测客户端的主机名,然后找到manifest里面对应的node配置,并对该部分内容进行解析,facter送来的信息可以作为变量处理,node牵涉到的代码才能解析,其他没有涉及的代码不解析。解析分为几个阶段,语法检查,如果语法错误就报错。如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”,然后把伪代码发给客户端;
3) 客户端接收到“伪代码”,并且执行,客户端把执行结果发送给服务器;
4) 服务器把客户端的执行结果写入日志。
puppet工作过程中有两点值得注意:
第一, 为了保证安全,client和master之间是基于ssl和证书的,只有经过master证书认证的client可以与master通信;
第二, puppet会让系统保持在你所期望的某种状态并一直维持下去,如检测某个文件并保证其一直存在,保证ssh服务始终开启,如果文件被删除了或者ssh服务被关闭了,puppet下次执行时(默认30分钟),会重新创建该文件或者启动ssl服务。
4.安装部署
1)环境准备(master和agent)
# etc/init.d/iptables stop 关闭iptables # /usr/sbin/ntpdate pool.ntp.org 时间同步,这块很重要 # setforce 0 闭安全策略
2)修改主机名和host解析
echo "10.0.0.60 master.test.com">>/etc/hosts echo "10.0.0.61 agent.test.com">>/etc/hosts
3)安装facter和puppet
1、安装ruby环境 # yum install ruby –y 2、建立puppet组和用户 # groupadd puppet # useradd -g puppet -s /bin/false -M puppet 3、下载并安装软件包 # wget http://downloads.puppetlabs.com/facter/facter-1.6.5.tar.gz # wget http://downloads.puppetlabs.com/puppet/puppet-2.6.13.tar.gz # tar xf facter-1.6.5.tar.gz # cd facter-1.6.5 # ruby install.rb # facter 检查,通常会收集主机的信息参数 # tar xf puppet-2.6.13.tar.gz # cd puppet-2.6.13 # ruby install.rb
# cp conf/redhat/* /etc/puppet/
# cp conf/auth.conf /etc/puppet/
master端执行:
# mkdir /etc/puppet/manifests 创建配置文件目录 # cp /etc/puppet/server.init /etc/init.d/puppetmaster 拷贝启动文件到/etc/init.d下面 # chmod 755 /etc/init.d/puppetmaster 给权限 # /etc/init.d/puppetmaster start 启动服务 # lsof -i:8140 查看端口是否起来
授权(三步:请求-查询-授权):
1、agent端执行:目的向master请求证书 # puppetd --test --server master.test.com 向master请求证书 2、master端执行 # puppetca -l 查看谁在请求证书 # puppetca -s agetn.test.com 有查询结果再授权 # puppetca -a 给所有的请求都授权 #ll /var/lib/puppet/ssl/ca/signed/* 此目录下多了agent.test.com 3、agent端执行 # puppetd --test --server master.test.com 4、若出错,删除以下文件重新执行以上三步: # rm -rf /var/lib/puppet/ssl/ 删除agent端的ssl # rm -rf /var/lib/puppet/ssl/ca/signed/agent.test.com 删除master端的
4)资源
常用的资源主要有以下几个:
file: 文件管理
package: 软件包管理
service: 系统服务管理
cron: 配置定期任务
exec: 运行shell命令
5、举例说明其实际应用
5.1 文件配置
master端:服务器端保存着所有对客户端服务器的配置代码,在puppet里面叫做manifests,客户端下载manifest之后,可以根据manifest对服务器进行配置,例如软件包管理,用户管理和文件管理等等。
# cd /etc/puppet/manifests/ # cat site.pp 此文件在配置文件server.sysconfig中有定义 node default{ file {"/tmp/test.txt": 首行用冒号‘:’,之后的多行用逗号或分号分隔,最后一行可以没有 content=>"hello world\n"; } } 意思:有一个默认节点(每一个agent叫做一个节点,在这个节点的/tmp下创建一个文件叫test.txt,里面的内容为hello world). agent端去验证 # puppetd --test --server master.test.com 所有在master端配置以后,是在agent端来执行 # cat /tmp/test.txt
再写一个:往/tmp 目录发送一个脚本
# cat site.pp node default{ file { "/tmp/clearlog.sh": content=>"find /log/ -type f -size +10KB |xargs rm -f\n"; } }
# puppetd --test --server master.test.com 此句可以写成脚本文件,注意/var/lib/puppet/state/lock
# cat /tmp/test.txt
5.2 创建文件并改变用户和授权
# cat site.pp node default{ file {"/tmp/test.txt": owner => "root", 属主 group => "puppet", 属组 mode => "0777", 权限 content => "test" 文件内容 } } agent端验证 # puppetd --test --server master.test.com ll /tmp/test.txt 权限和属组已改变 # cat /tmp/test.txt 文本内容已改变 意思:当agent端执行的时,会到agent的/tmp下,创建文件test.txt并设置改文件所属用户为root,所属组为puppet,然后权限设置为 777
5.3 管理用户和组
group {“test”: gid=>999, ensure=>present, present表示创建,absent表示删除 } user {“test”: 管理用户 name=>”test”, uid=>999, gid=>999, managehome=>true, 创建家目录 groups=>[‘puppet’,’root’], 附加组 shell=>”/bin/bash”, ensure=>present, }
5.4 管理crontab任务
# cat site.pp cron { "ntp time": command => "/usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1", minute => '*/10', hour => ['2-4'], monthday => [2,4], ensure => present, environment => "PATH=/bin:/usr/bin:/usr/sbin" }
agent端来验证
# puppetd --test --server master.test.com
# crontab -l
5.5 同步master端/etc/puppet/system_conf/script下的文件到agent
a、修改master配置文件 # vim /etc/puppet/fileserver.conf [ system_conf ] path /etc/puppet/system_conf/ alow * b、重启master # /etc/init.d/puppetmaster restart c、把需要同步的文件放到master 的/etc/puppet/system_conf/下 # mkdir /etc/puppet/system_conf # cp /etc/resolv.conf /etc/puppet/system_conf/ # echo "#test" >>/etc/puppet/system_conf/resolv.conf d、修改master端 site.pp # vim /etc/puppet/manifests/site.pp file { “/etc/resolv.conf”: mode=>644, 系统文件一定注意文件权限 source => “puppet://master.test.com/system_conf/resolv.conf” } 可以配置: 系统文件 hosts , resolv.conf ,i18n ,yum配置文件 脚本文件 /script/service_all_clear.sh
5.6 根据业务配置不同的机器
# vim /etc/puppet/manifests/site.pp node default{ 默认客户端 file {"/tmp/test.txt": owner => "root", group => "puppet", mode => "0777", content => "test" } node ‘agent.test.com’ { 仅应用于agent客户端,可以用正则表达式 file {“/etc/resolv.conf”: mode=>664, source=>”puppet://master.test.com/system_conf/resolv.conf”, } }
6、重要配置文件
puppet.conf(主配置文件)、server.init(服务端启动脚本)、client.init(客户端启动脚本)、fileserver.conf(文件服务器)、server.sysconfig(服务端环境变量)、client.sysconfig(客户端环境变量)
master端启动脚本中涉及到文件/etc/sysconfig/puppetmaster,可将配置文件/etc/puppet/server.sysconfig复制为/etc/sysconfig/puppetmaster;
也可更改启动脚本(:%s#/etc/sysconfig/puppetmaster#/etc/puppet/server.sysconfig#g)。