SaltStack 术语和概念简介

简介

Salt或SaltStack是一个远程执行工具和配置管理系统。远程执行功能允许管理员通过灵活的目标系统在不同的机器上并行运行命令。配置管理功能建立了一个客户端-服务器模型,以快速、轻松、安全地使基础设施组件符合给定的策略。

在本指南中,我们将讨论开始有效学习使用盐所需的一些基本概念和术语。

盐机角色

就配置管理系统而言,SALT的控制结构相当简单。在典型的设置中,只有两类不同的机器。

Salt主服务器 是控制基础架构并为其管理的服务器规定策略的机器。它既是配置数据的存储库,也是启动远程命令并确保其他机器状态的控制中心。主服务器上安装了一个名为salt-master的守护程序来提供此功能。

虽然可以使用无主机配置来控制基础设施,但大多数设置都受益于Salt Master中提供的高级功能。事实上,对于更大的基础设施管理,Salt能够将通常与主服务器相关的某些组件和任务委托给专用服务器。它还可以在分层主配置中运行,在该配置中,命令可以通过较低的主计算机进行中继。

小黄人

Salt管理的服务器被称为奴才 。每台被管理的机器上都安装了一个名为`salte-minion‘的守护进程,并将其配置为与主服务器通信。从属程序负责执行主程序发送的指令,报告作业的成功情况,并提供有关底层主机的数据。

盐类组件如何通信

默认情况下,SALT主从者使用ZeroMQ消息库进行通信。这为各方之间提供了极高性能的网络通信,使Salt能够快速发送消息和数据。因为ZeroMQ是一个库,而不是一个独立的服务,所以这个功能在本机的salt-master‘和salt-minion’守护进程中可用。

使用ZeroMQ时,Salt维护一个公钥系统来验证主从者身份。在第一次引导时,minion会生成一个密钥对,并将其凭据发送到它配置为联系的主服务器。然后,主人可以在验证了奴才的身份后接受该密钥。然后,双方可以使用用密钥加密的ZeroMQ快速安全地通信。

如果由于某种原因无法在节点上安装‘salt-minion’守护进程,则Salt还可以通过SSH发出命令。提供此传输选项是为了方便,但它会相当大地降低性能,并且在某些情况下可能会导致其他SALT命令的复杂性。出于性能、安全性和简单性的考虑,强烈建议您尽可能使用`salt-minion‘守护进程。

食盐术语

在深入了解Salt之前,最好熟悉一下将要使用的一些术语。SALT有许多强大的功能,但一开始可能很难将名称与其功能相匹配。让我们来看看您可能会看到的一些更一般的术语。

远程执行:执行模块和函数

SALT试图区分其远程执行和配置管理功能。远程执行能力由执行模块 提供。执行模块是一组相关的** 函数** ,用于对奴才执行工作。

虽然Salt包括允许您在minion上运行任意外壳命令的函数,但执行模块背后的想法是提供一种简明的机制来执行命令,而不必外壳,并提供有关如何完成该过程的详细说明。模块的使用使Salt能够抽象出系统之间的潜在差异。您可以从运行Linux或BSD的助手那里获得类似的信息,尽管收集这些数据的实际机制可能不同。

Salt附带了一系列内置执行模块,以提供开箱即用的功能。 管理员还可以编写自己的模块或包含社区编写的模块来扩展可以在奴才机器上执行的命令库。

配置管理:状态、公式、模板

可以通过创建配置文件存储库来访问Salt的配置管理功能。这些存储库中包含的文件可以是几种不同的类型。

状态和公式

Salt的配置管理部分主要使用 state 系统实现。

状态系统使用 状态模块 ,它与上面描述的执行模块不同。 幸运的是,状态模块和执行模块往往彼此非常紧密地镜像。 状态系统的名称非常恰当,因为它允许管理员描述系统应该处于的状态。 与执行模块一样,大多数状态模块表示功能快捷方式,并为许多常见操作提供简单的语法。 这有助于保持可读性,并消除了在配置管理文件本身中包含复杂逻辑的必要性。

SALT公式 是一组状态模块调用,其目的是产生特定的结果。这些配置管理文件描述了应用公式后系统应该是什么样子。默认情况下,这些代码是以YAML数据序列化格式编写的,这在高可读性和机器友好性之间提供了一个非常好的中间地带。

Salt管理员可以通过将奴才映射到特定的配方集来应用配方。还可以根据需要以特殊方式应用公式。奴才将执行在其中找到的状态模块,以使其系统符合所提供的策略。

SaltStack组织和社区创建的盐公式的良好集合可在此GitHub account.]中找到

模板数量

模板化 允许更灵活地编写盐公式等文件。模板可以使用有关奴才的可用信息来构造公式或配置文件的定制版本。默认情况下,Salt使用JINJA模板格式,该格式为决策提供替代功能和简单的逻辑结构。

呈现器 是运行模板以生成有效状态或配置文件的组件。呈现器由构成输入的模板格式和将作为输出生成的数据序列化格式定义。考虑到上述缺省值,缺省呈现器处理JJJA模板以生成YAML文件。

查询并向小黄人发送信息

为了管理大量系统,Salt需要有关每个主机系统的一些信息。上述模板可以使用与每个系统相关联的数据来定制每个奴才的行为。有几个不同的系统可以查询此信息或将其分配给主机。

谷物

