Vagrant中Salt-minion配置疑问:初始化时服务启动失败
首先,你的核心配置思路是正确的:通过Vagrant的Salt provisioner自动传递minion配置文件,避免手动SSH登录操作,这个方向没问题。但从报错信息来看,salt-minion启动后立刻退出了,导致bootstrap脚本检测到服务未运行,下面我们一步步排查问题。
一、先确认你的基础配置是否存在细节问题
1. Vagrantfile片段的正确性
你给出的Vagrantfile中minion的定义结构是对的,但有个关键缺失:没有配置虚拟机的私有网络。如果salt-master的IP是192.168.10.10,你的minion虚拟机必须和master在同一个私有网络里才能访问这个IP。
修正后的Vagrantfile应该给master和minion都配置private_network:
# 先配置salt-master的部分 config.vm.define "saltmaster" do |master| master.vm.box = "ubuntu/trusty64" master.vm.hostname = "saltmaster" master.vm.network "private_network", ip: "192.168.10.10" # 关键:指定master的私有IP master.vm.provision :salt do |salt| salt.master = true # 标记这是master节点 end end # 你的loadbalancer minion配置,补充private_network config.vm.define "loadbalancer" do |loadbalancer| loadbalancer.vm.box = "ubuntu/trusty64" loadbalancer.vm.hostname = "loadbalancer" loadbalancer.vm.network "private_network", ip: "192.168.10.11" # 给minion分配同网段IP loadbalancer.vm.provision :salt do |salt| salt.minion_config = "salt/minion" end end
2. salt/minion配置文件的正确性
你的配置文件格式是标准的Salt YAML格式,缩进看起来没问题(注意YAML只能用空格,不能用tab),但要确认:
master: 192.168.10.10确实是salt-master虚拟机的私有IP,而非宿主机IP或其他网络IP- grains的定义正确,
roles: - load-balancing的缩进是2个空格(你的示例里是对的)
二、排查salt-minion启动失败的原因
报错信息显示salt-minion was not found running,本质是minion启动后因为无法连接master或配置错误立刻退出了,下面是具体解决步骤:
1. 先确保salt-master已正常启动
在运行vagrant up loadbalancer之前,先启动salt-master虚拟机并确认服务运行:
vagrant up saltmaster vagrant ssh saltmaster sudo service salt-master status # 确认master服务处于running状态
如果master没启动,minion会因为无法连接而退出。
2. 指定兼容Ubuntu Trusty的SaltStack版本
Ubuntu Trusty(14.04)是比较老的发行版,默认bootstrap脚本安装的Salt版本可能存在兼容性问题。建议在provision时指定一个稳定的LTS版本:
loadbalancer.vm.provision :salt do |salt| salt.minion_config = "salt/minion" salt.version = "2018.3.8" # 这个版本是支持Ubuntu 14.04的LTS版本 end
3. 检查minion配置文件的权限
Vagrant同步到虚拟机的文件可能权限不正确,导致salt-minion无法读取配置。可以在provision里指定配置文件的属主:
loadbalancer.vm.provision :salt do |salt| salt.minion_config = "salt/minion" salt.minion_config_owner = "root" salt.minion_config_group = "root" end
4. 手动登录minion查看详细日志
如果以上步骤还是无法解决,登录minion虚拟机查看salt-minion的日志,找到具体错误:
vagrant ssh loadbalancer sudo tail -f /var/log/salt/minion
日志里会明确显示错误原因,比如:
Connection refused:说明minion无法连接到master的IPInvalid config file:说明配置文件格式有问题Permission denied:配置文件权限不正确
5. 预接受minion密钥(可选)
如果是测试环境,可以在master上预接受minion的密钥,避免minion因为等待密钥接受而退出:
在salt-master虚拟机里执行:
sudo salt-key -A -y # 接受所有待认证的minion密钥
总结
你的配置方向是正确的,但缺少了私有网络配置、兼容版本指定这些关键细节,导致minion无法连接master而启动失败。按照上面的步骤修正后,应该可以实现无SSH登录的自动化部署。
内容的提问来源于stack exchange,提问作者Vitali Plagov

