大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
Puppet
Puppet 是最早大规模商用的 声明式配置管理 平台之一,以 Puppet DSL(类资源模型) 和严格的 Master-Agent + PuppetDB 架构著称。与 dcp-chef 中的 Chef/Salt 并列,Puppet 在电信、金融等传统企业数据中心仍有大量部署。本课帮助你在 /roadmaps/devops 的 configuration-management 节点上理解 Catalog 编译、RAS 模型、Hiera 分层数据;基础设施创建仍归 terraform-essentials,容器编排见 kubernetes-essentials。
学习目标
- 读懂 Puppet Manifest、Class、Define、Resource 基本语法
- 理解 Master 编译 Catalog → Agent 应用 的完整流程
- 会用 Hiera 5 按环境/角色注入参数,避免硬编码
Master-Agent 工作流
Manifest + Hiera 数据
→ Puppet Master 编译 Catalog(每台 Node 一份)
→ Agent (puppet agent) 拉取 Catalog
→ 对比当前状态,应用 Resource 变更
→ 上报 Report → PuppetDB / Puppet Enterprise Console
Agent 默认 30 分钟 拉取一次;也可 puppet agent -t 手动触发。Catalog 是 纯声明式资源列表,不含命令式脚本逻辑——复杂逻辑应拆到 自定义 Type/Provider 或外部模块。
Manifest 示例
# manifests/site.pp
node 'coderoadmap-web-01' {
include nginx
include coderoadmap::backend
}
# modules/nginx/manifests/init.pp
class nginx {
package { 'nginx':
ensure => installed,
}
service { 'nginx':
ensure => running,
enable => true,
require => Package['nginx'],
}
file { '/etc/nginx/conf.d/coderoadmap.conf':
ensure => file,
content => template('nginx/coderoadmap.conf.erb'),
notify => Service['nginx'],
}
}
# hiera.yaml(Hiera 5 层级示例)
version: 5
defaults:
datadir: data
data_hash: yaml_data
hierarchy:
- name: "Per-node"
path: "nodes/%{trusted.certname}.yaml"
- name: "Environment"
path: "envs/%{server_facts.environment}.yaml"
- name: "Common"
path: "common.yaml"
# data/common.yaml
coderoadmap::backend::port: 8080
coderoadmap::backend::db_host: '127.0.0.1'
Puppet 生态要点
- Forge 模块:
puppet module install puppetlabs-nginx复用社区模块 - Roles & Profiles 模式:Role 描述「这台机器是什么」;Profile 描述「某技术栈怎么配」
- Puppet Enterprise:RBAC、编排、Impact Analysis;开源版用 Puppet Server + Foreman 也可搭建 GUI
与 devops-cloud-essentials 结合:Terraform 创建 VM 后,cloud-init 或 kickstart 安装 Agent 并注册 Master,CM 接管后续变更。
练习
- 写一个 Puppet Class,确保
mysql-server安装且mysqld运行,并用 Hiera 注入bind-address - 画出 CodeRoadMap 三台 VM(web / backend / db)的 Roles & Profiles 分层图
- 对比 Puppet Catalog 与 Chef Run List 在「编译时机、资源依赖表达」上的异同
小结
Puppet = Master 编译 Catalog + Agent 声明式收敛 + Hiera 分层数据。 适合需要强审计、RBAC 与大规模 Node 分类的企业 CM。下一课转向 OpenShift 企业级 K8s 平台。