SaltStack自动化(一): 原理与安装

一、SaltStack 是什么?

SaltStack (简称 Salt)是 Salt Project 开源的自动化运维工具,采用 Apache License 2.0 协议。它类似于 Ansible、Puppet 和 Chef,但以 高性能、事件驱动、并行执行 著称。

✅ 核心能力:

功能 说明
远程命令执行 在成百上千台机器上同时运行命令
配置管理(State) 声明式定义系统期望状态(如安装 nginx、启动服务等)
基础设施即代码(IaC) 自动化部署云资源(通过 salt-cloud
事件驱动架构 系统变化可触发自定义响应(如文件修改 → 重启服务)
跨平台支持 支持 Linux、Windows、macOS、BSD 等

🌐 典型应用场景:

  1. 批量服务器初始化:统一设置时区、用户、防火墙规则。
  2. 应用一键部署:将 Web 应用部署到 100 台服务器。
  3. 故障排查:快速收集所有服务器的磁盘使用率、进程列表。
  4. 安全合规检查:定期验证 SSH 配置是否符合公司策略。
  5. 云资源编排:在 AWS 上自动创建并配置 EC2 实例。

二、SaltStack 的核心组件

组件 作用 是否必须安装
salt-master 控制中心,下发任务、接收结果 主控端需要
salt-minion 客户端代理,执行命令并返回结果 被控端需要
salt-ssh 无需安装 minion,通过 SSH 执行命令(类似 Ansible) 可选
salt-syndic 构建多级 Master 架构(适合超大规模集群) 可选
salt-cloud 管理云平台(AWS/Azure/GCP/OpenStack) 可选
salt-api 提供 REST API,供 Web 或其他系统调用 Salt 可选

三、SaltStack 工作原理

🔧 架构:主从(Master-Minion)

  • Master:1 台(或高可用集群)
  • Minion:N 台(目标服务器)

📡 通信机制

  • 默认使用 ZeroMQ(高性能消息队列)
  • 也可切换为 TCP/RAET(较少用)
  • 加密方式:AES + 公钥认证

🔐 连接建立流程(信任关系)

管理员 Master Minion 管理员 Master Minion 之后所有通信均加密 启动后连接 4506 端口,发送自身 ID 和公钥 等待手动/自动接受密钥 salt-key -A (接受所有) 返回 Master 公钥 生成 AES 会话密钥,用 Minion 公钥加密后下发 用私钥解密,保存会话密钥

⚙️ 任务执行流程

  1. 用户在 Master 执行:salt '*' test.ping
  2. Master 生成唯一 Job ID (JID)
  3. 通过 4505 端口(发布端口) 广播任务
  4. 所有匹配的 Minion 接收任务并执行
  5. 执行结果通过 4506 端口(返回端口) 发回 Master
  6. Master 汇总结果,输出为 JSON/YAML 格式

📌 端口说明:

  • 4505:任务分发(publish_port)
  • 4506:结果返回(ret_port)

四、SaltStack 安装部署

Salt 提供多个版本:

  • LTS(Long-Term Support) :稳定版,推荐生产环境使用(如 3006.9
  • STS(Short-Term Support) :创新版,含新功能,适合测试(如 3007

方式 1️⃣:通过官方仓库安装(推荐)

▶️ CentOS / RHEL(RPM 包)
bash 复制代码
# 添加官方仓库
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.repo | sudo tee /etc/yum.repos.d/salt.repo

# 安装 Master(主控端)
sudo yum install salt-master -y

# 安装 Minion(被控端)
sudo yum install salt-minion -y

# 查看版本
salt --version
▶️ Ubuntu / Debian(DEB 包)
bash 复制代码
# 添加官方源
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources | sudo tee /etc/apt/sources.list.d/salt.sources

# 更新包索引
sudo apt update

# 安装 Master
sudo apt install salt-master -y

# 安装 Minion
sudo apt install salt-minion -y

# 查看版本
salt --version

✅ 优点:自动处理依赖,升级方便

📌 注意:确保 /etc/apt/keyrings/ 目录存在(Debian 12+ 需要)


方式 2️⃣:通过 pip 安装(适合开发/隔离环境)

bash 复制代码
# 安装指定 LTS 版本(例如 3006.9)
pip3 install salt==3006.9 -i https://pypi.tuna.tsinghua.edu.cn/simple

# 验证
salt --version

⚠️ 缺点:需手动管理依赖,不推荐生产环境


方式 3️⃣:使用官方 bootstrap 脚本(最灵活)

🔗 脚本地址:
▶️ 常用参数说明:
参数 作用
-M 安装 salt-master
-N 不安装 salt-minion
-X 安装后不启动服务
-D 显示调试信息
-P 使用 pip 安装缺失依赖
stable <version> 安装指定稳定版
▶️ 示例命令:
bash 复制代码
# 仅安装 Minion(默认行为)
./bootstrap-salt.sh stable 3006.9

# 仅安装 Master(不装 Minion)
./bootstrap-salt.sh -M -N stable 3006.9

# 安装 Master + Minion,并指定版本
./bootstrap-salt.sh -M stable 3006.9

# 安装并启用调试模式
./bootstrap-salt.sh -D stable 3006.9

💡 初学者建议:先在一台机器上同时安装 master 和 minion(用于测试)


五、初次使用 SaltStack(快速体验)

步骤 1:启动服务

bash 复制代码
# 启动 master
sudo systemctl start salt-master

# 启动 minion(注意:需先配置 minion 连接 master)
sudo systemctl start salt-minion

步骤 2:配置 Minion(编辑 /etc/salt/minion

yaml 复制代码
master: localhost   # 如果 master 在本机
id: my-test-minion  # 可选,自定义 minion ID

步骤 3:在 Master 上接受密钥

bash 复制代码
# 查看待接受的 minion
sudo salt-key -L

# 接受所有(或指定 ID)
sudo salt-key -A

步骤 4:执行第一条命令!

bash 复制代码
# 测试连通性
salt '*' test.ping

# 查看所有 minion 的内核版本
salt '*' grains.get kernelrelease

# 在所有 minion 上执行 ls /tmp
salt '*' cmd.run 'ls /tmp'

✅ 成功输出表示 SaltStack 已正常工作!


六、练习题(巩固知识)

📝 基础题

  1. SaltStack 默认使用什么协议进行 Master-Minion 通信?端口号是多少?
  2. salt-sshsalt-minion 的主要区别是什么?
  3. 如何查看当前有哪些 Minion 等待接受密钥?

💻 操作题

  1. 在一台 Ubuntu 22.04 机器上,使用官方仓库安装 Salt Master 和 Minion,并完成首次 test.ping
  2. 使用 bootstrap 脚本安装 Salt 3006.9 版本的 Master(不安装 Minion),并验证版本。

🧠 思考题

  1. 为什么 Salt 要先建立"信任关系"?如果不接受密钥会发生什么?
  2. 在拥有 1000 台服务器的场景下,Salt 的"并行执行"相比 Ansible 的"串行/小批量"有何优势?
相关推荐
七夜zippoe6 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6487 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满7 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠8 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9038 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技9 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀9 小时前
Linux环境变量
linux·运维·服务器
zzzsde9 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º11 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~11 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化