暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SaltStack(现称 Salt)简介

恩恩霸 2026-08-09
21

SaltStack(现称 Salt)是一款开源的基础设施自动化与配置管理平台,采用 Python 开发,以其高性能的远程执行引擎和灵活的声明式配置管理著称。它既能像 Ansible 一样通过 SSH 批量管理节点,又能像 Puppet 一样维护系统状态的持续一致性,同时兼具实时远程命令执行的强大能力,是 DevOps 工具链中的重要组成部分。


一、架构设计:主从式与无代理模式并存

SaltStack 的核心架构围绕 Master-Minion(主从)模型构建。Master 是中央控制节点,负责发送指令、分发配置与收集状态;Minion 是运行在被管节点上的代理进程,接收 Master 指令并执行本地操作。两者通过 ZeroMQ 消息队列进行高速异步通信,默认端口为 4505(发布订阅)和 4506(请求响应)。这种基于消息总线的设计使 SaltStack 能够轻松支撑上万节点的并发管理,延迟极低。

同时,SaltStack 也支持 Salt SSH 模式,无需在目标节点预装 Minion,直接通过 SSH 协议推送命令,适用于临时任务或无法安装代理的网络环境。此外,Salt Proxy Minion 可扩展管理网络设备、IoT 设备等非传统主机。


二、核心组件与关键概念

1. 状态系统(State System)

SaltStack 使用 SLS(SaLt State) 文件描述期望的系统状态。SLS 采用 YAML 或 Jinja2 模板语法,定义"什么资源应该处于什么状态"。例如,确保 Nginx 已安装且运行:

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

require 关键字建立了状态间的依赖关系,Salt 会按拓扑顺序执行,确保配置的原子性与一致性。

2. 执行模块(Execution Modules)

Salt 内置数百个执行模块,覆盖包管理、文件操作、用户管理、网络配置、数据库操作等方方面面。通过 salt 命令行,管理员可即时对目标节点执行任意模块函数。例如:

# 对所有 web 节点执行磁盘使用率检查 salt 'web*' disk.usage # 对特定节点重启服务 salt 'db01' service.restart postgresql

3. Grains 与 Pillar

  • Grains:Minion 启动时自动采集的静态系统信息(如操作系统、CPU、内存、IP 地址等),可用于目标匹配与状态条件判断。
  • Pillar:存储在 Master 上的敏感数据与动态配置(如数据库密码、API 密钥、环境变量),通过加密通道分发给特定 Minion,实现配置与代码的分离。

4. 目标匹配(Targeting)

Salt 提供灵活的目标节点选择机制,支持 Glob 通配、正则表达式、Grains 过滤、节点列表、复合条件等多种方式:

salt '*' test.ping # 所有节点 salt 'web[1-3]' status.uptime # web1-web3 salt -G 'os:CentOS' pkg.upgrade # 所有 CentOS 节点 salt -C 'G@os:Ubuntu and web*' cmd.run 'apt update' # 复合条件

三、远程执行:实时性与扩展性

SaltStack 的远程执行能力是其区别于 Ansible(拉取/推送式)和 Puppet(纯声明式)的核心优势。基于 ZeroMQ 的 pub-sub 机制,Master 可同时向数千台 Minion 广播指令,返回结果聚合到 Master 端。典型应用场景包括:

  • 批量命令执行:同时重启集群服务、清理日志、收集诊断信息;
  • 实时状态查询:秒级获取全网节点的负载、进程、端口监听状态;
  • 动态编排:结合 Salt Orchestration,定义跨节点的复杂工作流(如先更新数据库 schema,再滚动重启应用节点)。

编排文件示例:

# /srv/salt/orch/deploy.sls deploy_database: salt.state: - tgt: 'db*' - sls: database.update deploy_app: salt.state: - tgt: 'app*' - sls: application.deploy - require: - salt: deploy_database

四、事件驱动与反应器(Reactor)

SaltStack 内置事件总线(Event Bus),Minion 可主动向 Master 发送事件(如服务崩溃、文件变更、安全告警)。Master 端的 Reactor 系统监听这些事件并触发预定义动作,实现真正的事件驱动自动化。例如:

# /etc/salt/master.d/reactor.conf reactor: - 'salt/minion/*/start': - /srv/reactor/welcome.sls

当任意 Minion 启动时,自动发送通知或执行初始化配置。


五、SaltStack 与竞品对比

特性 SaltStack Ansible Puppet Chef
架构 Master-Minion / SSH SSH / Pull Master-Agent Client-Server
执行速度 极快(ZeroMQ) 中等(SSH) 较慢 中等
学习曲线 中等
实时执行 原生支持 有限 不支持 不支持
声明式配置 支持 支持 原生 原生
无代理模式 支持(Salt SSH) 原生 不支持 不支持

SaltStack 的突出优势在于速度与灵活性:既具备 Ansible 的易用性,又拥有 Puppet 的状态管理能力,还额外提供了实时远程执行和事件驱动编排。


六、应用场景

  1. 大规模服务器集群管理:互联网企业万台级服务器的批量配置、补丁更新、软件分发;
  2. 混合云与多云编排:统一管理 AWS、Azure、私有云及裸金属服务器的异构环境;
  3. 容器与 Kubernetes 集成:通过 Salt Kubernetes 模块管理 Pod、Service、ConfigMap 等资源;
  4. 安全合规审计:利用 Salt 的审计模块持续扫描节点配置,自动修复偏离基线的状态;
  5. CI/CD 流水线集成:在 Jenkins、GitLab CI 中调用 Salt API,实现部署阶段的自动化。

七、发展历程与现状

SaltStack 由 Thomas Hatch 于 2011 年创建,2020 年被 VMware 收购,随后整合为 VMware Aria Automation(原 vRealize Automation)的组件。2023 年 VMware 被 Broadcom 收购后,Salt 的开源版本(Salt Open)继续由社区维护,核心代码托管于 GitHub。尽管企业版战略有所调整,Salt Open 仍保持活跃更新,广泛应用于需要高性能、实时响应的自动化运维场景。


八、总结

SaltStack 凭借其独特的高速消息总线架构声明式状态管理实时远程执行三位一体的能力,在基础设施即代码(IaC)领域占据重要地位。对于需要同时兼顾"配置漂移修复"与"秒级批量操作"的复杂环境,SaltStack 提供了其他工具难以替代的综合解决方案。掌握其核心概念——SLS 状态、Grains/Pillar 数据分离、目标匹配与事件驱动——是构建现代化、自动化运维体系的关键一步。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论