一、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
节点详情
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
2)master端
查看申请注册的客户端
puppet cert --list
对未注册的客户端进行注册
puppet cert sign --all
在目录中查看已注册的客户端
4)在客户端执行命令来检查
puppet agent -t
三、配置实例
以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
12)检查客户端是否执行成功
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