Chef 的优化可以从 配置管理效率、运行速度、资源占用、可维护性 等多个维度入手。下面按常见场景给你一套实用优化建议,从基础到进阶。
问题:chef-client 运行慢
优化手段:
execute / bash 资源not_if / only_if 控制执行条件execute "restart nginx" do
command "systemctl restart nginx"
action :run
only_if { File.exist?("/etc/nginx/nginx.conf") }
end
service "nginx" do
action :reload
end
chef-client 间隔运行避免频繁运行:
chef-client -i 3600 # 每小时一次
或 systemd timer / cron 控制频率。
原则:
一个 Cookbook 只做一件事
✅ 推荐结构:
base:系统基础nginxmysqlapp❌ 不推荐:
attributes避免覆盖混乱:
default['nginx']['port'] = 80
override['nginx']['port'] = 8080 # 慎用
✅ 优先级建议:
default < normal < override < force_override
chefignore减少上传无用文件:
# chefignore
.git
*.md
test/
spec/
search 使用search 很慢,尤其在节点多时。
❌ 不推荐:
search(:node, "role:db")
✅ 替代方案:
node['roles']wrapper cookbook避免:
node.default['big_hash'] = huge_data
影响:
适用于自建 Chef Server:
# chef-server.rb
opscode_erchef['db_pool_size'] = 20
postgresql['max_connections'] = 200
nginx['worker_processes'] = 4
nginx['worker_connections'] = 10240
Policyfile 替代 Environmentwhy-run 模式调试chef-client --why-run
避免盲目修改。
lazy 延迟求值template "/etc/app.conf" do
variables(
port: lazy { node['app']['port'] }
)
end
| 问题 | 优化方式 |
|---|---|
| chef-client 慢 | 减少资源、条件控制 |
| Cookbook 臃肿 | 拆分、wrapper |
| search 慢 | 减少 search |
| Server 卡 | PostgreSQL / Erlang 参数 |
| 上传慢 | chefignore |
✅ 一次生效,不再重复执行
✅ Cookbook 单一职责
✅ 少用 search,少用 override
✅ Chef Client 不要高频运行
如果你能告诉我:
我可以给你针对性的优化配置示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。