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 的"串行/小批量"有何优势?
相关推荐
RisunJan9 小时前
Linux命令-ipcrm命令(删除Linux系统中的进程间通信(IPC)资源)
linux·运维·服务器
f***24119 小时前
高效管理临时文件:自动化方案全解析
运维·自动化
超人小子9 小时前
自动化报表系统实战:用Python让报表工作智能化
运维·python·自动化
Joren的学习记录9 小时前
【Linux运维大神系列】Kubernetes详解2(kubeadm部署k8s1.27单节点集群)
linux·运维·kubernetes
lbb 小魔仙9 小时前
【Linux】K8s 集群搭建避坑指南:基于 Linux 内核参数调优的生产级部署方案
linux·运维·kubernetes
且去填词9 小时前
构建基于 DeepEval 的 LLM 自动化评估流水线
运维·人工智能·python·自动化·llm·deepseek·deepeval
techzhi9 小时前
docker compose和docker-compose的区别
运维·docker·容器
vortex59 小时前
Linux 用户组查询命令详解
linux·运维·服务器
打不了嗝 ᥬ᭄9 小时前
网易 UU 远程 2026年1月 新春升级深度测评:免登录破局 + 安全加码 + 运维专属,重新定义远程协助体验
运维·安全