介绍
Salt,或 SaltStack,是一个远程执行工具和配置管理系统。 远程执行功能允许管理员在各种机器上与灵活的目标系统并行运行命令。 配置管理功能建立了一个客户端-服务器模型,以快速、轻松、安全地使基础设施组件符合给定策略。
在本指南中,我们将讨论开始有效学习使用 Salt 所需的一些基本概念和术语。
盐机角色
Salt的控制结构与配置管理系统一样简单。 在典型的设置中,只有两类不同的机器。
掌握
Salt master 是控制基础设施并为其管理的服务器规定策略的机器。 它既可以作为配置数据的存储库,也可以作为启动远程命令并确保其他机器状态的控制中心。 一个名为 salt-master
的守护进程安装在主服务器上以提供此功能。
虽然可以使用无主配置控制基础设施,但大多数设置都受益于 Salt Master 中可用的高级功能。 事实上,对于更大的基础设施管理,Salt 能够将通常与主服务器关联的某些组件和任务委托给专用服务器。 它还可以在分层主机配置中运行,其中命令可以通过较低的主机中继。
奴才
Salt 管理的服务器称为 minions。 一个名为 salt-minion
的守护程序安装在每台受管机器上,并配置为与主机通信。 minion 负责执行 master 发送的指令,报告作业是否成功,并提供有关底层主机的数据。
盐成分如何通信
默认情况下,Salt master 和 minions 使用 ZeroMQ 消息传递库进行通信。 这在各方之间提供了极高性能的网络通信,允许 Salt 快速发送消息和数据。 因为 ZeroMQ 是一个库而不是一个独立的服务,所以这个功能在 salt-master
和 salt-minion
守护进程中是可用的。
在使用 ZeroMQ 时,Salt 维护一个公钥系统来验证 master 和 minion。 在第一次启动时,minion 生成一个密钥对并将其凭据发送到它配置为联系的主服务器。 主人在验证了仆从的身份后,就可以接受这个密钥。 然后,双方可以使用使用密钥加密的 ZeroMQ 快速安全地进行通信。
如果由于某种原因无法在节点上安装 salt-minion
守护程序,Salt 也可以通过 SSH 发出命令。 提供此传输选项是为了方便,但它会显着降低性能,并且在某些情况下可能会导致其他 Salt 命令的复杂性。 强烈建议您尽可能使用 salt-minion
守护程序,以提高性能、安全性和简单性。
盐术语
在深入了解 Salt 之前,最好先熟悉一些将要使用的术语。 Salt 有许多强大的功能,但一开始可能很难将名称与其功能相匹配。 让我们看一下您可能会看到的一些更通用的术语。
远程执行:执行模块和函数
Salt 试图区分其远程执行和配置管理功能。 远程执行能力由执行模块提供。 执行模块是一组相关的函数,它们在minions上执行工作。
虽然 Salt 包含允许您在 minions 上运行任意 shell 命令的功能,但执行模块背后的想法是提供一种简洁的机制来执行命令而无需“脱壳”,并提供有关如何完成该过程的详细说明。 模块的使用允许 Salt 抽象系统之间的底层差异。 您可以从运行 Linux 或 BSD 的 minions 获得类似的信息,即使收集该数据的实际机制会有所不同。
Salt 提供了一些不错的 内置执行模块 来提供开箱即用的功能。 管理员还可以编写自己的模块或包含社区编写的模块,以扩展可以在minion机器上执行的命令库。
配置管理:状态、公式和模板
可以通过创建配置文件的存储库来访问 Salt 的配置管理功能。 这些存储库中包含的文件可以是几种不同的类型。
状态和公式
Salt 的配置管理部分主要使用 state 系统实现。
状态系统使用状态模块,这与上面描述的执行模块不同。 幸运的是,状态和执行模块往往彼此非常密切地镜像。 状态系统被恰当地命名,因为它允许管理员描述系统应该处于的状态。 与执行模块一样,大多数状态模块代表功能快捷方式,并为许多常见操作提供简单的语法。 这有助于保持可读性并消除在配置管理文件本身中包含复杂逻辑的必要性。
Salt formulas 是一组状态模块调用,旨在产生特定结果。 这些配置管理文件描述了应用公式后系统的外观。 默认情况下,这些都是以 YAML 数据序列化格式编写的,它在高可读性和机器友好性之间提供了一个很好的中间地带。
Salt管理员可以通过将minions映射到特定的公式集来应用公式。 公式也可以根据需要以特别的方式应用。 Minions 将执行其中的状态模块,以使其系统符合提供的策略。
SaltStack 组织和社区创建的一个很好的 Salt 公式集合可以在 这个 GitHub 帐户 中找到。
模板
Templating 允许以更灵活的方式编写 Salt 公式和其他文件。 模板可以使用有关 minions 的可用信息来构建公式或配置文件的自定义版本。 默认情况下,Salt 使用 Jinja 模板格式,该格式为决策提供替代功能和简单的逻辑结构。
Renderers 是运行模板以生成有效状态或配置文件的组件。 渲染器由构成输入的模板格式和将作为输出生成的数据序列化格式定义。 考虑到上述默认设置,默认渲染器会处理 Jinja 模板以生成 YAML 文件。
查询和分配信息给 Minions
为了管理大量系统,Salt 需要有关每个主机系统的一些信息。 上述模板可以使用与每个系统关联的数据来定制每个 minion 的行为。 有几个不同的系统可以查询或分配这些信息给主机。
谷物
Salt grains 是由 minion 收集和维护的信息片段,主要涉及其底层主机系统。 这些通常由 salt-minion
守护程序收集,并根据请求传回主服务器。 此功能可用于许多不同的目的。
例如,grain 数据可用于针对 minions 池中的特定节点子集进行远程执行或配置管理。 如果您想查看 Ubuntu 服务器的正常运行时间,Grains 允许您仅针对这些机器。
Grains 也可以用作配置更改或命令的参数。 例如,您可以使用 grain 获取与 eth0
接口关联的 IPv4 地址,以更改配置文件或作为命令的参数。
管理员也可以将grain分配给minions。 例如,使用 grain 为服务器分配“角色”是相当普遍的。 然后,这可以用于定位节点子集,类似于上面的操作系统示例。
支柱
虽然可以将grains分配给minions,但绝大多数配置变量将通过pillars系统分配。 在 Salt 中,柱子代表一个键值存储,minion 可以使用它来检索任意分配的数据。 这用作字典数据结构,可以嵌套或分层以用于组织目的。
在分配值方面,Pillar 提供了一些优于谷物系统的重要优势。 最重要的是,支柱数据仅对分配给它的奴才可用。 其他 minions 将无法访问其中存储的值。 这使其成为存储特定于节点或节点子集的敏感数据的理想选择。 例如,密钥或数据库连接字符串通常在支柱配置中提供。
支柱数据通常在配置管理上下文中用作将可变数据注入配置模板的一种方式。 Salt 提供了一系列模板格式,用于将配置文件的可变部分替换为特定于将应用它的节点的项目。 谷物也经常以这种方式用于引用主机数据。
矿
Salt mine 是主服务器上的一个区域,可以存储在 minions 上定期执行的命令的结果。 该系统的目的是收集在 minion 机器上运行的任意命令的结果。 然后,整个基础架构中的其他组件和 minions 可以查询这个全局存储。
Salt mine 仅存储每个命令运行的最新结果,这意味着如果您需要访问历史数据,它不会帮助您。 该矿的主要目的是提供来自 minion 机器的最新信息,作为对现有谷物数据的灵活补充。 Minions 可以使用 mine 系统查询有关其对应方的数据。 minion刷新矿井数据的时间间隔可以按minion配置。
附加功能
Salt 提供了一些其他系统,它们不能很好地融入上述类别。
反应堆
Salt reactor 系统提供了一种触发动作以响应生成的事件的机制。 在 Salt 中,整个基础架构中发生的更改将导致 salt-minion
或 salt-master
守护程序在 ZeroMQ 消息总线上生成事件。 反应器系统监视此总线并将事件与其配置的反应器进行比较,以便做出适当的响应。
反应堆系统的主要目标是提供一个灵活的系统来创建自动情境响应。 例如,如果您制定了自动扩展策略,您的系统将自动创建节点以动态满足您的资源需求。 每个新节点都会触发一个事件。 可以设置一个反应器来监听这些事件并配置新节点,将其整合到现有的基础设施中。
跑步者
Salt runners 是在主服务器而不是 minions 上执行的模块。 一些运行器是通用实用程序,用于检查系统各个部分的状态或进行维护。 有些是功能强大的应用程序,能够在更广泛的范围内编排您的基础架构。
返回者
Salt returners 用于指定将在 minion 上运行的操作结果发送到的替代位置。 默认情况下,minions 将它们的数据返回给 master。 返回者允许管理员将返回数据重新路由到不同的目的地。 通常,这意味着将结果返回到由返回者 和 指定的目的地,返回到启动 minion 命令的进程。
大多数情况下,返回者会将结果传递给数据库系统或指标或日志服务。 这为将任意数据输入这些系统提供了一种灵活的方法。 Returners 还可用于收集特定于 Salt 的数据,例如作业缓存和事件数据。
盐命令
Salt 提供了许多命令来利用上述组件。 这些工具之间在功能方面存在一些重要的交叉,但我们试图在下面强调它们的主要功能。
- salt-master:这是主守护进程。 您可以使用此命令直接启动主服务,或者更典型的是通过初始化脚本或服务文件启动主服务。
- salt-minion:同理,这是minion daemon进程,用于与master通信并执行命令。 大多数用户也会从初始化脚本或服务文件开始。
- salt-key:该工具用于管理minion公钥。 该工具用于查看当前密钥并就潜在奴才发送的公钥做出决策。 它还可以生成密钥以将其放置在带外的 minions 上。
- salt:此命令用于以 minions 为目标,以运行 ad-hoc 执行模块。 这是用于远程执行的主要工具。
- salt-ssh:此命令允许您使用 SSH 作为 ZeroMQ 的替代传输机制。
- salt-run:该命令用于在主服务器上运行运行器模块。
- salt-call:此命令用于直接在您登录的 minion 上运行执行模块。 这通常用于通过绕过 master 来调试有问题的命令。
- salt-cloud:此命令用于控制和配置来自许多不同提供商的云资源。 新的奴才可以很容易地启动和引导。
还有一些其他命令,例如 salt-api
、salt-cp
和 salt-syndic
,它们并不经常使用。
结论
现在您已经熟悉了 SaltStack 的基本术语,并且对您将遇到的工具负责什么有了高度的了解,您可以开始设置 Salt 来控制您的基础架构。 在 下一篇指南 中,我们将介绍如何在 Ubuntu 14.04 服务器上安装和配置 Salt Master 服务器。 我们还将演示如何配置新的 minion 服务器以将它们置于 master 的管理之下。