puppet部署与应用
实验名称:
Puppet部署与应用
实验目的:
熟悉puppet工作原理
进行puppet部署与应用
实验环境:
将所需软件拷贝至各个主机的/usr/src目录中
四:实验思路:
搭建puppetmaster
搭建puppetclient
案例的实施
测试
实验过程
在使用puppet作为配置管理工具的同时,facter是一个非常有用的系统盘点工具,这个工具可以通过一些预先设定好变量定位一台主机,比如可以通过变量lsbdistrelease便可以知道当前系统的版本号,在整个自动化运维过程中,由于系统应用的多样性,更多需要通过应用的名称、角色的名称进行标示,这样就需要自定义一些fact并赋值到每个节点上去,相当于给节点打上标签。
一:搭建NTP服务器
1:设置IP地址
2:设置yum源
3:在NTP Server上搭建NTP服务
[root@localhost ~]# yum -y install ntp
[root@localhost ~]# vi /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 8
[root@localhost ~]# service ntpd start
[root@localhost ~]# chkconfig ntpd on
[root@localhost ~]# service iptables stop
注意:若能保证各服务器的时间一致,本案例可以不用设置NTP服务,本文灰色部分就可以不做
一:搭建puppetmaster(centos6.5)
1:设置ip地址
2:设置yum源
3:规划服务器主机名
[root@localhost 桌面]# vi /etc/sysconfig/network
HOSTNAME=master.test.cn
[root@localhost 桌面]# vi /etc/hosts
192.168.1.131 master.test.cn
192.168.1.132 client.test.cn
192.168.1.137 client137.test.cn
[root@localhost 桌面]# hostname master.test.cn
[root@localhost 桌面]# bash
4:在puppetmaster上配置为ntp客户端
[root@master 桌面]# yum -y install ntp
[root@master 桌面]# ntpdate 192.168.1.200
5:安装compat-readline和ruby(要按照顺序安装)
ruby是一个安装软件的工具,puppet和facter需要用此工具来安装
[root@master 桌面]# cd /usr/src
[root@master src]# rpm -ivh compat-readline5-5.2-17.1.el6.x86_64.rpm
[root@master src]# rpm -ivh ruby-*.rpm
[root@master src]# ruby -v \查看ruby版本
6:安装puppet和facter
[root@master src]# useradd -s /sbin/nologin puppet
[root@master src]# tar zxf facter-1.7.1.tar.gz
[root@master src]# cd facter-1.7.1
[root@master facter-1.7.1]# ruby install.rb
[root@master facter-1.7.1]# cd …
[root@master src]# tar zxf puppet-2.7.21.tar.gz
[root@master src]# cd 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 \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
[root@master puppet-2.7.21]# mkdir /etc/puppet/manifests \用于保存服务端程序清单的目录
[root@master puppet-2.7.21]# mkdir /etc/puppet/modules \模块目录
[root@master puppet-2.7.21]# service iptables stop
[root@master puppet-2.7.21]# chkconfig iptables off
[root@master puppet-2.7.21]# vi /etc/puppet/puppet.conf
在[main]标题最后添加
modulepath=/etc/puppet/modules:/usr/share/puppet/modules
server = master.test.cn
certname = master.test.cn
pluginsync = false \关闭模块中的插件功能
8:启动puppet
[root@master puppet-2.7.21]# /etc/init.d/puppetmaster start
二:搭建puppetclient(centos6.5)(两个客户端的配置一样,除了ip)
1:设置ip地址
2:设置yum源
3:规划服务器的主机名
[root@localhost 桌面]# vi /etc/sysconfig/network
修改:
HOSTNAME=client.test.cn
[root@localhost 桌面]# vi /etc/hosts
添加:
192.168.1.131 master.test.cn
192.168.1.132 client.test.cn
192.168.1.137 client137.test.cn
[root@localhost 桌面]# hostname client.test.cn
[root@localhost 桌面]# bash
[root@client 桌面]# ping master.test.cn
4:配置ntp时间同步
[root@client 桌面]# yum -y install ntp
[root@client 桌面]# ntpdate 192.168.1.200
5:安装compat和ruby
[root@client 桌面]# cd /usr/src
[root@client src]# rpm -ivh compat-readline5-5.2-17.1.el6.x86_64.rpm
[root@client src]# rpm -ivh ruby-*.rpm
[root@client src]# ruby -v
6:安装puppet和facter
[root@client src]# useradd -s /sbin/nologin puppet
[root@client src]# tar zxf facter-1.7.1.tar.gz
[root@client src]# cd facter-1.7.1
[root@client facter-1.7.1]# ruby install.rb
[root@client facter-1.7.1]# cd …
[root@client src]# tar zxf puppet-2.7.21.tar.gz
[root@client src]# cd puppet-2.7.21
[root@client puppet-2.7.21]# ruby install.rb
[root@client puppet-2.7.21]# cp conf/redhat/puppet.conf /etc/puppet
[root@client puppet-2.7.21]# cp conf/redhat/client.init /etc/init.d/puppetclient
[root@client puppet-2.7.21]# chmod +x /etc/init.d/puppetclient
[root@client puppet-2.7.21]# service iptables stop
[root@client puppet-2.7.21]# chkconfig iptables off
[root@client puppet-2.7.21]# vi /etc/puppet/puppet.conf
在[main]的末尾添加
server=master.test.cn
pluginsync = false
7: 在client上测试连接(会一直处于连接状态,在master端进行注册并可以在master上看到后可一按ctrl+c中断)
[root@client puppet-2.7.21]# puppet agent --server=master.test.cn --no-daemonize --verbose
–verbose:运行的时候显示信息
–no-daemonize:以非守护进程的方式运行
8:在master上查看申请注册的客户端
[root@master puppet-2.7.21]# puppet cert --list
“client.test.cn” (C0:85:9A:55:E4:EA:80:5C:41:D3:C1:AA:9E:21:31:3E)
9:在master上对未注册的客户端进行注册
[root@master puppet-2.7.21]# puppet cert sign --all
[root@master puppet-2.7.21]# ll /var/lib/puppet/ssl/ca/signed/ \查看注册的客户端
总用量 8
-rw-r-----. 1 puppet puppet 1907 11月 17 08:56 client.test.cn.pem
-rw-r-----. 1 puppet puppet 1976 11月 16 22:52 master.test.cn.pem
三:应用实例
批量修改ssh端口号(将ssh的22号端口改为9922端口,防止黑客的攻击)
1):master服务器端的设置
1:在master端创建所需的目录
[root@master ~]# mkdir -p /etc/puppet/modules/ssh/manifests
[root@master ~]# mkdir -p /etc/puppet/modules/ssh/templates
[root@master ~]# mkdir -p /etc/puppet/modules/ssh/files
[root@master ~]# mkdir /etc/puppet/manifests/nodes
[root@master ~]# mkdir /etc/puppet/modules/ssh/files/ssh
[root@master ~]# chown -R puppet /etc/puppet/modules/
[root@master ~]# ll /etc/puppet/modules/ssh/
总用量 12
drwxr-xr-x. 3 puppet root 4096 11月 17 09:05 files
drwxr-xr-x. 2 puppet root 4096 11月 17 09:03 manifests
drwxr-xr-x. 2 puppet root 4096 11月 17 09:03 templates
各目录说明:
本案例要同步ssh的配置文件,故在/etc/puppet/modules/下创建了ssh目录用以保存ssh模块相关文件。
Manifests目录:包含一个init.pp的文件,导入模块时要从该文件开始执行,所以可以将所有的代码写到init.pp中,也可以分成多个pp文件分别调用。
Files目录:文件发布目录,待分发的文件存放其中。
Templates目录:该文件夹中存储着常用程序的模板文件,通常为空
Nodes目录:定义节点的目录,告诉master都有哪些节点
2:创建模块配置文件install.pp(用以判断客户端是否安装了ssh服务)
[root@master ~]# vi /etc/puppet/modules/ssh/manifests/install.pp
输入:
class ssh::install {
package { “openssh-server”:
ensure =>present,
}
}
package:检查指定的包
ensure:这个参数指定是否创建、删除文件或者目录或软件包,其中present会检查是否存在,不存在就会创建。
3:创建模块配置文件config.pp(定义需要同步的文件及其相关属性,要调用install.pp文件判断ssh是否安装)
[root@master ~]# 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"],
notify => Class["ssh::service"],
}
}
说明:
File:指定客户端ssh配置文件的路径
Source:服务器端ssh配置文件的路径(此路径不是该服务安装目录的路径,而是puppet存放该服务模块的路径)
这里有个地方比较特别,文件路径是/etc/puppet/modules/ssh/files/ssh/sshd_config",写成puppet规则时files会被省略,需要将其路径写成puppet://$puppetserver/modules/ssh/ssh/sshd_config或puppet:///modules/ssh/ssh/sshd_config,其中第一个ssh表示的是ssh模块的files目录。路径要从puppet后开始写,不要写完整的路径,直接从模块开始写,并且files目录不写,这叫文件托管。
4:创建模块配置文件service.pp(用来定义ssh服务的启动,它要调用config.pp文件判断是否同步了新的ssh配置文件)
[root@master ~]# vi /etc/puppet/modules/ssh/manifests/service.pp
class ssh::service {
service {"sshd":
ensure => running,
hasstatus => true,
hasrestart => true,
enable => true,
require => Class["ssh::config"]
}
}
5:创建模块主配置文件init.pp(该文件用来调用其他几个配置文件)
[root@master ~]# vi /etc/puppet/modules/ssh/manifests/init.pp
class ssh{
include ssh::install,ssh::config,ssh::service
}
[root@master ~]# ll /etc/puppet/modules/ssh/manifests/
总用量 16
-rw-r–r--. 1 root root 287 11月 17 09:22 config.pp
-rw-r–r--. 1 root root 65 11月 17 09:28 init.pp
-rw-r–r--. 1 root root 99 11月 17 09:21 install.pp
-rw-r–r--. 1 root root 239 11月 17 09:25 service.pp
6:建立服务器端ssh统一维护文件
[root@master ~]# cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
[root@master ~]# chown puppet /etc/puppet/modules/ssh/files/ssh/sshd_config
7:创建测试节点配置文件,并将ssh加载进去
[root@master ~]# vi /etc/puppet/manifests/nodes/ssh.pp
node ‘client.test.cn’{
include ssh
}
node ‘client137.test.cn’{
include ssh
}
8:将测试节点载入puppet
[root@master ~]# vi /etc/puppet/manifests/site.pp
import “nodes/ssh.pp”
9:修改服务器端维护的sshd_config配置文件
[root@master ~]# vi /etc/puppet/modules/ssh/files/ssh/sshd_config
修改:
Port 9922 \注意去掉注释符
10:重启puppet
[root@master ~]# /etc/init.d/puppetmaster restart \服务端
[root@client ~]# /etc/init.d/puppetclient restart \客户端
2):client客户端主动拉取
在client上配置
[root@client 桌面]# puppet agent -t
[root@client 桌面]# vi /etc/ssh/sshd_config \查看端口
[root@client 桌面]# netstat -tunlp | grep ssh
3):服务器推送同步
1:在client137上上
[root@client 桌面]# vi /etc/puppet/puppet.conf
最后一行添加
listen=true
[root@client 桌面]# vi /etc/puppet/auth.conf
最后一行添加
allow *
[root@client 桌面]# /etc/init.d/puppetclient restart
2:在master端
[root@master ~]# vi /etc/puppet/modules/ssh/files/ssh/sshd_config \重新修改一个端口号
[root@master 桌面]# puppet kick client137.test.cn \不能同步重启一下puppetmaster
3:在client137上
[root@client 桌面]# vi /etc/ssh/sshd_config \查看端口的变化