puppet
puppet简介:
- cs架构:
- c一般是puppet客户端程序。c也可以监听8139(默认)端口,让s端来请求(比如server发消息让客户端同步节点配置)。
- s一般是puppetmaster,监听8140(默认)端口。
- server通过manifest配置文件来组织和管理客户端(服务器)。证书+主机名配置是控制管理服务器的前提。
- 原理:
- 客户端调用facter,facter会探测出这台主机的一些变量如主机名、内存大小、IP地址等。然后puppetd把这些信息发送到服务器端;
- 服务器端的puppetmaster检测到客户端的主机名,然后会到manifest里面对应的node配置,然后对这段内容进行解析,facter送过来的信息可以作为变量进行处理的,node牵涉到的代码才解析,其它的代码不解析,解析分几个过程:语法检查、然后会生成一个中间的伪代码,然后再把伪代码发给客户机;
- 客户端接收到伪代码之后就会执行,客户端再把执行结果发送给服务器;
- 服务器再把客户端的执行结果写入日志。
puppet安装
# machine env: centos7
yum install epel-release
# server
yum install puppet-server
# client
yum install puppet
puppet常用同步配置管理的几种模式
- client同步server端node的配置
- server端通知client同步配置
- server和服务端配置puppet自动按一定的时间间隔同步
配置使用puppet
新建 /etc/puppet/manifests/site.pp文件,示例配置文件如下:
# node default 代表所有节点
# 创建/tmp/test.txt文件,写入"hello world!"
node default {
file {
“/tmp/test.txt”:
content => “hello world!”;
}
}
常用的几条命令
## client
#向服务器发起证申请也是常用来client同步node配置的命令
pupet agent —server sever-hostname -test
## sever
#颁发证书命令
pupet cert -s client-hostname
pupet cert -a
## 查看正在申请和颁发的证书列表
pupet cert —list --all
资源,配置管理的指令
配置文件中组织node的配置需要用到的指令:
package
# 安装软件screen和ntp,卸载popoe
package{
[“screen”,”ntp”]:
Ensure => “installed”;
“popoe”:
ensure => “absent”;
}
Service
Service{
“sshd”:
ensure => running;
}
Cron
Cron{
“cron sync time to pool.ntp.org”:
command=> /usr/sbin/ntpdate pool.ntp.org,
User=>root,
Hour=>0,
minute=>0
}
服务器向客户端推送文件
配置puppet :/etc/puppet/fileserver.conf
[files]
Path /etc/puppet/files
Allow *
# 在对应要推送node添加如下配置:
File {
“tmp/nginx_install.sh”:
source =>
“puppet://server-hostnname/files/nginx_install.sh”,
group => root,
owner => root,
mode => “755”
}
exec
exec{
“/root/nginx_innstall.sh”:
command => “/root/nginx_install.sh”,
cwd => “/root”,
user => “root”,
path => [“/usr/bin”,”/usr/sbin”],
## 服务器上你/root/nginx_install.sh文件有变化才执行exec的命令(前提是要用file指令,将脚本推送)
Subscribe => file[“/root/nginx_install.sh”]
}
puppet自动认证
- Kickstart自动安装完系统,装上puppet客户端,修改服务器的hosts解析,并申请证书
- Dns系统做好映射或者server端hosts要提前做好dns映射管理。
- 在服务器上的puppet.conf配置文件里面[main]下方添加
autosign = true重启puppetmaster服务(服务器不需要再向客户端颁发证书)
重新颁发证书(cause: 客户端主机名更改)
Rm -rf /var/lib/puppet/ssl/文件夹
Puppet cert —clean client-hostname
puppet自动同步node的配置
客户端配置
Vim /etc/sysconfig/puppet
PUPPET_SERVER=server-hostname
PUPPET_PROT=8140
PUPPET_LOG=/var/log/puppet/puppet.log
PUPPET_EXTRA_OPTS=—waitforcert=500 客户端等待时间s
重启puppet即可
服务端配置
/etc/puppet/puppet.conf
[agent]
run interval = 60 # client60s同步一次配置,默认30分钟
服务器主动推送同步
puppetrun 向客户端发送一段信号,告诉客户端立即同步服务器配置。
修改客户端配置文件, vi /etc/puppet/puppet.conf
[agent]
listen = true // 让puppet监听8139端口
修改客户端puppet的配置文件/etc/sysconfig/puppet
PUPPET_SERVER=server-hostname
vim /etc/puppet/namespaceauth.conf
[puppetrunner]
Allow * // 允许所有主机访问
在客户端修改auth.conf
Path /run
method save
allow *
以上是添加内容
path /
重启puppet
## server 主动推送信号
puppet kick -d client-hostname //code 0 成功