温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用SaltStack实现自动化运维

发布时间:2026-07-02 10:27:50 来源:亿速云 阅读:108 作者:小樊 栏目:系统运维

下面从概念、架构、核心对象、典型使用流程、实战示例、最佳实践和常见坑几个层面,系统讲解如何用 SaltStack(Salt) 实现自动化运维。


一、SaltStack 是什么

SaltStack(简称 Salt) 是一个:

  • 基于 Python 的自动化运维与配置管理工具
  • 采用 Master–Minion 架构
  • 支持:
    • 远程执行
    • 配置管理(State)
    • 云资源管理
    • 事件驱动自动化

可以类比为:

  • Ansible + Puppet + 消息系统 的融合体
  • 执行速度非常快(基于 ZeroMQ)

二、SaltStack 核心架构

1️⃣ 核心组件

组件 作用
Salt Master 控制中心,下发命令和状态
Salt Minion 被管理节点(服务器)
Grains 静态主机信息(OS、CPU、IP)
Pillar 敏感/动态配置数据
State 配置管理(声明式)
Module 执行模块(cmd、pkg、service 等)
Returner 返回执行结果
Event / Reactor 事件驱动自动化

2️⃣ 通信机制

  • Master ↔ Minion:
    • 使用 ZeroMQ
    • 通过 AES 加密
  • Minion 主动连接 Master(长连接)

三、SaltStack 能做什么

✅ 批量执行命令
✅ 软件安装与配置
✅ 服务管理
✅ 文件分发
✅ 自动化扩容
✅ 环境一致性管理
✅ CI/CD 配合


四、SaltStack 自动化运维实施步骤

✅ 第一步:环境准备

1. 安装 Salt Master(控制端)

yum install salt-master -y
systemctl enable salt-master
systemctl start salt-master

2. 安装 Salt Minion(被控端)

yum install salt-minion -y

编辑 /etc/salt/minion:

master: 192.168.1.10
id: web01
systemctl enable salt-minion
systemctl start salt-minion

✅ 第二步:Minion 认证

Master 上查看待认证主机:

salt-key -L

接受所有:

salt-key -A

验证:

salt '*' test.ping

五、远程执行(自动化运维基础)

1️⃣ 基本执行模型

salt <target> <module> <function> [args]

2️⃣ 示例

# 查看磁盘
salt '*' cmd.run 'df -h'

# 安装 nginx
salt 'web*' pkg.install nginx

# 启动服务
salt 'web*' service.start nginx

3️⃣ Target(目标匹配)

salt -G 'os:CentOS' test.ping
salt -L 'web01,web02' test.ping
salt -E '^web\d+' test.ping

六、配置管理(State 系统)

Salt 最核心的自动化能力

1️⃣ State 文件结构

/srv/salt/
├── top.sls
├── nginx/
│   ├── init.sls
│   └── files/
│       └── nginx.conf

2️⃣ 定义状态(init.sls)

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

3️⃣ top.sls(入口文件)

base:
  'web*':
    - nginx

4️⃣ 应用状态

salt '*' state.apply

✅ 幂等
✅ 可重复执行
✅ 实际就是“自动化运维”


七、使用 Pillar 管理变量和敏感数据

1️⃣ 启用 Pillar

pillar_roots:
  base:
    - /srv/pillar

2️⃣ 定义 Pillar

# /srv/pillar/nginx.sls
nginx_port: 80
# top.sls
base:
  '*':
    - nginx

3️⃣ State 中引用

- template: jinja
- context:
    port: {{ pillar['nginx_port'] }}

八、Grains(主机事实)

查看 Grains

salt '*' grains.items

在 State 中使用

{% if grains['os'] == 'CentOS' %}
pkg: nginx
{% endif %}

九、事件驱动自动化(Reactor)

示例:Minion 上线自动执行 State

# /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'] }}

✅ 实现“自动上线即部署”


十、SaltStack 自动化运维典型场景

场景 实现方式
批量部署服务 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 vs Ansible(一句话)

对比 SaltStack Ansible
架构 Master–Minion Agentless
速度 ⭐⭐⭐⭐ ⭐
复杂度 高 低
适合 大规模、高频 中小规模

十三、入门建议

1️⃣ 先熟悉 远程执行
2️⃣ 再学会写 State
3️⃣ 再引入 Pillar + Grains
4️⃣ 最后做 事件驱动 & CI/CD


如果你愿意,我可以:

  • ✅ 给你一个 真实企业级 SaltStack 目录模板
  • ✅ 帮你把 现有 Ansible Playbook 转 Salt State
  • ✅ 设计一个 SaltStack + Git + CI/CD 流程

只要告诉我你的具体使用场景即可。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手