自动化运维--Puppet

mac2026-09-02  10

一、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

最新回复(0)