Puppet
puppet;Master-Agent 模型。
25 分钟
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复用社区模块