Puppet部署于应用node
一、工做流程linux
1)客户端puppet调用facter(facter是经过ssl加密收集及检测分析客户端配置信息的一个工具),facter探测出主机的一些变量,如主机名,内存大小,ip地址等。Puppet把这些信息经过ssl链接发送到服务器器端vim
2)服务器端的puppetmaster经过facter工具分析检测客户端的主机名,而后找到项目主配置文件mainfest里面对应的node配置,并对该部份内容进行解析。Facter发送过来的信息能够做为变量处理,node牵扯到的代码才解析,其余没牵涉的代码不解析,解析分为几个阶段,首先进行语法检查,若是语法没错,就继续解析,解析的结果生成一个中间的“伪代码”,而后把伪代码发送给客户端。centos
3)客户端接收到伪代码,并执行,客户端把执行的结果发送给服务器。安全
4)服务器把客户端的执行结果写入日志。ruby
Puppet工做过程有如下两点值得注意:bash
1)为了保证安全,client和master之间是基于ssl和证书的,只有经master证书认证的client能够与master通讯。服务器
2)Puppet会让系统保持在人们所指望的某种状态并一直维持下去,例如:检测某个文件并保证其一直存在,保证ssh服务始终开启,若是文件被删除了或者ssh服务被关闭了,puppet下次执行时(默认30分钟),会从新建立该文件或者启动ssh服务。ssh
实验环境:tcp
实验目标:
1.经过puppetmaster管理clinet端的ssh服务
2.客户端能够主动拉取
3.master能够主动推送
1、搭建ntp server(已经安装)
server 127.127.1.0
fudge 127.127.1.0 stratum 8
[root@centos4 ~]# service ntpd start
[root@centos4 ~]# chkconfig ntpd on
2、搭建puppetmaster
1.规划服务器主机名
[root@centos1 ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master.test.com
[root@centos1 ~]# hostname master.test.com
[root@centos1 ~]# bash
2.添加主机名解析;在互联网中能够搭建DNS服务
[root@centos1 ~]# vim /etc/hosts
192.168.1.1 master.test.com
192.168.1.2 client1.test.com
192.168.1.3 client2.test.com
2.服务器时间同步
[root@master ~]#yum -y install ntp( 默认已经安装)
[root@master ~]# ntpdate 192.168.1.4
3.安装ruby,先安装compat-readline5(系统盘中),也能够一并安装
因为puppet是采用ruby语言开发,因此不管是源码仍是RPM方式安装puppet,咱们都必需要先安装ruby语言环境
[root@master ~]# rpm -ivh /mnt/Packages/compat-readline5-5.2-17.1.el6.x86_64.rpm
[root@master ~]# rpm -ivh /mnt/ruby-*.rpm
4.检查ruby版本
[root@master ~]# ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
5.安装facter安装
[root@master ~]# useradd -s /sbin/nologin puppet
安装facter源码包
[root@master ~]# tar zxf /mnt/facter-1.7.1.tar.gz -C /usr/src
[root@master ~]# cd /usr/src/facter-1.7.1/
[root@master facter-1.7.1]# ruby install.rb
6.安装puppet源码包
①安装
[root@master puppet-2.7.21]# tar zxf /mnt/puppet-2.7.21.tar.gz -C /usr/src
[root@master puppet-2.7.21]# cd /usr/src/puppet-2.7.21/
[root@master puppet-2.7.21]# ruby install.rb
②复制配置文件
[root@master puppet-2.7.21]# cp conf/redhat/fileserver.conf /etc/puppet/
[root@master puppet-2.7.21]# cp conf/redhat/puppet.conf /etc/puppet/
[root@master puppet-2.7.21]# cp conf/redhat/server.init /etc/init.d/puppetmaster
③修改文件属性
[root@master puppet-2.7.21]# chmod +x /etc/init.d/puppetmaster
④建立puppet主目录
[root@master puppet-2.7.21]# mkdir /etc/puppet/manifests //存放配置文件
[root@master puppet-2.7.21]# mkdir /etc/puppet/modules //存放模块配置
7.puppet服务证书请求与签名
master端配置
①关闭防火墙
#service iptables stop //以前已经关闭
②修改配置文件。在【main】标题下添加如下一行:配置服务器模块路径
[root@master ~]# vim /etc/puppet/puppet.conf
modulepath = /etc/puppet/modules:/usr/share/puppet/modules
③启动puppet主程序
[root@master ~]# /etc/init.d/puppetmaster start
Starting puppetmaster: [ OK ]
④查看puppet监听端口
[root@master ~]# netstat -anpt|grep 8140
tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN 2123/ruby
2、搭建puppetclient1
1.规划服务器主机名
[root@centos1 ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=client1.test.com
[root@centos1 ~]# hostname client1.test.com
[root@centos1 ~]# bash
2.添加主机名解析
[root@centos1 ~]# vim /etc/hosts
192.168.1.1 master.test.com
192.168.1.2 client1.test.com
192.168.1.3 client2.test.com
3.确保经过域名ping通puppetmaster
[root@client1 ~]# ping master.test.com
PING master.test.com (192.168.1.1) 56(84) bytes of data.
64 bytes from master.test.com (192.168.1.1): icmp_seq=1 ttl=64 time=7.29 ms
3.服务器时间同步
[root@client1 ~]# ntpdate 192.168.1.4
7 May 16:24:22 ntpdate[2532]: adjust time server 192.168.1.4 offset -0.144460 sec
4. 安装ruby,先安装compat-readline5(系统盘中),也能够一并安装
[root@master ~]# rpm -ivh /mnt/Packages/compat-readline5-5.2-17.1.el6.x86_64.rpm
[root@master ~]# rpm -ivh /mnt/ruby-*.rpm
5检查ruby版本
[root@master ~]# ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
6.安装facter
[root@client1 facter-1.7.1]# useradd -s /sbin/nologin puppet
[root@client1 ~]# tar zxf /mnt/facter-1.7.1.tar.gz -C /usr/src
[root@client1 ~]# cd /usr/src/facter-1.7.1/
[root@client1 facter-1.7.1]# ruby install.rb
7.安装puppet
[root@client1 facter-1.7.1]# tar zxf /mnt/puppet-2.7.21.tar.gz -C /usr/src
[root@client1 facter-1.7.1]# cd /usr/src//puppet-2.7.21/
[root@client1 puppet-2.7.21]# ruby install.rb
8.复制配置文件
[root@client1 puppet-2.7.21]# cp conf/redhat/puppet.conf /etc/puppet
[root@client1 puppet-2.7.21]# cp conf/redhat/client.init /etc/init.d/puppetclient
9.修改文件属性
[root@client1 puppet-2.7.21]# chmod +x /etc/init.d/puppetclient
10.puppet服务证书与签名
①关闭防火墙
[root@client1 puppet-2.7.21]# service iptables stop //以前已经关闭
②修改client配置文件(两台client配置彻底同样)
#vim /etc/puppet/puppet.conf
[main]
# The Puppet log directory.
# The default value is '$vardir/log'.
logdir = /var/log/puppet
# Where Puppet PID files are kept.
# The default value is '$vardir/run'.
rundir = /var/run/puppet
server = master.test.com
3、搭建puppetclient2
1.规划服务器主机名
[root@centos1 ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=client2.test.com
[root@centos1 ~]# hostname client2.test.com
[root@centos1 ~]# bash
2.添加主机名解析
[root@centos1 ~]# vim /etc/hosts
192.168.1.1 master.test.com
192.168.1.2 client1.test.com
192.168.1.3 client2.test.com
3.确保经过域名ping通puppetmaster
[root@client1 ~]# ping master.test.com
PING master.test.com (192.168.1.1) 56(84) bytes of data.
64 bytes from master.test.com (192.168.1.1): icmp_seq=1 ttl=64 time=7.29 ms
3.服务器时间同步
[root@client1 ~]# ntpdate 192.168.1.4
7 May 16:24:22 ntpdate[2532]: adjust time server 192.168.1.4 offset -0.144460 sec
4. 安装ruby,先安装compat-readline5(系统盘中),也能够一并安装
[root@master ~]# rpm -ivh /mnt/Packages/compat-readline5-5.2-17.1.el6.x86_64.rpm
[root@master ~]# rpm -ivh /mnt/ruby-*.rpm
5检查ruby版本
[root@master ~]# ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
6.安装facter
[root@client1 facter-1.7.1]# useradd -s /sbin/nologin puppet
[root@client1 ~]# tar zxf /mnt/facter-1.7.1.tar.gz -C /usr/src
[root@client1 ~]# cd /usr/src/facter-1.7.1/
[root@client1 facter-1.7.1]# ruby install.rb
7.安装puppet
[root@client1 facter-1.7.1]# tar zxf /mnt/puppet-2.7.21.tar.gz -C /usr/src
[root@client1 facter-1.7.1]# cd /usr/src//puppet-2.7.21/
chmod 0644 /usr/share/man/man8/puppet-node.8
[root@client1 puppet-2.7.21]# ruby install.rb
8.复制配置文件
[root@client1 puppet-2.7.21]# cp conf/redhat/puppet.conf /etc/puppet
[root@client1 puppet-2.7.21]# cp conf/redhat/client.init /etc/init.d/puppetclient
9.修改文件属性
[root@client1 puppet-2.7.21]# chmod +x /etc/init.d/puppetclient
10.puppet服务证书与签名
①关闭防火墙
[root@client1 puppet-2.7.21]# service iptables stop //已经关闭
②修改client配置文件(两台client配置彻底同样)
#vim /etc/puppet/puppet.conf
[main]
# The Puppet log directory.
# The default value is '$vardir/log'.
logdir = /var/log/puppet
# Where Puppet PID files are kept.
# The default value is '$vardir/run'.
rundir = /var/run/puppet
server = master.test.com
4、注册与申请
1.分别在客户端client1和client2上注册
[root@client1 puppet-2.7.21]# puppet agent --server=master.test.com --no-daemonize --verbose
[root@client2 puppet-2.7.21]# puppet agent --server=master.test.com --no-daemonize --verbose
这个指令的做用是将puppet agent不用守护进程的模式启动,好处是能看到与服务器端的通讯及证书签名的过程,方便debug。 默认puppet每2分钟向服务器端申请一次签名直到得到服务器端发来的通过签名的证书才 start agent 服务
2.在master上查看申请注册的客户端
[root@master ~]# puppet cert --list //查看申请注册的客户端
"client1.test.com" (99:6A:C3:89:C8:1C:B5:75:24:BA:56:51:43:1E:EB:71)
"client2.test.com" (B8:51:93:3D:5A:77:49:01:B6:1A:B8:EB:57:16:46:8B)
3.在master上将未注册的客户端进行注册
[root@master ~]# puppet cert sign --all
4.能够经过目录去查看已经注册的客户端
[root@master ~]# ll /var/lib/puppet/ssl/ca/signed/
total 12
-rw-r----- 1 puppet puppet 1915 May 7 17:59 client1.test.com.pem
-rw-r----- 1 puppet puppet 1915 May 7 17:59 client2.test.com.pem
-rw-r----- 1 puppet puppet 1988 May 7 16:17 master.test.com.pem
此时客户端已经完整了证书的申请和签名
5、配置实例
1.配置一个测试节点
n 节点信息:/etc/puppet/manifests/nodes
n 模块信息:/etc/puppet/modules
为了保护linux的ssh端×××破,批量修改客户端sshd端口,将端口22改成9922,并实现重启工做
建立ssh模块,模块目录为ssh,模块下面有三个文件:manifests、templates和files
n manifests:此目录为存放配置文件的目录,里面必须包含一个init.pp的文件,这是该模块的入口文件
l 导入一个模块的时候,会从init.pp开始执行。能够把全部的代码都写道init.pp里面,也能够分红多个pp文件,init再去包含其余文件
l 定义class类名的时候必须是ssh,这样能实现调用
n files目录是该模块的文件发布目录,puppet提供一个文件分发机制/etc/ssh/sshd_conf
n templates目录包含erb模版文件
master端:
①建立须要的必要目录
#mkdir -p /etc/puppet/modules/ssh/{manifests,templates,files}
#mkdir /etc/puppet/manifests/nodes //节点目录做用与client
#mkdir /etc/puppet/modules/ssh/files/ssh //控制ssh服务
#chown -R puppet /etc/puppet/modules/ //修改权限
此时/et/puppet/modules/ssh目录下结构
[root@master ~]# ll /etc/puppet/modules/ssh
②建立模块配置文件install.pp
[root@master ~]# vim /etc/puppet/modules/ssh/manifests/install.pp
class ssh::install{
package{ "openssh":
ensure => present
}
}
③建立模块配置文件config.pp
[root@master ~]# vim /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"],
notify => Class["ssh::service"],
}
}
④建立service.pp
[root@master ~]# vim /etc/puppet/modules/ssh/manifests/service.pp
class ssh::service {
service {"sshd":
ensure => running,
hasstatus =>true,
hasrestart =>true,
enable =>true,
require =>Class["ssh::config"]
}
}
⑤建立模块主配置文件,将以上配置文件加载进去,输入如下信息:
[root@master ~]# vim /etc/puppet/modules/ssh/manifests/init.pp
class ssh{
include ssh::install,ssh::config,ssh::service
}
此时/etc/puppet/modules/ssh/manifests下有四个文件
[root@master ~]# ll /etc/puppet/modules/ssh/manifests/
⑥创建服务器ssh统一维护文件
因为服务器和客户端的sshd_config文件默认同样,此时将服务器端/etc/ssh/sshd_config复制到模块默认路径
[root@master ~]# cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
[root@master ~]#
⑦建立测试节点配置文件,并将ssh加载进去
[root@master ~]# vim /etc/puppet/manifests/nodes/ssh.pp
⑧将测试节点载入puppet,即修改site.pp
[root@master ~]# vim /etc/puppet/manifests/site.pp
⑨修改服务器端维护的sshd_config配置文件
[root@master ~]# vim /etc/puppet/modules/ssh/files/ssh/sshd_config
Port 9922
⑩从新启动puppet
[root@master ~]# /etc/init.d/puppetmaster restart
Stopping puppetmaster: [ OK ]
Starting puppetmaster: [ OK ]
2.客户端主动拉取 注:这里使用clinet1测试;client2同理
[root@client1 puppet]# puppet agent -t
①检查客户端/etc/ssh/sshd_config配置是否是自动变了
[root@client1 puppet]# vim /etc/ssh/sshd_config
Port 9922
②查看服务器ssh服务是否重启,端口是否生效
[root@client1 puppet]# netstat -tunlp|grep ssh
3.服务器推送同步
客户端配置
①修改配置文件
[root@client1 puppet]# vim /etc/puppet/puppet.conf
最后一行添加以下
listen = true //使puppet监听8139端口
[root@client1 puppet]# vim /etc/puppet/auth.conf
allow * //容许任何服务器推送
②启动puppet客户端
[root@client1 puppet]# /etc/init.d/puppetclient start
Starting puppet: [ OK ]
[root@client1 puppet]# netstat -anpt|grep 8139 //自身puppet端口号
③修改/etc/ssh/sshd_config配置文件
[root@client1 puppet]# vim /etc/ssh/sshd_config
Port 22
[root@client1 puppet]#service sshd restart
服务器端配置
④从服务器开始向客户端推送
[root@master ssh]# puppet kick client1.test.com
⑤校验结果
[root@client1 puppet]# vim /etc/ssh/sshd_config
Port 9922
[root@client1 puppet]# service sshd restart
[root@client1 puppet]# netstat -anpt|grep 9922