介绍
SaltStack或Salt是一个强大的远程执行和配置管理系统,可用于以结构化,可重复的方式轻松管理基础架构。在本系列中,我们将演示从Salt部署管理开发,暂存和生产环境的一种方法。我们将使用Salt状态系统来编写和应用可重复的操作。这将允许我们破坏任何我们的环境,安全的知识,我们可以很容易地使他们在相同的状态在以后的时间恢复在线。 在本文中,我们将介绍我们将要构建的各种环境,并且我们将在主服务器上安装Salt主守护程序以开始使用。这是核心系统,将包含我们的配置指令,控制我们的基础设施节点,并管理我们的要求。先决条件
要完成本指南,您将需要一个干净的Ubuntu 14.04服务器。此服务器将需要启用专用网络。 在此服务器上,你应该有配置的非root帐户sudo
权限。 你可以学习如何建立一个帐户这种类型的在我们
的Ubuntu 14.04服务器初始设置指南 。 本系列后面的文章将使用
salt-cloud
命令启动使用DigitalOcean云基础架构服务器。您可以使用其他云提供商,如果你想,或甚至使用像vagrant软件的虚拟实例。但是,这不在本指南的范围内,您必须在这些方面进行自己的研究。
我们将建设的基础设施概述
我们旋转起来的服务器salt-cloud
将代表我们的三个环境中,我们要保持应用程序的开发。因为我们的Salt主服务器将维护我们需要的每个服务器的配置,所以当我们不使用它们时,我们可以将这些服务器关闭。例如,如果您的开发团队已经停止了假期的工作,那么您可以减少非生产环境。当您从中断返回时,您可以轻松地重新构建它们,并在这个新的基础设施之上重新部署应用程序。 我们将把我们的示例基础设施分解为开发,暂存和生产。 我们的发展基础设施将是我们最谦虚的。它将简单地包含单个Web服务器和关联的数据库服务器。解耦数据库和Web服务器将足以确保我们的应用程序是使用远程数据构建的。 分段环境将更加健壮。大多数建议,您会发现建议将您的登台环境配置为尽可能类似于您的预期生产环境。考虑到这一点,我们的临时环境将包括两个Web服务器,以分散流量负载。我们将使用负载均衡器在这两台服务器之间分配流量。在数据库方面,我们将启动两个数据库服务器。我们将在这两个服务器之间设置主 - 主复制,以便两者都能接受写请求。主 - 主复制有一些缺点,但它允许我们在我们的应用程序设计(任何数据库服务器可以接收写)有点懒惰,它允许我们演示一个相当复杂的配置管理场景。 如前所述,生产环境将非常类似于分段环境。我们设计的唯一区别是前面增加一个额外的负载均衡器,以提供高可用性和故障转移。如果您愿意,您还可以为生产负载使用更高容量的服务器。这通常需要充分处理流量需求,即使它使评估分段环境中的负载更加困难。 请记住,虽然我们正在为上述环境创建配置,但并非都必须同时运行。这在测试期间尤其如此。在本系列中,您可能只有几个服务器在任何时间都处于活动状态。从成本的角度来看这是可取的,但是根据需要破坏和提升我们的环境也确保了我们的环境引导是稳健和可重复的。 现在,你知道我们将要配置的环境的总体布局,我们可以让我们的Salt主机运行。
安装Salt Master
通过登录到您打算成立作为Salt Master与非root用户启动服务器sudo
权限。 有相当
一些不同的方式在服务器上安装Salt主守护进程。有可用于Ubuntu的PPA,但这些通常可能已过时。规划和管理配置管理软件的最佳方法是定位到特定版本。这将允许您以计划和结构化的方式更新系统(经过彻底测试),而不是依赖于安装时从存储库提供的任何内容。 对于本指南中,我们将针对Salt版本
v2015.8.0 ,在写这篇文章时最新的稳定版本。如果选择其他版本或安装方法,请注意本指南中的过程可能无法正常工作。 安装特定版本的最简单的方法是使用SaltStack的引导脚本。通过键入以下内容将最新的引导脚本下载到主目录:
cd ~
curl -L https://bootstrap.saltstack.com -o install_salt.sh
随意查看下载的脚本的内容,直到你对它将执行的操作感到舒适。 当您准备安装Salt Master,可以运行的脚本
sh
外壳。 我们将通过它的
-P
标志,以表明我们是没关系与允许依赖安装与
pip
,Python的包管理器。 我们还需要包括
-M
标志,以表明我们要安装主守护进程。 通过包括玩完命令
git v2015.8.0
,它告诉脚本从获取指定版本标签
SaltStack GitHub库 ,并利用它来进行安装:
sudo sh install_salt.sh -P -M git v2015.8.0
该脚本将安装所有必要的依赖关系,拉从指定的版本
git
回购,并安装Salt Master和仆从守护程序,以及一些相关的Salt实用程序。 安装应该相当简单。接下来,我们可以开始配置我们的Salt master。
配置Salt Master
我们需要的第一件事是编辑Salt主配置文件。现在打开它sudo
权限:
sudo nano /etc/salt/master
配置文件相当长并且注释良好。当您希望偏离默认值时,只需要取消注释并设置选项。我们只需要进行几个编辑开始。 首先,找到
file_recv
文件中的选项。启用此选项允许Salt minions将文件发送到Salt主机。这在创建状态以获取您希望修改的配置文件时非常有用,但是,它带来一些风险。我们将在本指南的持续时间启用它。您可以随后停用它:
/ etc / salt / master
file_recv: True
下一步,我们将需要设置
file_roots
字典。 Salt主机包括一个文件服务器,它用于存储和提供整个基础架构的文件。 这包括配置管理状态文件本身,以及由我们的系统管理的任何minion文件。 此YAML词典定义了文件服务器,将设在根
/srv/salt
。我们需要指定这是位于“基本”环境下,所有Salt部署的强制默认环境:
/ etc / salt / master
file_roots:
base:
- /srv/salt
注意
重要的是精确地复制给定的格式。
Salt使用YAML风格的配置文件。
YAML要求严格注意间距和缩进,以确保正确的解释。
通常,每个缩进级别将是两个空格。 我们需要现在的最后一个项目是
pillar_roots
字典。 支柱系统用于存储可以限制到某些节点的配置数据。 这允许我们自定义行为并防止敏感数据被与数据不相关的基础架构组件看到。 这种格式反映了
file_roots
准确。 我们的支柱数据的位置将是
/srv/pillar
:
/ etc / salt / master
pillar_roots:
base:
- /srv/pillar
保存并在完成后关闭文件。 我们可以通过键入以下命令来创建我们在配置文件中引用的目录:
sudo mkdir -p /srv/{salt,pillar}
在Salt Master上配置Minion Daemon
我们还要配置我们的Salt主服务器来接受Salt命令。我们可以通过在我们的服务器上配置minion守护进程来实现。打开文件开始:sudo nano /etc/salt/minion
我们需要更改的唯一项目是主服务器的位置。由于两个守护程序都在同一主机上运行,我们可以将地址设置为本地环回接口:
/ etc / salt / minion
master: 127.0.0.1
保存并在完成后关闭文件。
重新启动服务并接受Salt键
现在我们已经设置了Salt master和minion配置,重新启动服务以接受我们的更改:sudo restart salt-master
sudo restart salt-minion
在Salt主机可以与一个minion(甚至在同一个服务器)安全地通信之前,它必须接受该minion的键。这是一个安全功能。您可以通过键入以下内容查看所有已接受和待处理的键:
sudo salt-key --list all
如果您的守护程序配置正确并且已重新启动,您应该在“未接受的密钥”部分中看到Salt主服务器的密钥。在我们的例子中,我们的Salt主机托管在一个名为“sm”的机器上:
OutputAccepted Keys:
Denied Keys:
Unaccepted Keys:
sm
Rejected Keys:
你可以通过服务器的仆从ID(接受这个关键
sm
在这种情况下
) to the
Salt键
command with the
-a`标志:
sudo salt-key -a sm
如果再次检查,您的密钥将移动到“接受的密钥”部分:
sudo salt-key --list all
OutputAccepted Keys:
sm
Denied Keys:
Unaccepted Keys:
Rejected Keys:
您可以验证您的Salt主服务器现在通过键入以下命令来响应Salt命令:
sudo salt '*' test.ping
你应该得到一个回应,看起来像这样:
Outputsm:
True
您的Salt主服务器现在已启动并正在运行。
结论
在本指南中,我们开始通过运行Salt主服务器的初始配置来管理我们的基础设施。这是我们管理设计中的中央服务器,将用作控制中心和配置数据存储库。 在 接下来的引导在这个系列中,我们将配置我们的Salt主服务器与我们DigitalOcean API证书。 我们将创建一个提供配置,允许我们使用连接到我们的帐户DigitalOceansalt-cloud
命令以及创建和管理云资源。我们将创建基础架构机器的配置文件,以便我们可以定义每个服务器的属性。