SaltStack自动化运维配置指南
对于刚接触服务器运维的朋友来说,一听到“自动化”三个字可能就觉得复杂。
其实 SaltStack 就是一个帮你批量管理成百上千台服务器的工具,它采用 Master-Minion 的架构:一台“主控端”(Master)通过简单的配置去控制多台“被控端”(Minion),执行命令、同步文件、安装软件等都能自动化完成。
下面我们直接动手搭建一套可用环境,让你直观感受 SaltStack 自动化运维配置的流程。
准备工作:两台能通信的 Linux 服务器
你需要准备两台 Linux 机器,一台作为 Master(主控),一台作为 Minion(被控)。
如果手头只有一台电脑,可以用虚拟机(如 VirtualBox)创建两个 CentOS 7/8 或 Ubuntu 20.04 实例。
关键前提:
- 两台机器网络互通(能互相 ping 通 IP)。
- Master 机器开放 4505 和 4506 端口(Salt 通信端口),或者暂时关闭防火墙。
- 每台机器都能访问软件源(apt/yum)。
- 记下 Master 的 IP 地址,后面配置 Minion 要用。
安装 SaltStack Master 和 Minion
步骤 1:在 Master 上安装(以 CentOS 为例)
# 添加 SaltStack 官方 yum 源
sudo yum install https://repo.saltproject.io/salt/py3/redhat/salt-py3-repo-latest.el7.noarch.rpm
# 安装 Master
sudo yum install salt-master
# 启动并设置开机自启
sudo systemctl start salt-master
sudo systemctl enable salt-master
步骤 2:在 Minion 上安装
# 同样添加源(版本要一致)
sudo yum install https://repo.saltproject.io/salt/py3/redhat/salt-py3-repo-latest.el7.noarch.rpm
# 安装 Minion
sudo yum install salt-minion
Ubuntu 用户把 yum 换成 apt,源地址换成 Debian 的即可。
配置 Minion 连接 Master
这是新手最容易出错的地方。
编辑 Minion 上的配置文件 /etc/salt/minion:
# 找到或添加这一行,把 master 的值改成 Master 的 IP
master: 192.168.1.100 # 替换为你的 Master 实际 IP
# 可选的 minion ID,如果多台 Minion 建议使用有意义的名称
id: web01
保存后重启 Minion 服务:
sudo systemctl restart salt-minion
接着回到 Master 机器,查看 Minion 的密钥请求:
sudo salt-key -L
你会看到类似 Unaccepted Keys: web01。
接受密钥:
sudo salt-key -a web01
之后可以用 salt-key -L 确认状态变为 Accepted Keys。
编写第一个 State 文件:让 Minion 自动安装 Nginx
SaltStack 的核心是“State”,它描述目标服务器应该达到的状态。
在 Master 上创建 /srv/salt/ 目录(如果不存在),然后新建一个文件 /srv/salt/nginx.sls:
nginx:
pkg.installed: # 确保安装 Nginx
- name: nginx
service.running: # 确保 Nginx 服务正在运行
- name: nginx
- enable: true # 开机自启
回到命令行,执行这个 State:
sudo salt 'web01' state.apply nginx
如果看到一堆绿色输出的 Result: True,说明 Nginx 已经在 Minion 上自动安装并启动了。
你可以登录 Minion 用 nginx -v 或 systemctl status nginx 验证。
常见问题与避坑指南
- 密钥一直显示 Unaccepted:检查 Minion 的
master配置是否填写准确;Master 的防火墙是否阻挡了端口 4505/4506;尝试在 Minion 上重启salt-minion并等待几秒再salt-key -L。 - state.apply 返回错误“Minion did not return”:通常是因为网络不通或 Minion 服务没启动。先在 Master 上
salt 'web01' test.ping,如果能返回True,再检查 State 文件语法。 - YAML 缩进错误:State 文件对缩进极其敏感,必须使用空格(不能用 Tab),且每个层级对齐。建议用 VS Code 或 vim 配合 YAML 插件。
- ID 冲突:如果多个 Minion 使用了同一个
id,Master 只会保留最后一个连接的 Minion。务必为每台 Minion 设置独一无二的 ID。
动手完成上述步骤后,你已经走通了 SaltStack 自动化运维配置的核心环节。
之后可以扩展 State 文件,管理日志收集、配置文件下发、服务重启等更复杂的场景。
如果遇到卡住的地方,优先检查网络、防火墙和密钥状态——绝大多数新手问题都出在这三点上。