文章总结: 本文详细介绍了Puppet自动化运维工具的安装配置与使用,涵盖Master与Agent部署、证书认证、清单编写、模块开发及Hiera数据管理。通过声明式语言实现服务器集群的统一配置管理,适合运维人员快速上手基础设施自动化,内容实操性强但属于基础入门教程。 综合评分: 65 文章分类: 安全培训,安全工具,安全建设
自动化运维工具Puppet的详细培训教程
原创
刘军军 刘军军
运维星火燎原
2026年2月9日 00:00 河北
一、Puppet概述
Puppet是一款开源的配置管理和基础设施自动化工具,通过声明式配置语言定义系统期望状态,自动确保实际状态与期望状态一致。适用于大规模服务器集群的统一配置管理、应用部署等场景。
二、环境准备与安装
- 安装Puppet Master(以CentOS 7为例)
- 步骤1:添加Puppet YUM源
sudo rpm -ivh https://yum.puppet.com/puppet6-release-el-7.noarch.rpm
sudo yum update -y
- 步骤2:安装Puppetserver
sudo yum install puppetserver -y
- 步骤3:配置Puppetserver内存
编辑/etc/sysconfig/puppetserver,调整JVM内存(根据实际配置):
JAVA_ARGS="-Xms2g -Xmx2g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
- 步骤4:启动Puppetserver并设置开机自启
sudo systemctl start puppetserver
sudo systemctl enable puppetserver
2. 安装Puppet Agent(以CentOS 7为例)
- 步骤1:添加Puppet YUM源
同Master步骤1。
- 步骤2:安装puppet-agent
sudo yum install puppet-agent -y
- 步骤3:配置Agent连接Master
编辑/etc/puppetlabs/puppet/puppet.conf:
[main]
server = puppetmaster.example.com # Puppet Master的域名或IP
runinterval = 30m # 每30分钟检查一次配置差异
[agent]
environment = production # 环境名称,默认生产环境
- 步骤4:启动Agent并设置开机自启
sudo systemctl start puppet
sudo systemctl enable puppet
三、证书认证与通信
- 查看待签名的Agent证书
在Puppet Master上执行:
sudo puppetserver calist
输出示例:
+ "webserver-01.example.com" (SHA256) 5A:6B:7C:8D:9E:0F:1A:2B:3C:4D:5E:6F:7G:8H:9I:0J
- 签名Agent证书
- 签名所有待认证的Agent
sudo puppetserver casign --all
- 签名单个Agent
sudo puppetserver casign --certname webserver-01.example.com
四、编写Puppet清单(Manifest)
Puppet清单是定义系统配置的核心文件,使用.pp后缀。
示例:安装并启动Nginx服务
# 文件路径:/etc/puppetlabs/code/environments/production/manifests/site.pp
node 'webserver-01.example.com' { # 匹配Agent的certname
# 确保Nginx包存在
package { 'nginx':
ensure => present,
}
# 确保Nginx服务运行并开机自启
service { 'nginx':
ensure => running,
enable => true,
require => Package['nginx'], # 依赖Nginx包安装
}
}
五、应用配置到Agent
- 手动触发Agent应用配置
在Agent主机上执行:
sudo puppet agent -t # 手动触发Agent检查配置并应用
- 验证配置生效
登录Agent主机,检查Nginx状态:
systemctl status nginx
若输出显示Nginx已启动且开机自启,则配置生效。
六、Puppet模块开发
Puppet模块遵循标准结构,便于代码复用和管理。
- 模块结构示例
mynginx/
├── files # 存放静态文件
│ └── nginx.conf
├── manifests
│ ├── init.pp # 模块入口文件
│ └── install.pp
├── templates # 存放模板文件
│ └── nginx.conf.erb
└── metadata.json # 模块元数据
- 示例:编写安装配置Nginx的模块
- 步骤1:创建模块
sudo puppet modulegeneratemynginx # 生成mynginx模块骨架
- 步骤2:编辑模块入口文件manifests/init.pp
classmynginx{
include mynginx::install # 引入安装类
include mynginx::config # 引入配置类
include mynginx::service # 引入服务类
}
- 步骤3:编写安装类manifests/install.pp
class mynginx::install {
package { 'nginx':
ensure => present,
}
}
- 步骤4:编写配置类manifests/config.pp
class mynginx::config {
file { '/etc/nginx/nginx.conf':
ensure => file,
source =>'puppet:///modules/mynginx/nginx.conf', # 引用files目录下的文件
owner => 'root',
group =>'root',
mode =>'0644',
require => Package['nginx'],
}
}
- 步骤5:编写服务类manifests/service.pp
class mynginx::service {
service { 'nginx':
ensure => running,
enable =>true,
require => File['/etc/nginx/nginx.conf'],
}
}
七、Hiera数据管理
Hiera用于集中管理配置数据,实现配置与代码分离。
- 安装Hiera
sudo yum install hiera -y # CentOS/RHEL
# Ubuntu/Debian:sudo apt install hiera
- 配置Hiera
编辑/etc/puppetlabs/puppet/hiera.yaml:
---
version: 5
defaults:
datadir: /etc/puppetlabs/code/environments/%{environment}/hieradata
data_hash: yaml_data
hierarchies:
- name: "Per-node data"
path: "nodes/%{trusted.certname}.yaml"
- 使用Hiera管理配置
例如,在hieradata/nodes/webserver-01.example.com.yaml中定义:
nginx::port: 8080 # 覆盖模块中Nginx的默认端口
在模块的manifests/config.pp中使用Hiera取值:
classmynginx::config {
$nginx_port = hiera('nginx::port', 80) # 默认值80
file { '/etc/nginx/nginx.conf':
content => template('mynginx/nginx.conf.erb'),
# 模板中可使用$nginx_port变量
}
}
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:运维星火燎原 刘军军 刘军军《自动化运维工具Puppet的详细培训教程》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论