puppet-master: 192.168.75.136 FQDN:puppet-master.liu.cc
puppet-agent1: 192.168.75.137 FQDN:agent1.liu.cc
puppet-agent2: 192.168.75.138 FQDN:agent2.liu.cc
说明:
建议都在nat模式,保证都能上外网
要修改为非常规范的主机名
vim /etc/sysconfig/network
HOSTNAME=puppet-master.liu.cc
vim /etc/hosts
192.168.75.136 puppet-master.liu.cc
192.168.75.137 agent1.liu.cc
192.168.75.138 agent2.liu.cc
scp /etc/hosts 192.168.75.137:/etc
scp /etc/hosts 192.168.75.138:/etc
更改完后重启机器
在puppet-master上搭建一个ntp服务器
vim /etc/ntp.conf
restrict 192.168.75.0 mask 255.255.255.0 nomodify notrap 添加一行
service ntpd restart
在agent1和agent2上:
ntpdate 192.168.75.136
或者用xinetd服务,局域网内同步时间
cd /etc/xinetd.d
vim time-dgram
vim time-stream
修改为yes
service time
{
# This is for quick on or off of the service
disable = yes
重启xinetd服务
在agent1和2上:
rdate -s 192.168.75.136
然后agent客户端定义计划任务来向puppet-master同步时间
crontab -e
*/2 * * * * /usr/sbin/ntpdate 192.168.75.136 2> /tmp/date.log 每隔两分钟同步一次时间,错误输出到/tmp/date.log
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime(保证时区一致)
[root@puppet-master ~]# service iptables stop
[root@puppet-master ~]# chkconfig iptables off
[root@puppet-master ~]# getenforce
Disabled
1.备份或删掉本地源
mv demo.repo demo.repo.bak
mv bak/* .
ls
2.下载安装
wget -P /usr/src/ http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
cd /usr/src/
ls
rpm -ivh puppetlabs-release-6-10.noarch.rpm
ls /etc/yum.repos.d/
(多了一个)puppetlabs.repo
至此外网源已经安装完成
测试验证:
yum clean all
yum makecache
其他两台也是这样处理
http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-5.noarch.rpm(没找到)
http://yum.puppetlabs.com/el/6Server/products/x86_64/puppetlabs-release-6-10.noarch.rpm(报错 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os error was
14: PYCURL ERROR 7 - "Failed to connect to 2001:4178:5:200::10: Network is unreachable")
http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm(成功创建)
yum -y install puppet-server puppet
service puppetmaster start
netstat -nltp|grep ruby
yum -y install puppet
客户端服务暂时不要启动
service puppet status
rpm -ql puppet-server
rpm -ql puppet
/etc/puppet/modules
/etc/puppet/puppet.conf
/etc/rc.d/init.d/puppet
/var/log/puppet
[root@puppet-master ~]# vim /etc/puppet/puppet.conf
[master]
certname=puppet-master.liu.cc //定义签名认证的名称,自己的主机名
[root@puppet-master ~]# /etc/init.d/puppetmaster start
Starting puppetmaster: [ OK ]
[root@puppet-master ~]# netstat -anltp|grep ruby
tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN 2552/ruby
[root@agent2 ~]# vim /etc/puppet/puppet.conf
[agent]
certname=agent2.liu.cc
sercer=puppet-master.liu.cc
runinterval=180 //每隔3分钟拉取一次
注意:客户端不要开启puppet服务,启动会自动发起认证请求
手动测试:一次性向服务端尝试拉取一次,如果是新装的客户端就是先发起注册申请
# puppet agent -t
[root@agent1 ~]# puppet agent -t 发起认证请求
Info: Creating a new SSL key for agent1.liu.cc
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for agent1.liu.cc
Info: Certificate Request fingerprint (SHA256): 04:04:77:AA:38:05:57:54:5A:55:F2:F1:3A:E8:96:04:FF:51:EC:64:28:48:33:8F:E8:5C:E7:E9:FF:8D:39:5E
Info: Caching certificate for ca
Exiting; no certificate found and waitforcert is disabled
[root@puppet-master ~]# puppet cert --list 服务端查看
"agent1.liu.cc" (SHA256) 04:04:77:AA:38:05:57:54:5A:55:F2:F1:3A:E8:96:04:FF:51:EC:64:28:48:33:8F:E8:5C:E7:E9:FF:8D:39:5E
[root@puppet-master ~]# puppet cert --list
"agent1.liu.cc" (SHA256) 04:04:77:AA:38:05:57:54:5A:55:F2:F1:3A:E8:96:04:FF:51:EC:64:28:48:33:8F:E8:5C:E7:E9:FF:8D:39:5E
"agent2.liu.cc" (SHA256) 76:B9:CE:95:AF:A6:B9:0D:58:FB:E3:30:C1:3C:32:5B:8B:75:60:A4:DB:0B:FE:11:05:DF:96:3A:10:B0:87:8F
[root@puppet-master ~]# puppet cert sign --all
Notice: Signed certificate request for agent1.liu.cc
Notice: Removing file Puppet::SSL::CertificateRequest agent1.liu.cc at '/var/lib/puppet/ssl/ca/requests/agent1.liu.cc.pem'
Notice: Signed certificate request for agent2.liu.cc
Notice: Removing file Puppet::SSL::CertificateRequest agent2.liu.cc at '/var/lib/puppet/ssl/ca/requests/agent2.liu.cc.pem'
[root@agent1 ~]# puppet agent -t
Info: Caching certificate for agent1.liu.cc
Info: Caching certificate_revocation_list for ca
Info: Caching certificate for agent1.liu.cc
Warning: Unable to fetch my node definition, but the agent run will continue:
Warning: undefined method `include?' for nil:NilClass
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.liu.cc
Info: Applying configuration version '1557735427'
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 0.07 seconds
puppet的操作对象:资源
资源类型 | 资源描述 |
---|---|
file | 文件或目录 |
user | 用户 |
group | 组 |
service | 服务 |
cron | 计划任务 |
exec | 命令 |
package | 软件包 |
yumrepo | 软件仓库 |
ls /etc/puppet/
manifests 清单目录,至少需要包含site.pp文件:site.pp文件里定义了具体的资源
modules 模块目录,以类和模块的方式定义资源
puppet.conf 服务器master端配置文件
type{'title':
attr1 => value1,
attr2 => value2,
...
;
}
attr表示资源的属性,=>符合是给属性赋值
特殊属性:
ensure属性:用来定义资源的目标状态,不同的资源ensure值不同。比如,user资源中ensure可以设置为present表示用户必须存在;设置为absent表示用户不能存在(删除用户)
但是在service资源中,ensure的值往往被设置为stopped或者running。大部分是前者。
在puppetmaster端创建一个索引文件site.pp
[root@puppet-master manifests]# vim site.pp
node 'default' { //node ‘xxxx’代表定义一个新的客户端节点(使用FQDN)
file{'aaa':
path => "/tmp/puppet1.txt",
content => "Hello puppet agent1";
}
}
agent1端测试
puppet agent -t
node 'agent1.liu.cc' { //node ‘xxxx’代表定义一个新的客户端节点(使用FQDN)
file{"/tmp/puppet1.txt": 换一种写法,没有path,文件写到标题里的路径里
content => "Hello puppet agent1";
}
}
node 'agent2.liu.cc' { //node ‘xxxx’代表定义一个新的客户端节点(使用FQDN)
file{'aaa':
path => "/tmp/puppet2.txt",
content => "Hello puppet agent2";
}
}
3.在所有的agent上创建oracle和mysql用户
node 'default'{
user {'abc':
name => oracle,
ensure => present,
uid => 666;
}
user {'aaa':
name => mysql,
ensure => present,
uid => 777;
}
}
node 'agent2.liu.cc' {
user{'mysql':
ensure => absent;
}
}
1.puppet-master端操作:
1)创建模块目录
mkdir -pv /etc/puppet/modules/vsftpd/{manifests,files}
说明:
manifests目录是vsftpd模块的功能代码目录,该模块有什么功能都会在这里定义
files目录是资源目录,在manifests里定义的代码需要发送一些文件可以放在这里
2)编辑模块核心文件 init.pp
class vsftpd {
yumrepo {"Server":
descr => "Server repo",
baseurl => "file:///media/CentOS_6.5_Final",
gpgcheck => "0",
enables => "1";
}
package {"vsftpd":
ensure => installed,
require => Yumrepo["Server"]; //注意,关联资源时字母要大写
}
service {"vsftpd":
ensure => running
}
}
3)调用模块
cat /etc/puppet/manifests/site.pp
node default {
include vsftpd
}
4)检测配置文件语法
puppet parser validate
/etc/puppet/modules/vsftpd/manifests/init.pp
puppet parser validate /etc/puppet/manifests/site.pp
2.agent端测试验证
puppet agent -t
[root@agent1 ~]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.liu.cc
Info: Applying configuration version '1557741614'
Error: Could not start Service[vsftpd]: Execution of '/sbin/service vsftpd start' returned 1: vsftpd: unrecognized service
Error: /Stage[main]/Vsftpd/Service[vsftpd]/ensure: change from stopped to running failed: Could not start Service[vsftpd]: Execution of '/sbin/service vsftpd start' returned 1: vsftpd: unrecognized service
Notice: /Stage[main]/Vsftpd/Yumrepo[Server]/ensure: created
Info: changing mode of /etc/yum.repos.d/Server.repo from 600 to 644
Notice: /Stage[main]/Vsftpd/Package[vsftpd]/ensure: created
Notice: Finished catalog run in 13.60 seconds
You have new mail in /var/spool/mail/root
[root@agent1 ~]# rpm -q vsftpd
vsftpd-2.2.2-24.el6.x86_64
发现两个error,原因是还在装vsftpd,所以不能启动服务
[root@agent1 ~]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent1.liu.cc
Info: Applying configuration version '1557741614'
Notice: Finished catalog run in 0.25 seconds
You have new mail in /var/spool/mail/root
[root@agent1 ~]# service vsftpd status 现在就能看到已经运行了
vsftpd (pid 11812) is running...
原文:https://www.cnblogs.com/liuwei-xd/p/11022742.html