本文档提供了安装Salt集群的分步指南,该集群由一个master服务器和一个在macOS上托管的本地VM上运行的minion组成。
注意:本指南面向希望在虚拟机中运行Salt的开发人员。 官方(Linux)教程可以在这里找到。
您也可以浏览Github上一份相同的技术资料:THE MACOS (MAVERICK) DEVELOPER STEP BY STEP GUIDE TO SALT INSTALLATION
既然你在阅读这个资料,你可能已经听说过Salt,所以你已经知道Salt可以让你轻松地在成群的服务器上配置和运行命令。以下是Salt集群的简要概述:
注意:本教程中还包含了第三个重要的配置文件,不要与前两个配置文件混淆:这里指的是虚拟机配置的配置文件。这本身并不特别与Salt有关,但它也包含一些Salt配置。有关详细信息,请参阅步骤3.另请注意,所有配置文件都是YAML文件。所以缩进很重要。
注意:Salt也可以使用“masterless”配置,其中minion是自治的(在这种情况下salt可以看作是本地配置工具),或者是“multi-master”配置。有关详细信息,请参阅相关文档。
“Salt master”服务器将直接运行在Mac OS机器上。命令将从terminal终端应用运行,因此需要在Mac上安装Salt。这对于使用配置文件进行操作会更方便。
我们将只有一个“Salt Minion”服务器。它将使用VirtualBox在Mac上运行的虚拟机上运行。它将运行Ubuntu发行版。
因为Salt有许多不是在macOS中构建的依赖项,所以我们将使用Homebrew来安装Salt。 Homebrew是Mac的软件包管理器。 有些人花了很多时间手工安装lib来更好地理解依赖关系,然后意识到一个包管理器在配置一台全新的机器并且必须重新做一遍之后是多么有用。 它还可以让您轻松卸载。
注意:Brew是一个Ruby程序(默认情况下,需要您的Mac安装了Ruby)。 Brew下载,编译和链接软件。 链接阶段是在您的计算机上部署编译软件时。 它可能与手动安装的软件冲突,尤其是在/usr/local目录中。 没关系,删除手动安装的版本,然后输入brew link 'packageName’刷新链接。 Brew有一个brew Doctor命令可以帮助您排除故障。 这是一个伟大的命令,经常使用它。 Brew需要xcode命令行工具。 当你第一次运行brew时它会要求你安装它们,如果它们还没有在你的系统上。 Brew在/usr/local/bin中安装软件(系统bins则位于/usr/bin中)。 要使用这些bins,您需要使用 P A T H 告 诉 系 统 在 那 里 搜 索 。 B r e w 会 告 诉 您 是 否 需 要 修 复 PATH告诉系统在那里搜索。 Brew会告诉您是否需要修复 PATH告诉系统在那里搜索。Brew会告诉您是否需要修复PATH。
小提示:在"open" macOS对话框中使用键盘快捷键
cmd + shift + period
来显示隐藏文件和文件夹,例如.profile。
安装 Homebrew 的方法请参见: http://brew.sh/
或者是,直接执行:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
现在在终端中键入以下命令(您可能希望在每个命令后键入brew doctor以确保一切正常):
brew install python
brew install swig
brew install zmq
注意:zmq是ZeroMQ。 它是一个用于服务器到服务器之间网络通信的出色工具库,是Salt运行效率的核心。
您现在应该已经准备好启动此命令:
pip install salt
注意:应该不需要使用
sudo pip install salt
。 Brew为您的用户安装了Python,因此您应该拥有所有访问权限。 如果你想检查,键入which python
以确保它是/usr/local/bin/python
,以及which pip
应该是/usr/local/bin/pip
。
现在在终端中键入python
,然后执行import salt
。 应该没有报错。 现在使用exit()退出Python终端。
如果未创建默认的/etc/salt/master
配置文件,请从此处复制粘贴它:
http://docs.saltstack.com/ref/configuration/examples.html#configuration-examples-master
注意:
/etc/salt/master
是一个文件,而不是一个目录。
Salt Master的配置更改。 Salt master需要调整一些配置参数才能在macOS上运行:
sudo launchctl limit maxfiles 4096 8192
在 /etc/salt/master
文件中, 变更 max_open_files
参数值为 8192 (或者是如果不存在该参数时,直接添加上一行: max_open_files: 8192
)。
现在应该可以启动 Salt master服务了:
sudo salt-master --log-level=all
运行上面命令时,应该不会有报错信息。
注意:这个命令应该是一个守护进程,但是为了调试它,我们会让它在终端上运行来监视各种活动。
现在已经设置了Master服务器,让我们在VM上配置一个minion。
Salt minion将部署在虚拟机上运行。 有许多软件选项可以让你在mac上运行虚拟机,但在本教程中我们将使用VirtualBox。 除了virtualBox之外,我们还将使用Vagrant,它可以帮助创建基本VM配置。
Vagrant允许您构建可立即使用的VM映像,从操作系统映像开始并使用"provisioners"进行自定义。 在我们的例子中,我们将使用它:
从这里获取安装包: https://www.virtualBox.org/wiki/Downloads (click on VirtualBox for macOS hosts => x86/amd64)
从这里获取安装包: http://downloads.vagrantup.com/ ,选择最新版本 (1.3.5 at time of writing), 下载 .dmg 文件。双击以安装它。 确保在终端中运行时找到vagrant命令。 输入vagrant。 它应该显示一个命令列表。
创建一个文件夹,您可以在其中存储您的minion的VM。 在本教程中,它将是一个位于$home目录中的minion文件夹。
cd $home
mkdir minion
在 minion 文件夹中,执行以下命令:
vagrant init
此命令将创建默认的Vagrantfile配置文件。 此配置文件将用于在步骤3中将配置参数传递给Salt provisioner 。
vagrant box add precise64 http://files.vagrantup.com/precise64.box
注意:该box是在全局Vagrant级别添加的。 您只需要执行一次,因为每个VM将使用此相同的文件。
修改 ./minion/Vagrantfile
文件以使用 precise64 box。 将 config.vm.box
这一行变更为:
config.vm.box = "precise64"
取消下面行的注释以创建一个 host-only IP 地址的VM。 这将是你的minion节点的ip地址 (如果IP地址已占用,可以更换为其它空闲地址):
config.vm.network :private_network, ip: "192.168.33.10"
此时你应该有一个可以运行的虚拟机,尽管它不会有多少功能。 我们来检查一下。
进入到 $home/minion 目录并执行:
vagrant up
会打印一行日志信息表示正在引导VM。 一旦完成,你将回到终端:
ping 192.168.33.10
此时可以ping通VM的IP地址了。
现在再次使用Vagrant ssh登录VM:
vagrant ssh
你将看到命令行提示符的风格变成类似 vagrant@precise64:~$
,意味着此时你已经在 VM 中了。从这里,执行下面的命令:
ping 10.0.2.2
注意:该ip是您的VM宿主机(macOS主机)的IP。 该数字是VirtualBox默认值,在Vagrant ssh命令后显示在日志中。 我们将使用该IP告诉minion 关于Salt Master在哪里。 完成后,键入exit结束ssh会话。
现在是时候将VM连接到salt master了。
创建/etc/salt/minion
文件。 在该文件中,输入以下行,给出此minion的ID以及master的IP:
master: 10.0.2.2
id: 'minion1'
file_client: remote
Minions使用密钥与master进行身份验证。 如果您不提供密钥,则会自动生成密钥,并且可以在以后接受该密钥。 然而,这需要在每次删除或创建minions时接受minions密钥(这可能是经常的)。 更好的方法是提前创建这些密钥,将它们提供给minions,并做好授权。
从Mac上的minion文件夹运行:
sudo salt-key --gen-keys=minion1
这应该创建两个文件:minion1.pem和minion1.pub。 由于这些文件是使用sudo创建的,但将由vagrant使用,因此您需要更改所有权:
sudo chown youruser:yourgroup minion1.pem
sudo chown youruser:yourgroup minion1.pub
接下来,把 .pub
文件复制到已接受minions的路径下:
sudo cp minion1.pub /etc/salt/pki/master/minions/minion1
现在让我们修改用于配置Salt VM的Vagrantfile。 在Vagrantfile中添加以下部分(注意:它应与其他属性处于相同的缩进级别):
# salt-vagrant config
config.vm.provision :salt do |salt|
salt.run_highstate = true
salt.minion_config = "/etc/salt/minion"
salt.minion_key = "./minion1.pem"
salt.minion_pub = "./minion1.pub"
end
现在删除先前的 vm ,然后在 /minion 文件夹中重新创建它:
vagrant destroy
vagrant up
如果一切正常,你会看到以下信息:
"Bootstrapping Salt... (this may take a while)
Salt successfully configured and installed!"
要确保master和minion彼此正常通信,请输入以下内容:
sudo salt '*' test.version
你应该看到你的minion回复的Salt版本信息。 现在是时候做一些配置了。
在这一步中,我们将使用Salt master来指示我们的minion安装Nginx。
首先,确保我们的minion上没有安装HTTP服务器。 打开指向http://192.168.33.10/的浏览器时,您应该收到错误消息,指出无法访问该站点。
系统配置是在/srv/salt/top.sls
(和子文件/文件夹)中完成,然后通过运行state.apply
函数来应用,让Salt master命令其下属更新其指令并运行相关命令。
首先在Salt master(macOS机器)上创建一个空文件:
touch /srv/salt/top.sls
当文件为空时,或者如果没有找到我们的minion的配置,则会报告错误:
sudo salt 'minion1' state.apply
这将返回一个状态错误的信息: No Top file or external nodes data matches found.
现在终于可以进入我们服务器配置的真正时间了。 对于本教程,我们的minion将被视为需要安装Nginx的Web服务器。
将以下行插入/srv/salt/top.sls
(当前应为空)。
base:
'minion1':
- bin.nginx
现在,创建 /srv/salt/bin/nginx.sls
文件,包含以下内容:
nginx:
pkg.installed:
- name: nginx
service.running:
- enable: True
- reload: True
最后,执行 state.apply
功能函数:
sudo salt 'minion1' state.apply
您应该看到一个日志,显示已安装Nginx软件包并配置了服务。 要证明这一点,请打开浏览器并导航到http://192.168.33.10/,您应该看到标准的Nginx欢迎页面。
恭喜!
Salt中的配置管理的完整描述(sls文件和其他内容)可在此处获得:
http://docs.saltstack.com/en/latest/index.html#configuration-management