Chef 是一个基于代码的自动化配置管理工具(Infrastructure as Code),常用于服务器初始化、应用部署、配置一致性管理等场景。下面从概念 → 安装 → 实战示例 → 运维建议系统讲一下。
| 概念 | 说明 |
|---|---|
| Chef Server | 中央管理节点,存放 Cookbook、Node 信息 |
| Chef Workstation | 你写代码、测试、上传 Cookbook 的机器 |
| Chef Client | 被管理的服务器,定期向 Server 拉取配置并执行 |
| Cookbook | 配置管理的“包”,包含 Recipe、属性、模板等 |
| Recipe | 具体执行逻辑(用 Ruby 写) |
| Resource | 操作单元(package / service / file / template 等) |
| Node | 被管理的服务器对象 |
| Role / Environment | 用于分组和区分环境(prod / test) |
Workstation
|
| knife upload
v
Chef Server
|
| chef-client run
v
Node1 / Node2 / Node3
# macOS
brew install chef-workstation
# Ubuntu
curl -L https://omnitruck.chef.io/install.sh | sudo bash -s -- -P chef-workstation
验证:
chef --version
knife --version
chef generate cookbook my_server
cd my_server
目录结构:
my_server/
├── recipes/
│ └── default.rb
├── attributes/
├── templates/
└── metadata.rb
recipes/default.rb
package 'nginx' do
action :install
end
service 'nginx' do
action [:enable, :start]
end
template '/etc/nginx/nginx.conf' do
source 'nginx.conf.erb'
notifies :reload, 'service[nginx]'
end
templates/default/nginx.conf.erb
worker_processes <%= node['my_server']['worker_processes'] %>;
attributes/default.rb
default['my_server']['worker_processes'] = 4
knife cookbook upload my_server
knife node run_list add node1 'recipe[my_server]'
sudo chef-client
user 'deploy' do
home '/home/deploy'
shell '/bin/bash'
action :create
end
cron 'backup' do
minute '0'
hour '2'
command '/usr/bin/backup.sh'
end
cookbook_file '/etc/foo.conf' do
source 'foo.conf'
mode '0644'
end
| 对比项 | Shell | Chef |
|---|---|---|
| 幂等性 | ❌ | ✅ |
| 可版本控制 | ❌ | ✅ |
| 大规模管理 | 难 | 易 |
| 状态一致性 | 弱 | 强 |
chef-client -o 做临时调试✅ 适合:
❌ 不适合:
如果你愿意,我可以:
你现在是打算用 Chef 管什么系统?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。