Puppet 是典型 C/S 架構(星型拓撲)的配置管理工具。所有 Agent 定期(預設 30 分鐘)連線 Master 拉取最新配置並強制套用,執行結果回報 Master。本文記錄在 RedHat 6 環境下,從安裝、認證、自動簽名、資源定義到實際驗證的完整流程。
| 角色 | IP | 主機名 | 關鍵服務 |
|---|---|---|---|
| Master | 172.25.254.2 | vm2.example.com | puppetmaster (TCP 8140) |
| Agent1 | 172.25.254.3 | vm3.example.com | puppet agent |
| Agent2 | 172.25.254.4 | vm4.example.com | puppet agent |
前置條件: 全網主機名解析正確、時間同步(NTP),否則 SSL 憑證驗證失敗。
# 安裝核心套件(依版本調整 RPM 路徑) yum install -y puppet-server-3.8.1 facter ruby-augeas rubygems rubygem-json ruby-shadow puppet hiera # 啟動服務 /etc/init.d/puppetmaster start # 驗證端口 netstat -anltp | grep 8140 # tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN 1118/ruby
yum install -y puppet facter ruby-shadow hiera ruby-augeas rubygems rubygem-json # 發起認證請求 puppet agent --server vm2.example.com --test # 首次會顯示 "Exiting; no certificate found and waitforcert is disabled"
Master 端查看待簽名請求:
puppet cert list # "vm3.example.com" (SHA256) xx:xx:...
簽名核准:
puppet cert sign vm3.example.com # 或全部簽名:puppet cert sign --all
Agent 再次執行 puppet agent --test 即可套用配置。
# Master 端 vim /etc/puppet/puppet.conf # [main] 區段下添加 autosign = true # 建立 autosign.conf echo "*.example.com" > /etc/puppet/autosign.conf /etc/init.d/puppetmaster reload
Agent 端直接 puppet agent --server vm2.example.com --test 即自動通過。
# Master puppet cert clean vm3.example.com # Agent rm -rf /var/lib/puppet/ssl/* puppet agent --server=puppet.example.com
Puppet 程式入口為 /etc/puppet/manifests/site.pp,所有資源由此調用。
file { "/mnt/puppet-3.8.1-1.el6.noarch.rpm":
ensure => file,
source => "puppet:///files/puppet-3.8.1-1.el6.noarch.rpm",
mode => "0600",
owner => "root",
}
Master 建立 /etc/puppet/files/ 目錄放置源檔案,並在 /etc/puppet/fileserver.conf 開放:
[files] path /etc/puppet/files allow *
package { "vsftpd":
ensure => present, # installed/absent
}
service { "vsftpd":
ensure => running,
enable => true,
subscribe => File["/etc/vsftpd/vsftpd.conf"], # 配置變更自動 reload
}
file { "/etc/vsftpd/vsftpd.conf":
source => "puppet:///files/vsftpd.conf",
mode => "0600",
notify => Service["vsftpd"],
}
user { "xp":
ensure => present,
uid => 900,
home => "/home/test",
shell => "/bin/bash",
managehome => true,
password => '$6$salt$hashed_password', # 使用 openssl passwd -6 生成
}
cron { "echo-date":
command => "/bin/echo `/bin/date` >> /tmp/echo",
user => "root",
hour => ["2-4"],
minute => "*/10",
}
Agent 端執行 puppet agent --test 觀察輸出,確認檔案、套件、服務、用戶、crontab 均依預期變更。Puppet 以聲明式 DSL 描述「期望狀態」,配合冪等性執行,是自動化運維、基礎設施即代碼(IaC)的基石工具。建議進階學習 Hiera 數據分離、Roles/Profiles 模式、PuppetDB 整合與 r10k 環境部署。