介绍
SaltStack,或盐,是一个强大的远程执行和配置管理系统,可以用来轻松地以结构化、可重复的方式管理基础设施. 在本系列中,我们将展示一种方法来管理您的开发,舞台和生产环境,从盐部署。
在本文中,我们将介绍我们正在构建的各种环境,我们将将安装盐大师戴蒙在我们的主要服务器上,以便开始。
前提条件
要完成本指南,您将需要一个干净的Ubuntu 14.04服务器。
在此服务器上,您应该有一个非 root 帐户,配置有sudo
权限,您可以在我们的 Ubuntu 14.04 初始服务器设置指南中学习如何设置此类帐户。
本系列的后一篇文章将使用盐云
命令来使用DigitalOcean云启动基础设施服务器. 如果您愿意,您可以使用其他云提供商,甚至可以使用Vagrant等软件的虚拟实例。
我们将建设的基础设施概述
我们使用的盐云
的服务器将代表我们想要维护的应用程序开发的三个环境,因为我们的盐主服务器将保持我们需要的每个服务器的配置,我们将能够在我们不使用这些服务器时旋转这些服务器。
我们将将我们的示范基础设施分解为开发,舞台化和生产。
我们的开发基础设施将是我们最温和的,它将简单地包含一个单一的 Web 服务器和一个相关的数据库服务器。
舞台环境将更加强大. 您会发现的大多数建议建议配置您的舞台环境,以尽可能类似于您的预期生产环境。 考虑到这一点,我们的舞台环境将由两个Web服务器组成,以便分散流量。 我们将使用负载平衡器在这两个服务器之间分配流量。 在数据库侧,我们将旋转两个数据库服务器。 我们将设置这两个服务器之间的大师复制,以便两者都能接受写作请求。
正如我们之前所述,生产环境将与舞台环境非常相似。我们设计的唯一区别将是额外的负载平衡器在前面提供高可用性,并且失败。如果您希望,您还可以使用更高的容量服务器为您的生产负载。
请记住,虽然我们正在为上面列出的环境创建配置,但它们并不需要同时运行,这尤其适用于测试过程中。在整个系列中,您可能只有一对几台服务器在一次运行。
现在你知道我们将配置的环境的总体布局,我们可以让我们的盐大师运行。
安装盐大师
首先,登录到您打算设置为盐主的服务器,作为具有sudo
特权的非根用户。
有很多不同的方法(https://andsky.com/tech/tutorials/how-to-install-and-configure-salt-master-and-minion-servers-on-ubuntu-14-04)来在服务器上安装 Salt master daemon。对于Ubuntu来说,有可用的PPA,但这些通常可能已经过时了。规划和管理配置管理软件的最佳方法是针对特定版本,这将使您能够以计划和结构的方式更新系统(经过彻底测试),而不是依赖于安装时从存储库中可用的任何东西。
对于本指南,我们将针对Salt 版本 v2015.8.0,该指南在写作时是最新的稳定版本. 如果您选择了不同的版本或安装方法,请注意本指南中的流程可能无法按所写的方式运行。
安装特定版本的最简单的方法是使用SaltStack的bootstrap脚本. 下载最新的bootstrap脚本到您的主目录,键入:
1cd ~
2curl -L https://bootstrap.saltstack.com -o install_salt.sh
请自由查看下载的脚本的内容,直到您对它所执行的操作感到舒适。
当你准备好安装盐大师时,你可以使用sh
壳运行脚本,我们会通过-P
旗帜,表示我们可以使用pip
允许依赖性安装,Python包管理器。我们还需要包含-M
旗帜,表示我们想要安装大师大师。通过包括git v2015.8.0
来完成命令,该命令告诉脚本从SaltStack GitHub repo
(https://github.com/saltstack/salt)获取指定的发布标签,并使用此命令进行安装:
1sudo sh install_salt.sh -P -M git v2015.8.0
该脚本将安装所有必要的依赖性,从git
复制器中提取指定的版本,并安装盐大师和迷你鬼,以及一些相关的盐实用程序。
安装应该是相当直前的。接下来,我们可以开始配置我们的盐大师。
设置盐大师
我们需要做的第一件事是编辑主要的盐主配置文件. 现在用sudo
特权打开它:
1sudo nano /etc/salt/master
配置文件相当长,评论很好. 您只需要删除评论并设置选项,当您想偏离默认值时。
首先,在檔案中找到「file_recv」選項. 啟用此功能允許 Salt minions 向 Salt master 發送檔案. 這在創建狀態時非常有用,以獲得您想要修改的配置檔案,但它帶有某些風險。
1[label /etc/salt/master]
2file_recv: True
接下来,我们需要设置file_roots
字典。盐主包括一个用于存储和服务整个基础设施的文件服务器。这包括配置管理状态文件本身,以及由我们的系统管理的任何微小文件。这个YAML字典定义了文件服务器的根,该服务器将位于/srv/salt
。我们需要指定这是位于基础
环境下,这是所有盐部署的强制默认环境:
1[label /etc/salt/master]
2file_roots:
3 base:
4 - /srv/salt
<$>[注] [标签注] 复制给定的格式很重要。 Salt 使用 YAML 风格的配置文件。 YAML 需要严格注意间隔和间隔以确保正确的解释。
现在我们需要的最后一个项目是‘pillar_roots’字典. 支柱系统用于存储可限制到某些节点的配置数据. 这使我们能够定制行为并防止与数据无关的基础设施组件看到敏感数据。
1[label /etc/salt/master]
2pillar_roots:
3 base:
4 - /srv/pillar
保存并关闭文件,当你完成。
我们可以继续创建我们在配置文件中引用的目录,输入:
1sudo mkdir -p /srv/{salt,pillar}
将 Minion Daemon 配置到 Salt Master 上
我们还希望将我们的盐主服务器配置为接受盐命令。我们可以通过在我们的服务器上配置小伙子戴蒙来做到这一点。
1sudo nano /etc/salt/minion
这里我们唯一需要改变的就是主服务器的位置,因为两台戴蒙都在同一个主机上运行,所以我们可以将地址设置为本地路由器接口:
1[label /etc/salt/minion]
2master: 127.0.0.1
保存并关闭文件,当你完成。
重新启动服务并接受盐钥匙
现在我们已经安装了 Salt 主机和 minion 配置,重新启动服务以获取我们的更改:
1sudo restart salt-master
2sudo restart salt-minion
在 Salt master 能够安全地与 minion 通信之前(即使是在相同的服务器上),它必须接受 minion 的密钥. 这是一个安全功能。
1sudo salt-key --list all
如果你的戴蒙被正确配置并重新启动,你应该在未被接受的密钥
部分看到你的盐主服务器的密钥,在我们的情况下,我们的盐主机被托管在一个名为sm
的机器上:
1[secondary_label Output]
2Accepted Keys:
3Denied Keys:
4Unaccepted Keys:
5sm
6Rejected Keys:
您可以通过将服务器的minion ID(在这种情况下‘sm’)传递到带有‘a’旗的‘salt-key’命令来接受这个密钥:
1sudo salt-key -a sm
如果您再次检查,您的密钥将迁移到接受的密钥
部分:
1sudo salt-key --list all
1[secondary_label Output]
2Accepted Keys:
3sm
4Denied Keys:
5Unaccepted Keys:
6Rejected Keys:
您可以通过键入以下方式验证您的 Salt 主服务器现在响应 Salt 命令:
1sudo salt '*' test.ping
你应该得到一个回复,看起来像这样的东西:
1[secondary_label Output]
2sm:
3 True
您的盐主服务器现在正在运行。
结论
在本指南中,我们通过运行我们的盐主服务器的初始配置来开始管理我们的基础设施,这是我们管理设计中的中央服务器,将作为控制中心和配置数据的存储库使用。
在本系列的 下一个指南中,我们将使用我们的 DigitalOcean API 凭证配置我们的 Salt 主服务器,我们将创建一个提供商配置,允许我们使用salt-cloud
命令连接到我们的 DigitalOcean 帐户,并创建和管理云资源。