下面用实战视角讲清楚:怎样用 Chef 批量管理服务器。内容从“整体思路 → 核心组件 → 典型流程 → 示例 → 最佳实践”逐步展开。
Chef 的本质是:
把服务器配置写成代码(Cookbook / Recipe),然后批量推送到多台服务器执行。
批量管理的关键点:
knife、chef、berkshelfchef-client
Workstation
|
| 写 Cookbook
|
v
Chef Server
|
| 分发
v
多台 Node(自动执行)
chef generate cookbook my_nginx
cd my_nginx
recipes/default.rb
package 'nginx' do
action :install
end
service 'nginx' do
action [:enable, :start]
end
knife cookbook upload my_nginx
knife node run_list add node1 'recipe[my_nginx]'
knife node run_list add node2 'recipe[my_nginx]'
knife node run_list add node3 'recipe[my_nginx]'
Run List = 这台服务器“该干什么”
chef-client
或设置定时任务(生产常用):
*/15 * * * * /usr/bin/chef-client > /dev/null 2>&1
当服务器变多,不要一台台加 Run List
roles/web.rb
name 'web'
run_list(
'recipe[my_nginx]',
'recipe[base]'
)
上传:
knife role from file web.rb
批量应用:
knife node run_list add node1 'role[web]'
knife node run_list add node2 'role[web]'
✅ 以后改 Role,所有 web 服务器自动生效
例如:
name 'prod'
default_attributes(
nginx: {
worker_processes: 8
}
)
适合:
加密示例:
knife data bag create secrets
data_bags/secrets/db.json
{
"id": "db",
"password": "supersecret"
}
Recipe 中使用:
db = data_bag_item('secrets', 'db')
Role → Node
Environment + Role → Node
chef-provisioning✅ 所有配置进代码,不手工改服务器
✅ Cookbook 版本化(Berksfile / Policyfile)
✅ 小 Recipe,单一职责
✅ 先 test kitchen 测试,再上生产
✅ Chef Client 定时跑,保证一致性
如果你愿意,我可以:
你现在是想用在 公司生产环境 还是 学习/实验?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。