一 puppet 的概念
Puppet 是一种 Linux、Unix、windows 平台的集中配置管理系统,使用自有的 puppet 描述语言,可管理配置文件、用户、cron 任务、软件包、系统服务等。puppet 把这些系统实体称之为资源,puppet 的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
二 puppet 架构
C/S 星型架构。客户端每隔一段时间,从服务器端检查是否有更新。如果有更新则下载更新内容,并严格按照该内容配置自己。配置成功或出错将会通知服务器。
三 puppet 工作过程
1.客户端 puppetd 调用 facter,facter 会探测出这台主机的一些变量如主机名、内存大小、IP地址等。然后 puppetd 把这些信息发送到服务器端。
2.服务器端的 puppetmaster 检测到客户端的主机名,然后会到 manifest 里面对应的 node配置,然后对这段内容进行解析,facter 送过来的信息可以作为变量进行处理的,node 牵涉
到的代码才解析,其它的代码不不解析,解析分几个过程:语法检查、然后会生成一个中间的伪代码,然后再把伪代码发给客户机
3.客户端接收到伪代码之后就会执行,客户端再把执行结果发送给服务器。
4.服务器再把客户端的执行结果写入日志。
四 实验步骤
ntp时间同步
1.安装软件
配置好 yum 源:
#vim /etc/yum.repos.d/y.repo
安装软件:
服务器:#yum --enablerepo=y install puppet-server -y
客户端:#yum --enablerepo=y install puppet -y
2.配置服务器及客户端的主机名
配置 DNS 服务,使得每台机器的主机名可以被解析
3.puppet 服务器与客户端建立连接
(1)编辑服务器端 puppet 配置文件
#vim /etc/puppet/puppet.conf
在配置文件[main]区域内,写入服务器的完整 FQDN
dns_alt_names = www.yy5.com
(2)验证服务器端软件安装是否成功,及主机名配置是否有误(实际上进行了一次 CA 的认证)
#puppet master --verbose --no-daemonize
(3)服务器端启动服务:systemctl start puppetmaster
(4)客户端编辑配置文件
#vim /etc/puppet/puppet.conf
在[agent]区域添加服务器的 FQDN
server = www.yy5.com
(5)测试客户端与服务器的连接性(实际上是在客户端生成用于连接的请求证书)
puppet agent --test --ca_server=www.yy5.com
(6)客户端启动服务:systemctl restart puppet
(7)服务器签署客户端验证请求证书
查看来自客户端的证书:puppet cert list
4、签署来自节点的证书
puppet cert --allow-dns-alt-names sign 证书名
(1)修改客户端与服务器端同步时间
编辑服务器端/客户端配置文件:
#vim /etc/puppet/puppet.conf
在[main]区域内增加:runinterval = 1
注:默认单位为秒 s
(2)在服务器端编辑客户端配置文件
进入指定目录:cd /etc/puppet/manifests
编辑配置文件:vim site.pp(文件名必须是这个)
配置文件内容:
group{'test':
ensure => presnt,
gid => 2000,
}
注:资源类型与{}间没有空格
在客户端 cat /etc/group|grep test 可见新生成的 test 组,组的 ID 为 2000
(3)在客户端指定目录下生成文件
编辑服务器端配置文件
vim /etc/puppet/manifests/site.pp
file{ '/home/yy.txt':
ensure => file,
owner => 'root',
group => 'root',
mode => 644,
content => 'This is the puppet test file.',
}
注:如果服务器端也想按照/etc/puppet/manifests 下的配置文件对自己进行配置,可以使用命令:puppet apply /etc/puppet/manifests/site.pp
(4)在客户端生成文件时指定文件内容
编辑服务器端配置文件
vim /etc/puppet/manifestes/site.pp
$contents = 'Finally,we will have a small holiday,it is god damn it well'
file{ '/mnt/test':
ensure => file,
owner => 'root',
group => 'root',
mode => 755,
content => "$contents",
}
在客户端查看
(5)以指定文件作为内容模板
编辑服务器端配置文件
#vim /etc/puppet/fileserver.conf
开启 13-15 注释
生成用于存储模板文件的目录:
#mkdir -pv /etc/puppet/files
#chown 777 files
创建模板文件:
#echo "test file" > files/f1
编辑服务气端节点的配置文件:
#vim /etc/puppet/manifestes/site.pp
file{ '/home/test1':
ensure => file,
owner => 'root',
group => 'test',
mode => 644,
source => 'puppet://www.yy5.com/extra_files/f1',
} (蓝色字体表示模板文件目录)
注:此时需重启服务,因为修改过fileserver.conf配置文件。
服务器端重启服务:systemctl restart puppetmaster
查看客户端
(6)创建连接文件
编辑服务器端配置文件:
#vim /etc/puppet/manifests/site.pp
file{ '/mnt/test1.link':
ensure => link,
target => '/mnt/test',
}
客户端查看
注:该链接文件为硬链接
(7)删除一个文件
编辑服务器端配置文件:
#vim /etc/puppet/manifests/site.pp
file{'/mnt/test1.link':
ensure => absent,
}
注:要注释之前生成的,避免生成删除循环
客户端查看
(8)根据目录模板创建目录
编辑服务器端配置文件:
#vim /etc/puppet/fileserver.conf
添加:
[extra_dirs]
path /etc/puppet/dirs
allow *
创建模板目录:mkdir -pv /etc/puppet/dirs.
#echo 888888888 > dirs/f1
编辑节点配置文件:vim /etc/puppet/manifests/site.pp
file{'/home/yi':
ensure => directory,(针对目录)
recurse => true,
purge => true,
force => true,
owner => 'root',
group => 'root',
mode => 777,
source => 'puppet://www.yy5.com/extra_dirs/f1',
}
服务器端重启服务:systemctl restart puppetmaster
客户端查看
(9) 软件包的安装与卸载
1.使用本地 yum 源安装软件
package{'httpd':
provider => yum,
ensure => installed,
}
查看客户端
2.使用本地 yum 源升级软件
package{'httpd':
provider => yum,
ensure => latest,
}
3.安装指定服务器上的软件
package{'epel-release':
provider => rpm,
ensure => installed,
source => 'http://172.16.100.1/epel/epel-release-latest-7.noarch.rpm',
}
查看客户端
4.卸载软件
package{'httpd':
provider => yum,
ensure => purged,
}
查看客户端
10) 服务资源管理
1.运行 httpd
service{'httpd':
name => 'httpd',
ensure => running,
}
2.运行 httpd,如果 httpd 程序不存在则安装,安装后启动 httpd
package{'httpd':
provider => yum,
ensure => installed,
}
service{'httpd':
name => 'httpd',
ensure => running,
require => Package['httpd'],
}
3.停止 httpd
service{'httpd':
name => 'httpd',
ensure => stopped,
}
4.更新 httpd.conf 后,重启 httpd
1)vim /etc/puppet/fileserver.conf
取消 13-15 行注释
[extra_files]
path /etc/puppet/files
allow *
2)生成文件模板即所在目录
#mkdir -pv /etc/puppet/files
#touch /etc/puppet/files/index.html(此文件名可任意取名)
#echo Tast Page……… > index.html
3)编辑客户端资源配置文件
vim /etc/puppet/manifests/site.pp
node 'www.yy5.com' {
file{'/var/www/html/index.html':
ensure => file,
owner => 'root',
group => 'root',
mode => 755,
source => 'puppet://www.server.com/extra_files/index.html',
notify => Service['httpd'],
}
service{'httpd':
name => 'httpd',
ensure => running,
}
}
Node 'www.yy6.com' {
package{'elinks':
provider => yum,
ensure => installed,
}
}
注:node{}指定某客户端执行以下操作
客户端测试
资源执行管理:通过脚本让客户端自动下载软件、启动服务
- 在puppet服务器端编写脚本 :vim nfs.sh
#!/bin/bash
yum install nfs-utils -y &> /dev/null
mkdir /mnt/share
chmod 777 /mnt/share
echo “/mnt/share *(rw)” > /etc/exports
systemctl restart rpcbind
systemctl restart nfs-server
2.运行脚本:bash nfs.sh
3.在服务器端编写客户端配置文件:
vim /etc/puppet/manifests/site.pp
node ‘www.yy6.com’ {
file{'/root/f1':
ensure => file,
owner => 'root',
group => 'root',
mode => 755,
source => 'puppet://www.yy5.com/extra_files/nfs.sh',
}
exec{'/usr/bin/bash /root/f1':
path => ["/usr/sbin:/usr/bin/:usr/bin/bash"],
subscribe => File['/root/f1'],
refreshonly => true
}
}
4.以指定文件作为内容模板: 编辑服务器端配置文件
vim /etc/puppet/fileserver.conf
开启 13-15 注释
生成用于存储模板文件的目录:mkdir -pv /etc/puppet/files
将脚本文件移动至上述目录: mv nfs.sh /etc/puppet/files
1、在puppet客户端查看脚本是否执行,创建文件写入内容
2、在nfs客户端(puppet服务器端)创建挂载点、进行挂载
mount -t nfs 192.168.1.2:/mnt/share /mnt/nfs
3、查看到挂载的内容: