下面从概念、架构、核心对象、典型使用流程、实战示例、最佳实践和常见坑几个层面,系统讲解如何用 SaltStack(Salt) 实现自动化运维。
SaltStack(简称 Salt) 是一个:
可以类比为:
| 组件 | 作用 |
|---|---|
| Salt Master | 控制中心,下发命令和状态 |
| Salt Minion | 被管理节点(服务器) |
| Grains | 静态主机信息(OS、CPU、IP) |
| Pillar | 敏感/动态配置数据 |
| State | 配置管理(声明式) |
| Module | 执行模块(cmd、pkg、service 等) |
| Returner | 返回执行结果 |
| Event / Reactor | 事件驱动自动化 |
✅ 批量执行命令
✅ 软件安装与配置
✅ 服务管理
✅ 文件分发
✅ 自动化扩容
✅ 环境一致性管理
✅ CI/CD 配合
yum install salt-master -y
systemctl enable salt-master
systemctl start salt-master
yum install salt-minion -y
编辑 /etc/salt/minion:
master: 192.168.1.10
id: web01
systemctl enable salt-minion
systemctl start salt-minion
Master 上查看待认证主机:
salt-key -L
接受所有:
salt-key -A
验证:
salt '*' test.ping
salt <target> <module> <function> [args]
# 查看磁盘
salt '*' cmd.run 'df -h'
# 安装 nginx
salt 'web*' pkg.install nginx
# 启动服务
salt 'web*' service.start nginx
salt -G 'os:CentOS' test.ping
salt -L 'web01,web02' test.ping
salt -E '^web\d+' test.ping
Salt 最核心的自动化能力
/srv/salt/
├── top.sls
├── nginx/
│ ├── init.sls
│ └── files/
│ └── nginx.conf
nginx:
pkg.installed:
- name: nginx
service.running:
- name: nginx
- enable: true
- require:
- pkg: nginx
/etc/nginx/nginx.conf:
file.managed:
- source: salt://nginx/files/nginx.conf
- user: root
- group: root
- mode: 644
- require:
- pkg: nginx
base:
'web*':
- nginx
salt '*' state.apply
✅ 幂等
✅ 可重复执行
✅ 实际就是“自动化运维”
pillar_roots:
base:
- /srv/pillar
# /srv/pillar/nginx.sls
nginx_port: 80
# top.sls
base:
'*':
- nginx
- template: jinja
- context:
port: {{ pillar['nginx_port'] }}
salt '*' grains.items
{% if grains['os'] == 'CentOS' %}
pkg: nginx
{% endif %}
# /etc/salt/master.d/reactor.conf
reactor:
- 'salt/minion/*/start':
- /srv/reactor/auto_init.sls
# auto_init.sls
init:
local.state.apply:
- tgt: {{ data['id'] }}
✅ 实现“自动上线即部署”
| 场景 | 实现方式 |
|---|---|
| 批量部署服务 | state.apply |
| 配置文件下发 | file.managed |
| 应用发布 | cmd + state |
| 自动扩容 | Reactor + Cloud |
| 权限合规 | state + pillar |
| CI/CD | Jenkins + salt-api |
✅ 使用 State 而非 ad-hoc 命令
✅ 使用 Jinja + Pillar 管理差异
✅ 版本控制 Salt 配置(Git)
✅ 分环境(dev/test/prod)
✅ 控制 Master 权限
✅ 结合 salt-api 对外暴露接口
| 对比 | SaltStack | Ansible |
|---|---|---|
| 架构 | Master–Minion | Agentless |
| 速度 | ⭐⭐⭐⭐ | ⭐ |
| 复杂度 | 高 | 低 |
| 适合 | 大规模、高频 | 中小规模 |
1️⃣ 先熟悉 远程执行
2️⃣ 再学会写 State
3️⃣ 再引入 Pillar + Grains
4️⃣ 最后做 事件驱动 & CI/CD
如果你愿意,我可以:
只要告诉我你的具体使用场景即可。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。