一条“Salt 公会招人,50 级以上就行,等级接近的我会带”的招募启事,初看像游戏公会的门槛设计:目标明确,不要求零基础,也不要求顶尖,只要求彼此等级接近,方便互相带。放到技术圈里,这句话几乎可以直接描述一个 SaltStack 学习社群的成员标准。SaltStack 是一套事件驱动的自动化运维和配置管理工具,核心思路是把服务器应有的状态写成声明式文件,由主控端批量下发并持续校验。“50 级”在 Salt 学习里不是官方认证,而是说一个人已经能独立完成常见运维任务、能看懂状态执行结果、能在报错信息里定位问题阶段。下面会从这条启事出发,先搭一套最小可运行的 Master-Minion 环境,再完成一个批量部署 Nginx 的状态文件,把“50级”拆成可验证的技能清单,最后给出排错和带教方法。适合刚接触 SaltStack、想系统学习自动化配置,或者想在团队内组织技术成长小组的人。
1. 把“Salt 公会招人”翻译成技术成长路线
1.1 一句招募公告背后的三个关键词
“Salt”“等级”“带教”三个词就是这条路线的主线。Salt 对应 SaltStack,是继 Puppet、Chef、Ansible 之后常见的配置管理工具。它和 Ansible 的一个直观区别是,Salt 默认采用 Master/Minion 架构,Minion 启动后会主动连接 Master,后续命令由 Master 通过消息队列发布,Minion 执行后把结果返回。这种方式的特点是规模大了之后命令下发效率较高,但也引入了密钥管理、端口连通、事件队列等需要理解的部分。
“等级”可以理解为一个工程师对这套机制的熟悉程度:能不能装好环境、能不能管理密钥、能不能写状态文件、能不能排错。“带教”则对应技术社群和结对学习:不是单方面输出,而是让水平接近的人通过任务互评共同提高。如果你已经熟悉 Ansible,可以把 Salt 的 State 看成类似 Playbook 的描述文件;但 Salt 的 Master/Minion 架构意味着要先注册身份、交换密钥,对应的学习曲线并不完全一样。
1.2 “50级”并不是官方等级,而是能力画像
在 SaltStack 官方文档、认证体系里没有“50级”这个说法。它更像一种社群内部的通俗表达。可以把“50级”定义为:已经能独立管理一小批服务器,能够完成“安装软件、配置文件、启动服务、验证结果”这条完整链路。
一个低于 50 级的人可能还停留在执行单个命令,不知道 State 文件和执行模块的区别;一个超过 50 级的人可能已经掌握了 Pillar、Grains、Reactor、Salt API 中的若干项。为什么招募条件写“50级以上就行”?因为如果一个人完全零基础,直接进入一个以互相带教为主的社群,会消耗大量答疑精力;如果已经有足够经验,又不需要这种形式的带教。所以“50级”其实是在筛选参与者的基础能力下限。
在自测时,不要问“我学了多少天”,而要问“我能完成哪些任务”。比如“我能不能在 30 分钟内从一台空机器开始,搭出 Master 和 Minion 并执行test.ping”,这就是一个 50 级附近的典型任务。
1.3 学习这条路线会得到什么
接下来的路径不是把 SaltStack 所有模块讲一遍,而是先保证一条最小可运行链路:环境、密钥、连通、状态文件、部署、验证、排错。这条链路跑通后,你对 Salt 运作方式的理解会比零散看文档更完整。
然后会用一张技能清单,帮你判断自己是否达到“能带别人”的阶段。文中涉及的命令、配置和常见问题都是实际运维里高频出现的,可以直接在虚拟机或临时服务器上复现。
2. 先跑通 SaltStack 环境:最小 Master-Minion 集群
2.1 环境规划与版本确认
在学习阶段,准备两台互相能访问的服务器即可:一台作为 Salt Master,一台作为 Salt Minion。为了节省资源,也可以在一台机器上同时安装 Master 和 Minion,用不同的 id 模拟客户端。下面以两台 Ubuntu 22.04 为例,实际操作中 CentOS、Rocky Linux 也类似。
| 角色 | 主机名示例 | 建议配置 | 主要职责 |
|---|---|---|---|
| Salt Master | salt-master | 2 核 4 G | 保存状态文件、管理 Minion 密钥、下发任务 |
| Salt Minion | web-node-01 | 1 核 2 G | 执行状态任务、返回结果 |
生产环境还要考虑 Master 高可用、多个环境、Minion 数量规模等。学习环境只需要保证两张网卡互通,并且 4505、4506 端口可以到达。4505 是发布端口,Master 用它向 Minion 推送任务;4506 是返回端口,Minion 用它回传执行结果。如果中间有防火墙或安全组,需要放行这两个端口。
另外,不同版本 Salt 的安装仓库和默认行为会有变化,开始前先到官方安装文档确认当前稳定版本和对应发行版源的地址,避免照搬旧命令装出半新不旧的组合。
2.2 安装 Salt Master 和 Salt Minion
安装方式有很多种,这里推荐用官方 Bootstrap 脚本,适合学习环境快速安装。在 salt-master 上执行:
curl -L https://bootstrap.saltproject.io -o bootstrap_salt.sh sudo sh bootstrap_salt.sh -P -M参数-M表示同时安装 Master,-P表示使用 pip 安装所需 Python 模块。如果网络或内网环境受限,可以先下载脚本和安装包到内网,再统一分发。不要直接在生产网络里随意执行未知脚本。
如果你想分开安装,也可以使用发行版仓库里的salt-master和salt-minion包。比如 Debian/Ubuntu 在配置好 SaltStack 官方 apt 源后可以执行:
sudo apt update sudo apt install -y salt-master在 web-node-01 上执行:
curl -L https://bootstrap.saltproject.io -o bootstrap_salt.sh sudo sh bootstrap_salt.sh -P不加-M,表示只安装 Minion。安装完成后,检查版本:
salt-master --version salt-minion --version如果两条命令都能输出版本,说明安装阶段已经完成。常见问题是 curl 没有安装,可以先执行sudo apt install -y curl。版本不一致时不要慌,确认两端处于兼容版本范围内;如果启动后出现连不上,更常见的原因是配置和网络,而不是细微版本差异。
2.3 配置 master 地址和 minion id
Salt Master 默认配置可以直接使用,不需要大改。需要关注的是 Salt Minion 如何找到 Master。修改 web-node-01 上的/etc/salt/minion:
master: salt-master id: web-node-01如果salt-master这个主机名不能解析,就换成 IP 地址,例如master: 192.168.56.10。id是这台 Minion 在 Master 眼中的唯一标识,建议使用有业务含义的主机名,避免默认生成的随机主机名难以辨认。
修改后重启 Minion:
sudo systemctl restart salt-minion sudo systemctl enable salt-minion这时 Minion 会生成自己的密钥对,并主动向 Master 发起第一次握手。