一、puppet简介
1.Puppet是一款自动化运维工具,属于C/S架构,客户端运行puppet client,服务端运行puppet master
2.puppet的工作流程

1)客户端调用facter(收集及检测分析客户端配置信息的工具),把这些信息发送到服务端
2)服务端通过facter分析检测客户端的主机名,然后找到项目主配置文件mamnifest里面对应的node配置,并对该部分进行解析,facter发送来的信息作为变量处理,node牵涉到的代码才进行解析,其他没牵涉到代码的不解析
3)解析分为几个阶段,首先检测语法,如果语法没错就继续解析,解析结果生成一个中间的伪代码,然后把伪代码发送给客户端
4)客户端收到伪代码并且执行,然后把执行结果反馈给服务端
5)服务端把客户端的执行结果写入日志

3.puppet工作过程中要注意以下两点

1)为了保证安全,client和master之间基于证书和ssl,只有经master证书认证的client才能与master通信
2)puppet会让系统保持某种状态并一直维持,如检测某个文件并一直保持它存在,保证ssh服务一直开启,若果文件被删除或ssh服务被关闭,puppet下次执行时(默认30分钟)会重新创建改文件或开启ssh服务

三、配置部署puppet

节点详情

自动化运维平台golang项目 自动化运维puppet_自动化运维平台golang项目

1.配置master端

1)因为要使用证书认证,所以要规划master和client主机名,修改hosts文件,并且时间必须同步,否则证书认证会报错

vim /etc/hosts
192.168.1.2 www.server.com
192.168.1.3	www.http1.com
192.168.1.4	www.http2.com

2)将修改的hosts文件复制到其他主机

scp /etc/hosts root@192.168.1.3:/etc/hosts

3)配置yum源

wget http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
rpm -Uvh puppetlabs-release-el-6.noarch.rpm
#这是centos6的yum源

4)安装puppet服务端

yum -y install puppet-server

5)启动puppet-server并设置开机启动

server puppet-server start
chkconfig puppet-server on
2.配置client端

1)配置yum源

wget http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
rpm -Uvh puppetlabs-release-el-6.noarch.rpm

2)安装puppet客户端

yum -y install puppet

3)修改client配置文件

vim /etc/puppet/puppet.conf
[main]
server = www.server.com		#添加puppet master的地址

4)启动puppet并设置开机启动

server puppet start
chkconfig puppet on
3.申请与注册证书

1)client端:

puppet agent --server=www.server.com --no-daemonize --verbose

自动化运维平台golang项目 自动化运维puppet_客户端_02


2)master端

查看申请注册的客户端

puppet cert --list

自动化运维平台golang项目 自动化运维puppet_客户端_03


对未注册的客户端进行注册

puppet cert sign --all

自动化运维平台golang项目 自动化运维puppet_客户端_04


在目录中查看已注册的客户端

自动化运维平台golang项目 自动化运维puppet_自动化运维_05


4)在客户端执行命令来检查

puppet agent -t

自动化运维平台golang项目 自动化运维puppet_自动化运维_06

三、配置实例

以ssh为例,将sshd的端口改为9922端口

1.客户端主动下拉

1)创建必要的目录

cd /etc/puppet
mkdir -p modules/ssh/{manifests,templates,files}
mkdir manifests/nodes
mkdir modules/ssh/files/ssh
chown -R puppet modules/ 	#修改权限
选项解释:
manifests:里面必须包含一个init.pp文件,这是该模块的入口文件,导入一个模块的时候,会从init.pp开始执行,可以把所有代码都写入init.pp文件
files:该模块的文件发布目录,puppet提供一个文件分发机制,类似rsync的模块
templates:包含erb模型文件,这个和file资源的template属性有关(很少用)

2)创建模块配置文件install.pp

vi /etc/puppet/modules/ssh/manifests/install.pp
class ssh::install{
package{ "openssh":
   ensure => present,
   	}
}
#该文件用来判断openssh是否安装

3)创建模块配置文件config.pp

vi /etc/puppet/modules/ssh/manifests/config.pp
		class ssh::config{		
   	 file { "/etc/ssh/sshd_config":  #配置文件模板
      	ensure => present,		#确认客户端中此文件存在
      	owner =>"root"		#文件所属用户
      	group =>"root"		#文件所属组
      	mode =>"0600"			#文件属性
      	source =>"puppet://$puppetserver/modules/ssh/ssh/sshd_config",
			#从服务端同步文件
      	require => Class["ssh::install"],	#调用install.pp确定ssh已安装
      	notify => Class["ssh::service"],	#如果config.pp发生变化,则通知server.pp
       	 }
  		}

4)创建模块配置文件service.pp

vi /etc/puppet/modules/ssh/manifests/service.pp
		class ssh::service {
       service {"sshd":
         ensure=>running,	#确认ssh运行
         hasstatus=>true,	#该服务支持status命令
         harestart=>true,	#该服务支持start命令
         enable=>true,		#服务器是否开机启动
         require=>Class["ssh::config"]		#确认config.pp调用
        }
		}

5)创建模块主配置文件init.pp

vi /etc/puppet/modules/ssh/manifests/init.pp
		class ssh{
       include ssh::install,ssh::config,ssh::service
		}

6)建立服务端ssh统一维护文件

cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
chown -R puppet /etc/puppet/modules/ssh/files/ssh/

7)创建测试节点配置文件

vim /etc/puppet/manifests/nodes/ssh.pp
		node 'www.http1.com'{
       include ssh
		}
		node 'www.http2.com'{
       include ssh
		}

8)将测试节点载入puppet,即修改site.pp

vim /etc/puppet/manifests/site.pp
		 import "nodes/ssh.pp"

9)修改维护端的sshd_config配置文件

vim /etc/puppet/modules/ssh/files/ssh/sshd_config 
		 Port 9922

10)重启puppet

11)客户端主动拉取

puppet agent -t

自动化运维平台golang项目 自动化运维puppet_Linux_07


12)检查客户端是否执行成功

自动化运维平台golang项目 自动化运维puppet_自动化运维平台golang项目_08

2.服务器推送同步

大规模部署时,采用服务端推送
client端
1)修改配置文件

vim /etc/puppet/puppet.conf
	listen = true  #最后一行添加

2)验证配置文件auth.conf定义了一些验证信息及访问权限

vim /etc/puppet/auth.conf
	allow *  #最后一行添加,允许任何服务端推送

3)启动puppet客户端

service puppet start

4)因为刚才在master端将ssh的端口改成了9922,现在将ssh的端口改回22,便于测试服务端的推送

vim /etc/ssh/sshd_config 
	port 22

master端
5)开始推送至服务端

puppet kick www.http2.com

自动化运维平台golang项目 自动化运维puppet_客户端_09