Puppet的部署和使用
Puppet 是什么?
技术层面:Puppet 是什么?
简单来说,Puppet 是一款自动化的集中配置管理系统。
如果把服务器管理比作带兵打仗,Puppet 就是那个**“总指挥官”**。我们不需要亲自跑到每一个士兵(服务器)面前去教他怎么站军姿、怎么拿枪,你只需要坐在指挥部(Master 节点)写好“军规”(代码),士兵们就会自动按照军规来要求自己。
核心概念:
- 它解决了什么问题?
在没有 Puppet 之前,如果我们有 100 台服务器要安装 Nginx,可能需要写个 Shell 脚本,然后用 for 循环一台台去 SSH 登录执行。这种方式很累,而且容易出错(比如某台机器脚本跑了一半报错了可能还不知道)。
Puppet 只需要写一次配置(site.pp),然后所有机器都会自动变成我们想要的样子。
- 它的工作模式:拉模式 (Pull)
Puppet 采用的是**客户端/服务端(C/S)**架构。
-
- Master:是发号施令的中心,存储着配置代码。
- Agent:是干活的苦力。它们每隔一段时间(默认 30 分钟)会主动去问 Master:“老大,我有啥新任务吗?”
- 所以,我们只需要在 Master 上改好代码,Agent 到了时间点自然会来“拉取”并执行。
- 它的核心魔法:幂等性
这是 Puppet 最厉害的地方。我们在 site.pp 里写的是**“期望状态”**(比如:确保 /tmp/hello.txt 存在)。
-
- 当我们运行
puppet agent -t时,Agent 会先检查:文件存在吗? - 如果存在:它什么都不做(省事)。
- 如果不存在:它才去创建(干活)。
- 如果被删了:下次运行时,它发现没了,又会自动补上(自愈)。
- 当我们运行
这保证了无论运行多少次,系统的状态永远和你写的一致,不会像 Shell 脚本那样重复执行导致报错。
语言层面:Puppet 的原意
跳出技术圈,Puppet 这个英语单词的本意是:
- 木偶、傀儡:指那种用线提着的、或者戴在手上的玩偶(比如《木偶奇遇记》)。
- 引申义:指受他人操纵的人或组织(比如“傀儡政府”)。
为什么软件叫这个名字?
让系统管理员像操纵木偶一样,轻松地控制成百上千台服务器,让它们乖乖听话,按照既定的剧本(代码)行动。
好的,了解清楚什么是Puppet后,我们可以在服务器上搭建 Puppet 的 Master-Agent 架构。
📋 环境规划
|
角色 |
主机名 |
IP地址 |
|
Puppet Master |
dsg58 |
192.168.1.58 |
|
Puppet Agent |
dsg59 |
192.168.1.59 |
|
Puppet Agent |
dsg60 |
192.168.1.60 |
|
Puppet Agent |
dsg61 |
192.168.1.61 |
🚀 开始部署
在所有四台服务器上执行 第一步 和 第二步 的操作。
第一步:基础环境准备
- 配置主机名和 hosts 解析
所有节点必须能通过主机名互相访问。
-
- 在 Master 节点 (dsg58) 上执行:
hostnamectl set-hostname dsg58
cat >> /etc/hosts <<EOF
192.168.1.58 dsg58
192.168.1.59 dsg59
192.168.1.60 dsg60
192.168.1.61 dsg61
EOF
-
- 在 Agent 节点 (dsg59, dsg60, dsg61) 上分别执行:
(以 dsg59 为例)
hostnamectl set-hostname dsg59
cat >> /etc/hosts <<EOF
192.168.1.58 dsg58
192.168.1.59 dsg59
192.168.1.60 dsg60
192.168.1.61 dsg61
EOF
- 关闭防火墙和 SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- 同步时间
Puppet 依赖 SSL 证书进行通信,时间不同步会导致证书验证失败。
yum install -y ntpdate
ntpdate ntp.aliyun.com
- 安装 Puppet 官方源
rpm -Uvh https://yum.puppet.com/puppet-release-el-7.noarch.rpm
第二步:安装 Puppet 软件
- 在 Master 节点 (dsg58) 上安装 Puppet Server:
yum install -y puppetserver
注意:Puppet Server 默认需要 2GB 内存。如果你的服务器内存较小,可能会导致启动失败。可以编辑/etc/sysconfig/puppetserver文件,将JAVA_ARGS参数调整为-Xms512m -Xmx512m。
- 在所有 Agent 节点 (dsg59, dsg60, dsg61) 上安装 Puppet Agent:
yum install -y puppet-agent
第三步:配置 Puppet Master
- 编辑 Master 配置文件
在 Master 节点 (dsg58) 上,编辑 /etc/puppetlabs/puppet/puppet.conf 文件,确保 [master] 部分配置如下:
[master]
certname = dsg58
server = dsg58
certname 是 Master 的证书名称,server 指定了 Master 自己的主机名。
- 启动 Puppet Server 服务
systemctl start puppetserver
systemctl enable puppetserver
第四步:配置 Puppet Agent
- 编辑 Agent 配置文件
在所有 Agent 节点 (dsg59, dsg60, dsg61) 上,编辑 /etc/puppetlabs/puppet/puppet.conf 文件,确保 [agent] 部分配置如下:
[agent]
server = dsg58
runinterval = 15m
server 指向 Master 的主机名,runinterval 定义了 Agent 每隔多久(此处为15分钟)主动向 Master 拉取一次配置。
- 启动 Puppet Agent 服务
systemctl start puppet
systemctl enable puppet
第五步:设置环境变量
方法一:使用软链接(推荐,最简单)
创建一个链接,把 Puppet 的命令链接到系统默认的搜索路径 /usr/bin 中:
# (dsg58)执行
ln -s /opt/puppetlabs/bin/puppetserver /usr/bin/puppetserver
# (dsg59, dsg60, dsg61) 执行
ln -s /opt/puppetlabs/bin/puppet /usr/bin/puppet
方法二:配置环境变量(推荐,标准做法)
将 Puppet 的路径永久加入到环境变量中。
- 编辑环境配置文件:
echo 'export PATH=/opt/puppetlabs/bin:$PATH' >> /etc/profile
- 刷新环境变量(或者直接重新登录 SSH):
source /etc/profile
第六步:证书签名认证
Puppet 使用 SSL 证书来保证 Master 和 Agent 之间通信的安全性。
- 在 Agent 节点上触发证书请求
在 每一个 Agent 节点 (dsg59, dsg60, dsg61) 上执行一次:
puppet agent -t
这个命令会立即尝试连接 Master 并提交一个证书签名请求。

