学习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
";
         }
}
意思:有一个默认节点(每一个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
";
        }
}
# 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)。

原文地址:https://www.cnblogs.com/wuhg/p/10002227.html