Puppet
- puppet是一种集中配置管理系统,可管理配置文件、用户、cron任务、软件包、系统服务等。这些系统实体称为资源。
- puppet是一个c/s结构,所有客户端同一个服务端通讯,每个客户端每半小时连接一次服务端,下载最新的配置文件,并且严格按照配置文件来配置服务器。配置完成以后,客户端可以反馈一个消息给服务端,出错也会反馈消息。
- 他是大规模的集群管理工具,客户端每隔一段时间会连到服务端检查下资源变化情况,发生变化的话就会按照配置动作进行相关操作。
- puppet所有可操作对象可以抽象为资源。目前涵盖40多种。
1、工作原理
- 客户端puppet调用facter,facter会探测出这台主机的一些变量,如主机名、内存大小、IP地址等信息。然后puppet客户端将这些信息发送到服务端。
- 服务端的【puppetmaster】进程检测到客户端的主机名,然后到mainfest里面对应的node配置,然后对这段内容进行解析,facter发送过来的信息可以作为变量进行处理,node牵涉到的代码才可解析,其他不解析,解析过程分为:语法检查、然后生成伪代码,然后把伪代码发送给客户端。
- 客户端接收到伪代码就会执行,然后执行结果发送给服务端。
- 服务端把客户端执行结果写入日志。
2、安装
puppet需要ruby支持Ruby支持。
puppet要求主机有完整的域名,如果没有DNS提供域名的话,可以在机器上设置主机名,注意需要先设置主机名,再安装Puppet。因为Puppet安装时,会把主机名写入证书,客户端和服务端通信需要这个证书。
# 修改主机名
hostnamectl set-hostname master
#配置域名解析
vim /etc/hosts
192.168.200.11 master.weikuo.com
192.168.200.12 node.weikuo.com
> hostname master.weikuo.com
> vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=master.weikuo.com
GATEWAY=192.168.50.1
vim /etc/resolv.conf
search localdomain # 需要注释
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭SELinux安全模式
setenforce 0
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
#配置时间同步
yum install -y ntpdate
ntpdate ntp1.aliyun.com
#配置CentOS镜像源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
#更新YUM源
yum clean all
yum makecache
#升级系统
yum update
# 安装阿里云仓库
rpm -ivh https://mirrors.aliyun.com/puppet/yum/puppetlabs-release-el-7.noarch.rpm
# 主节点服务端安装
yum install -y puppet puppet-server facter
# 启动服务
systemctl start puppetmaster
systemctl enable puppetmaster
# puppetmaster服务开启后,默认监听TCP 8140
# 客户端安装
yum install puppet -y
3、申请证书命令
Puppet客户端与服务器端是通过SSL隧道通信,客户端安装完成,需要向服务器端申请证书。
Puppetmaster第一次启动会自动生成证书自动注册自己。
证书路径:/var/lib/puppet/ssl
客户端申请证书
puppet agent --server 服务端主机名 --test
Exiting; no certificate found and waitforcert is disabled # 服务端没有同意证书
请求证书会存放在服务端的:/var/kib/puppet/ssl/ca/request,签发完毕会删除。
服务器端颁发证书
puppet cert -s 客户端主机名
puppet cert --list # 查看申请证书的客户端主机名
puppet cert -s # 给指定主机颁发证书
puppet cert --sign --all # 签发所有证书
客户端取回通过的证书
puppet agent --server 服务端主机名 --test
服务端自动签发证书
vim /etc/puppet/autosign.conf
*ewin.com # 所以来自ewin.com的机器,都自动签发证书
注销证书
puppet cert revoke 客户端主机名
puppet cert revoke --all
重装服务端
yum remove puppet-server puppet -y
rm -rf /etc/puppet
rm -rf /var/lib/puppet
yum install puppet-server -y
4、第一个案例
服务器端保存着所有对客户端服务器的配置代码,在puppet里叫manifest,客户端下载manifest之后,可以根据manifest对服务器进行配置,如软件包管理、用户管理和文件管理。
默认服务器的manifest目录在/etc/puppet下,只需要在该目录下创建site.pp文件,然后写入配置,客户端就可以和服务端在同步时,检查该文件,然后做相关的同步。
# 服务端
vim /etc/puppet/manifest/site.pp
node "base02.weikuo.com" {
file {
"/tmp/test2.txt": content => "hello,Puppet";
}
}
node default {
# default是所有客户端都可以
file {
"/tmp/test2.txt": content => "hello,Puppet";
}
}
# 客户端
puppet agent --server base01.weikuo.com --test
5、各种资源的案例
1)、file
负责文件管理。
file {
"/tmp/test2.txt": content => "hello,Puppet";
}
# 新建文件test2.txt,且内容为hello,Puppet。
file {
"/tmp/nginx_install.sh": # 目标地址
source => "puppet://服务端主机名/files/nginx_install.sh", # 源地址
group => root,
owner => root,
mode => "755"
}
# 服务端
> vim /etc/puppet/fileserver.conf
[files]
path /etc/puppet/files/
allow *
> mkdir /etc/puppet/files
> touch nginx_install.sh
>
2)、package
软件包的安装管理。
package {
["screen","ntp"]: ensure => "installed";
"pppoe": ensure => "absent";
}
# 安装screen和ntp,卸载pppoe
3)、service
系统服务管理。
service {
"sshd": ensure => running;
"nfs": ensure => stopped;
}
# 启动sshd,停止ntp服务。
4)、cron
配置自动任务计划
cron {
"ntpdate": command =>"/usr/sbin/ntpdate pool.ntp.org",
user => root,
hour => 0,
minute => 0,
}
# 0时0分 时间同步命令,设置crontab
0 0 * * * /usr/sbin/ntpdate pool.ntp.org
5)、exec
远程执行运行命令。
# 远程执行命令
exec {
"/tmp/nginx_install.sh":
cwd => "/tmp",
user => root,
path =>["/usr/bin","/usr/sbin","bin","/bin/sh"],
}
# 某个文件发生变化 执行命令
exec {
"sysctl refresh kernel config":
path => ["/usr/bin","/usr/sbin","bin","/bin/sh"],
command => "/sbin/sysctl -p",
subscribe => File["/etc/sysctl.conf"],
refreshonly => true
}
6、Puppet日常管理和配置
6.1、自动认证
前提是配置好hosts或者内部的DNS服务器。然后在/etc/puppet/puppet.conf里[main]添加autosign = true****,重启puppetmaster即可。
6.2、重新申请证书
客户端操作
rm -rf /var/lib/puppet/ssl/*
服务端操作
puppet cert --clean 客户端主机名
puppet cert --clean --all
6.3、客户端自动同步
vim /etc/sysconfig/puppet
PUPPET_SERVER=base01.weikuo.com
PUPPET_PORT=8140
PUPPET_LOG=/var/log/puppet/puppet.log
PUPPET_EXTRA_OPTS=--waitforcert=500
重启puppet即可。会每半小时和服务端同步一次。
修改同步时间
vim /etc/puppet/puppet.conf的[agent]部分。
runinterval=60 // 每60秒同步一次
6.4、服务器主动推送
服务端使用puppetrun命令可以告知客户端进行同步。
在服务端的配置文件agent段,添加
listen = true // 让puppet监听8139端口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)