CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
DevOps 配置与平台/课时/Chef 与 Salt
RawBlame
课时目录12 节

DevOps 配置与平台

  1. 01配置管理概览
  2. 02Chef 与 Salt
  3. 03Puppet
  4. 04OpenShift
  5. 05Azure 平台
  6. 06云原生工具
  7. 07操作系统发行版
  8. 08平台搭建方法论
  9. 09代理与负载均衡
  10. 10云函数
  11. 11数据与平台设计
  12. 12综合练习

Chef 与 Salt

chef、salt;声明式配置。

30 分钟

Chef 与 Salt

Chef 与 Salt 都是成熟的 Master-Agent(或 Masterless) 配置管理工具:Chef 以 Ruby DSL Recipe 著称,Salt 以 YAML State + 高速消息总线 见长。二者都支持 声明式 描述期望状态,在企业裸机与混合云 VM 场景仍广泛使用。本课衔接 dcp-intro 的 CM 概念,并与 terraform-essentials 创建的 VM 对接;容器层见 kubernetes-essentials,云选型见 devops-cloud-essentials。

学习目标

  • 读懂 Chef Cookbook / Recipe / Resource 结构与 Chef Server 工作流
  • 理解 Salt State SLS、Grain、Pillar 与 salt '*' state.apply 推送模型
  • 对比 Chef 与 Salt 在语言、扩展性、学习曲线上的差异

Chef 核心模型

# recipes/default.rb — 安装并启动 Nginx
package 'nginx' do
  action :install
end

service 'nginx' do
  action [:enable, :start]
  subscribes :restart, 'template[/etc/nginx/nginx.conf]', :delayed
end

template '/etc/nginx/nginx.conf' do
  source 'nginx.conf.erb'
  variables(server_name: 'coderoadmap.local')
  notifies :restart, 'service[nginx]', :delayed
end
# metadata.rb 片段
name 'coderoadmap_nginx'
version '1.0.0'
depends 'nginx', '~> 9.0'

Chef Infra Server 存 Cookbook 与 Node 对象;Agent(chef-client)周期拉取 Run List 并收敛。Test Kitchen + InSpec 常用于 Cookbook 测试。

Salt 核心模型

# salt/nginx/init.sls
nginx_pkg:
  pkg.installed:
    - name: nginx

nginx_service:
  service.running:
    - name: nginx
    - enable: True
    - require:
      - pkg: nginx_pkg

nginx_config:
  file.managed:
    - name: /etc/nginx/conf.d/coderoadmap.conf
    - source: salt://nginx/files/coderoadmap.conf.jinja
    - template: jinja
    - context:
        upstream: "{{ pillar['backend_host'] }}:8080"
    - watch_in:
      - service: nginx_service
# pillar/coderoadmap.sls(敏感/环境差异放 Pillar)
backend_host: 127.0.0.1
env: staging

Salt Master 通过 ZeroMQ 或 TCP 与 Minion 通信;Pillar 类似 Chef 的 data bag / role 变量,Grain 是 Minion 自动采集的静态事实(OS、IP)。

Chef vs Salt 速查

ChefSalt
DSLRubyYAML + Jinja
架构Chef Server + clientSalt Master + Minion
强项复杂逻辑、生态 Cookbook批量命令、远程执行快
无 Masterchef-solo / chef-zerosalt-ssh

在 /roadmaps/devops 的 configuration-management 分支,Chef/Salt 代表 「重型 CM + 丰富社区模块」 路线;下一课 Puppet 则是另一种 Master-Agent 范式。

练习

  • 用 Chef Recipe 或 Salt SLS 描述「安装 OpenJDK 17 + 创建 coderoadmap 系统用户」
  • 说明 CodeRoadMap backend 的 application.yml 更适合放 Chef template 还是 Salt Pillar,并写出理由
  • 对比 chef-client 周期拉取与 salt '*' state.apply 主动推送的运维场景差异

小结

Chef 用 Ruby Recipe 表达资源;Salt 用 YAML State + Pillar 做高速收敛。 二者都是声明式 CM 的代表,选型看团队语言栈与批量运维需求。下一课深入 Puppet 的 Manifest 与 Master-Agent 模型。

加载本节练习…
← 上一课配置管理概览下一课 →Puppet