- 在 Master 节点上签署证书
回到 Master 节点 (dsg58),执行以下命令:
# 查看所有待签名的证书请求
puppetserver ca list
# 签署所有待签名的证书
puppetserver ca sign --all

第七步:创建配置清单并测试
创建一个简单的配置,让所有 Agent 节点都创建一个名为 /tmp/hello_puppet.txt 的文件。
在 Master 节点 (dsg58) 上创建配置清单目录和文件:
Puppet 官方推荐的默认标准路径:/etc/puppetlabs/code/environments/production/manifests
Puppet Master 默认的入口文件名:site.pp,也是约定俗成。这个 site.pp 就是 Puppet 的配置清单(Manifest),它用声明式语言描述了系统应该达到的“理想状态”。
mkdir -p /etc/puppetlabs/code/environments/production/manifests
cat > /etc/puppetlabs/code/environments/production/manifests/site.pp <<'EOF'
# 定义一个文件资源
file { '/tmp/hello_puppet.txt':
ensure => file,
content => "Hello from Puppet Master (dsg58)!\n",
mode => '0644',
}
EOF
只要site.pp文件保存了,不需要在 Master 上执行任何“运行”命令,Agent 就会自动来“拉取”并执行。
在 Agent 节点上进行测试
在 任意一个 Agent 节点上再次执行:
puppet agent -t
就可以看到输出信息了,表明 Agent 从 Master 获取了配置并应用了它。

验证结果
登录到任意 Agent 节点,检查文件是否创建成功:
cat /tmp/hello_puppet.txt
如果成功显示了 "Hello from Puppet Master (dsg58)!",恭喜你,Puppet 环境已经成功搭建并开始工作了!

Puppet常用命令
客户端常用命令 (在 Agent 节点执行)
|
命令 |
说明 |
常用场景 |
|
|
最常用。 |
强制 Agent 立即去 Master 拉取配置并执行,同时在屏幕打印详细日志。 |
|
|
模拟运行。 |
强烈推荐。在正式生效前,先看看 Puppet 打算做什么(比如它会告诉你它会删除哪个文件),但不会真的执行修改。 |
|
|
暂停 Agent。 |
维护期间使用。执行后,Agent 会停止自动运行,防止在修机器时它又改回去。 |
|
|
恢复 Agent。 |
维护结束后使用,恢复正常自动同步。 |
|
|
查看服务状态。 |
检查 Agent 服务是否在后台正常运行。 |
服务端常用命令 (在 Master 节点执行)
主要用于管理证书和查看报告。
|
命令 |
说明 |
常用场景 |
|
|
列出证书请求。 |
查看有哪些新加入的 Agent 在排队等待签名。 |
|
|
签署所有证书。 |
一次性允许所有新节点接入(测试环境常用)。 |
|
|
签署指定证书。 |
生产环境常用,只允许特定的节点接入。 |
|
|
清除证书。 |
如果某台机器重装了系统,证书对不上了,需要在 Master 上清除旧证书,以便重新签名。 |
调试与查询命令 (通用)
当写配置文件(Manifests)遇到问题时,用这些命令排查。
|
命令 |
说明 |
常用场景 |
|
|
语法检查。 |
在应用配置前,检查我们的 |
|
|
查看资源状态。 |
比如输入 |
|
|
查看帮助文档。 |
忘了某个资源(如 |
|
|
查看系统信息。 |
这是一个随 Puppet 安装的独立工具,可以查看当前机器的 IP、操作系统版本、内存大小等“事实”信息。 |
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)