下面用通俗 + 示例的方式讲清楚:怎样用 Chef 来保证服务器配置的一致性(Configuration Consistency)。
Chef 的核心原则是:
“服务器应该始终处于你描述的理想状态”
你不是写“怎么做”,而是写:
✅ 这台机器 应该是什么样
Chef 会:
这就是声明式(Desired State)。
描述“要什么”
package 'nginx' do
action :install
end
service 'nginx' do
action [:enable, :start]
end
➡ 不管机器现在有没有 nginx,Chef 都会确保:
一组相关 Recipe + 配置
例如:
cookbooks/
└── nginx/
├── recipes/
│ └── default.rb
└── templates/
被管理的服务器
每个 Node 都有:
file '/etc/motd' do
content "Authorized access only\n"
end
不管谁改了 /etc/motd,下次 Chef 运行都会还原。
chef-client
# 每 30 分钟
*/30 * * * * /usr/bin/chef-client
➡ 漂移(配置被改)会被自动纠正
name "web"
run_list "recipe[nginx]"
default['nginx']['port'] = 80
不同环境:
# production
override['nginx']['port'] = 443
➡ 结构一致,参数可控
Chef 每一步都做:
例如:
✅ 这就是幂等性(Idempotent)
| 场景 | Chef 如何保证 |
|---|---|
| 有人手动改配置 | 下次运行还原 |
| 新服务器上线 | 自动变成标准状态 |
| 多台机器 | 同一 Cookbook |
| 环境差异 | Attribute 控制 |
✅ 所有变更走 Chef,不手工改服务器
✅ Cookbook 进 Git
✅ 测试用 Test Kitchen
✅ 生产前用 Chef Spec / InSpec 验证
用 Chef 保证配置一致 = 用代码定义服务器,并持续强制执行
如果你愿意,我可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。