SaltStack基础设施:安装SaltMaster
介绍
SaltStack 或 Salt 是一个功能强大的远程执行和配置管理系统,可用于以结构化、可重复的方式轻松管理基础架构。 在本系列中,我们将演示一种从 Salt 部署管理开发、登台和生产环境的方法。 我们将使用 Salt 状态系统来编写和应用可重复的操作。 这将使我们能够安全地破坏我们的任何环境,因为我们知道我们可以在以后轻松地将它们以相同的状态重新上线。
在本文中,我们将介绍我们将构建的各种环境,并将 Salt Master 守护程序安装到我们的主服务器上以开始使用。 这是存放我们的配置指令、控制我们的基础设施节点和管理我们的需求的核心系统。
先决条件
要完成本指南,您需要一个干净的 Ubuntu 14.04 服务器。 此服务器需要启用专用网络。
在此服务器上,您应该有一个配置有 sudo
权限的非 root 帐户。 您可以在我们的 Ubuntu 14.04 初始服务器设置指南 中了解如何设置此类帐户。
本系列的后续文章将使用 salt-cloud
命令使用 DigitalOcean 云启动基础架构服务器。 如果您愿意,您可以使用其他云提供商,甚至可以使用 vagrant 等软件的虚拟实例。 但是,这超出了本指南的范围,您必须在这些领域进行自己的研究。
我们将构建的基础设施概述
我们使用 salt-cloud
启动的服务器将代表我们想要为应用程序开发维护的三个环境。 因为我们的 Salt 主服务器将维护我们需要的每个服务器的配置,所以当我们不使用这些服务器时,我们将能够关闭它们。 例如,如果您的开发团队因假期而停止工作,您可以关闭非生产环境。 当您从休息中回来时,您可以轻松地重建它们并在这个全新的基础架构之上重新部署您的应用程序。
我们将把示例基础设施分解为开发、登台和生产。
我们的开发基础设施将是我们最谦虚的。 它将只包含一个 Web 服务器和一个关联的数据库服务器。 解耦数据库和 Web 服务器将足以确保我们的应用程序是在考虑远程数据的情况下构建的。
暂存环境将更加强大。 您会发现的大多数建议都建议将您的暂存环境配置为尽可能与您的预期生产环境相似。 考虑到这一点,我们的暂存环境将由两个 Web 服务器组成,以分散流量负载。 我们将使用负载均衡器在这两个服务器之间分配流量。 在数据库方面,我们将启动两个数据库服务器。 我们将在这两台服务器之间设置主-主复制,以便两者都可以接受写入请求。 主-主复制有一些缺点,但它允许我们在应用程序设计中有点懒惰(任何数据库服务器都可以接收写入),它允许我们演示一个相当复杂的配置管理场景。
正如我们之前所说,生产环境将与暂存环境非常相似。 我们设计的唯一区别是预先增加了一个负载均衡器,以提供高可用性和故障转移。 如果您愿意,您还可以为生产负载使用更高容量的服务器。 这通常是充分处理流量需求所必需的,即使它使评估暂存环境中的负载变得更加困难。
请记住,虽然我们正在为上面列出的环境创建配置,但它们不必同时运行。 在测试期间尤其如此。 在本系列中,您可能在任何时候都只有几台服务器处于活动状态。 从成本的角度来看,这是可取的,但是根据需要破坏和启动我们的环境也可以确保我们的环境引导是健壮和可重复的。
现在您已经了解了我们将要配置的环境的总体布局,我们可以让 Salt Master 启动并运行。
安装 Salt Master
首先以具有 sudo
权限的非 root 用户身份登录您打算设置为 Salt Master 的服务器。
在服务器上安装 Salt Master 守护程序有很多 几种不同的方式 。 有可用于 Ubuntu 的 PPA,但这些通常可能已过时。 规划和管理配置管理软件的最佳方法是针对特定版本。 这将允许您以有计划和结构化的方式更新您的系统(经过全面测试),而不是在安装时依赖存储库中可用的任何内容。
对于本指南,我们将针对 Salt 版本 v2015.8.0,这是撰写本文时的最新稳定版本。 如果您选择不同的版本或安装方法,请注意本指南中的过程可能无法按书面说明进行。
安装特定版本的最简单方法是使用 SaltStack 的引导脚本。 通过键入以下命令将最新的引导脚本下载到您的主目录:
cd ~ curl -L https://bootstrap.saltstack.com -o install_salt.sh
随意查看下载脚本的内容,直到您对它将执行的操作感到满意为止。
当您准备好安装 Salt Master 时,您可以使用 sh
shell 运行脚本。 我们将传递给它 -P
标志,以表明我们可以允许使用 Python 包管理器 pip
安装依赖项。 我们还需要包含 -M
标志来指示我们要安装主守护程序。 通过包含 git v2015.8.0
来完成命令,它告诉脚本从 SaltStack GitHub repo 获取指定的发布标签并将其用于安装:
sudo sh install_salt.sh -P -M git v2015.8.0
该脚本将安装所有必要的依赖项,从 git
存储库中提取指定的版本,并安装 Salt Master 和 Minion 守护程序,以及一些相关的 Salt 实用程序。
安装应该相当简单。 接下来,我们可以开始配置我们的 Salt Master。
配置 Salt Master
我们需要做的第一件事是编辑主 Salt Master 配置文件。 现在用 sudo
权限打开它:
sudo nano /etc/salt/master
配置文件相当长并且注释很好。 当您希望偏离默认值时,您只需要取消注释并设置选项。 我们只需要进行一些编辑即可开始。
首先,在文件中找到 file_recv
选项。 启用此功能允许 Salt Minions 将文件发送到 Salt Master。 这在创建状态以获取您希望修改的配置文件时非常有用,但是它确实存在一些风险。 我们将在本指南期间启用它。 如果您愿意,您可以在之后禁用它:
/etc/salt/master
file_recv: True
接下来,我们需要设置 file_roots
字典。 Salt master 包含一个文件服务器,用于为整个基础架构存储和提供文件。 这包括配置管理状态文件本身,以及由我们的系统管理的任何 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 守护进程
我们还想配置我们的 Salt 主服务器以接受 Salt 命令。 我们可以通过在我们的服务器上配置 minion 守护进程来做到这一点。 打开文件开始:
sudo nano /etc/salt/minion
我们需要在这里更改的唯一项目是主服务器的位置。 由于两个守护进程都在同一台主机上运行,我们可以将地址设置为本地环回接口:
/etc/salt/minion
master: 127.0.0.1
完成后保存并关闭文件。
重新启动服务并接受 Salt Keys
现在我们已经有了 Salt master 和 minion 配置,重新启动服务以获取我们的更改:
sudo restart salt-master sudo restart salt-minion
在 Salt Master 可以与 Minion 安全通信之前(即使在同一服务器上),它必须接受 Minion 的密钥。 这是一项安全功能。 您可以通过键入以下内容查看所有已接受和待处理的密钥:
sudo salt-key --list all
如果您的守护程序配置正确并重新启动,您应该会在“未接受的密钥”部分看到您的 Salt 主服务器的密钥。 在我们的例子中,我们的 Salt Master 托管在一台名为“sm”的机器上:
OutputAccepted Keys: Denied Keys: Unaccepted Keys: sm Rejected Keys:
您可以通过传递服务器的 minion ID 来接受此密钥(sm
在这种情况下为 ) to the
salt-keycommand 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 主服务器的初始配置来开始管理我们的基础架构。 这是我们管理设计中的中央服务器,将用作控制中心和配置数据的存储库。
在本系列的 下一个指南 中,我们将使用我们的 DigitalOcean API 凭据配置我们的 Salt 主服务器。 我们将创建一个提供商配置,允许我们使用 salt-cloud
命令连接到我们的 DigitalOcean 帐户并创建和管理云资源。 我们将为我们的基础设施机器创建配置文件,以便我们可以为每个服务器定义属性。