盐粒是由奴才收集和维护的信息片段,主要涉及其底层主机系统。 这些通常由'salt-minion'守护进程收集,并在请求时传递回主进程。 此功能可以用于许多不同的目的。

例如,可以使用粒度数据来为远程执行或配置管理从奴才池中确定特定的节点子集。如果你想看到你的Ubuntu服务器的正常运行时间,Grains只允许你瞄准这些机器。

Grains还可以用作配置更改或命令的参数。例如,您可以使用Grains来获取与eth0接口相关联的IPv4地址,以更改配置文件或作为命令的参数。

管理员还可以将谷物分配给奴才。例如,使用GRAME为服务器分配角色是很常见的。然后可以使用它来定位与上面的操作系统示例类似的节点子集。

支柱

虽然可以将谷物分配给奴才,但绝大多数配置变量将通过支柱 系统进行分配。在Salt中,一个柱代表一个键值存储,奴才可以使用它来检索任意分配的数据。它起到字典数据结构的作用,可以嵌套或分层以用于组织目的。

在分配价值方面,支柱提供了一些优于晶粒系统的重要优势。 最重要的是,柱子数据只对分配给它的小兵可用。其他小兵将无法访问存储在其中的值。 这使得它非常适合存储特定于节点或节点子集的敏感数据。 例如,秘密密钥或数据库连接字符串通常在支柱配置中提供。

支柱数据通常在配置管理上下文中用作将可变数据注入配置模板的一种方式。SALT提供了一系列模板格式,用于将配置文件的可变部分替换为特定于将应用配置文件的节点的项。GRAME也经常以这种方式用于引用主机数据。

我的

SALTMILE 是主服务器上的一个区域,可以在其中存储对奴才定期执行的命令的结果。该系统的目的是收集在minion机器上运行的任意命令的结果。然后,您的整个基础架构中的其他组件和助手都可以查询此全局存储。

盐矿只存储每次命令运行的最新结果,这意味着如果您需要访问历史数据,它将不会对您有所帮助。该矿场的主要目的是提供来自Minion机器的最新信息,作为对现有谷物数据的灵活补充。奴才可以使用地雷系统查询其对手的数据。可以在每个助手的基础上配置助手刷新挖掘中的数据的间隔。

附加功能

SALT提供了一些不能很好地适应上述类别的其他系统。

反应堆

Salt反应堆 系统提供了一种触发操作以响应生成的事件的机制。在Salt中,在整个基础设施中发生的更改将导致saltminionsaltmaster守护进程在ZeroMQ消息总线上生成事件。反应堆系统监视该总线,并将事件与其配置的反应堆进行比较,以便做出适当的响应。

反应堆系统的主要目标是提供一个灵活的系统,用于创建自动化的态势反应。例如,如果您开发了自动伸缩策略,您的系统将自动创建节点来动态满足您的资源需求。每个新节点都会触发一个事件。可以设置一个反应堆来监听这些事件并配置新节点,将其合并到现有的基础设施中。

跑友

SALT运行器 是在主服务器上执行的模块,而不是从属服务器。一些运行程序是通用实用程序,用于检查系统各部分的状态或进行维护。有些是功能强大的应用程序,能够在更大范围内协调您的基础设施。

退货者

SALT返回器 用于指定将向其发送对奴才运行的操作的结果的替代位置。默认情况下,奴才会将他们的数据返回给主程序。返回者允许管理员将返回数据重新路由到不同的目的地。通常,这意味着将结果返回到由返回者指定的目的地,并返回到启动minion命令的进程。

大多数情况下,返回者会将结果传递给数据库系统、指标或日志记录服务。这为将任意数据输入这些系统提供了一种灵活的方法。返回器还可以用于收集特定于盐的数据,如作业缓存和事件数据。

盐分命令

SALT提供了许多命令来利用上面概述的组件。这些工具在功能方面有一些显著的交叉,但我们尝试在下面强调它们的主要功能。

*salt-master :这是master daemon进程。 您可以直接使用此命令启动主服务,或者更通常地,通过init脚本或服务文件启动主服务。 *salt-minion :同样是minion daemon进程,用于与master通信并执行命令。 大多数用户也会从init脚本或服务文件启动此功能。 *salt-key :用于管理奴才公钥。 此工具用于查看当前密钥,并对潜在奴才发送的公钥做出决定。 它还可以生成密钥以放置在带外的奴才上。 *salt :此命令用于目标奴才,以便运行ad-hoc执行模块。 这是用于远程执行的主要工具。 *salt-ssh :此命令允许您使用SSH作为ZeroMQ传输机制的替代方案。 *salt-run :用于在主服务器上运行runner模块。 *salt-call :该命令用于在您登录的奴才上直接运行执行模块。 这通常用于通过绕过主设备来调试有问题的命令。 *salt-cloud :此命令用于控制和调配来自多个不同提供商的云资源。 新的奴才可以很容易地旋转和自举。

还有一些其他命令,如salt-apisalt-cpsalt-syndic,这些命令不太常用。

结论

既然您已经熟悉了基本的SaltStack术语,并且对您将遇到的工具有了高度的了解,您就可以开始设置Salt来控制您的基础设施了。在Next guide,]中,我们将介绍如何在Ubuntu14.04服务器上安装和配置Salt主服务器。我们还将演示如何配置新的minion服务器以将它们置于您的主人的管理之下。

Published At
Categories with 技术
comments powered by Disqus