SaltStack – 快速指南

SaltStack – 快速指南


SaltStack – 概述

在本章中,我们将学习 SaltStack 的基础知识。SaltStack 的远程执行功能允许管理员在各种机器上并行运行命令以及灵活的目标系统。Salt 配置管理建立了一个 master-minion 模型,以快速、轻松、灵活和安全地使基础设施组件符合给定的策略。

什么是盐栈?

Salt 是一个非常强大的自动化框架。Salt 架构基于远程执行命令的思想。所有网络都是围绕远程执行的某些方面设计的。这可以像要求远程 Web 服务器显示静态网页一样简单,也可以像使用 shell 会话以交互方式向远程服务器发出命令一样复杂。Salt 是一种更复杂的远程执行类型的示例。

Salt 旨在允许用户明确地直接针对多台机器发出命令。Salt 是基于控制一个或多个Minion的 Master 的想法命令通常从 Master 发送到目标组 Minion,然后执行命令中指定的任务,然后将结果数据返回给 Master。master 和 minions 之间的通信发生在ZeroMQ 消息总线上

SaltStack 模块与支持的 minion 操作系统通信。盐大师在Linux上默认运行,但任何操作系统可以是一个奴才,和目前的Windows,VMware vSphere和BSD Unix的变种很好的支持。Salt Master 和 Minions 使用密钥进行通信。当 Minion 首次连接到 master 时,它会自动将密钥存储在 master 上。SaltStack 还提供Salt SSH,它提供“无代理”系统管理。

需要 SaltStack

SaltStack 是为速度和规模而构建的。这就是为什么它被用于管理具有数万台服务器的大型基础设施,包括 LinkedIn、WikiMedia 和 Google。

想象一下,您有多个服务器并且想要对这些服务器执行操作。您需要登录到每一个并一次对每一个做这些事情,然后您可能想要做一些复杂的事情,例如安装软件,然后根据某些特定标准配置该软件。

让我们假设您有 10 台甚至 100 台服务器。想象一下,一次登录每个服务器,在这 100 台机器上发出相同的命令,然后在所有 100 台机器上编辑配置文件成为一项非常乏味的任务。为了克服这些问题,您希望一次更新所有服务器,只需输入一个命令即可。SaltStack 为您提供了所有此类问题的解决方案。

SaltStack的特点

SaltStack 是一个开源配置管理软件和远程执行引擎。Salt 是一个命令行工具。虽然用 Python 编写,但 SaltStack 配置管理与语言无关且简单。Salt 平台使用推送模型通过 SSH 协议执行命令。默认配置系统是YAMLJinja 模板Salt 主要与PuppetChefAnsible竞争

与其他竞争工具相比,Salt 提供了许多功能。下面列出了其中一些重要功能。

  • 容错– Salt Minion 可以通过将 master 配置参数配置为所有可用 master 的 YAML 列表来一次连接到多个 master。任何 master 都可以将命令定向到 Salt 基础架构。

  • 灵活– Salt 的整个管理方法非常灵活。它可以在同一环境中实施以遵循最流行的系统管理模型,例如代理和服务器、仅代理、仅服务器或以上所有模型。

  • 可扩展的配置管理– SaltStack 旨在处理每个 master 的一万个 minion。

  • 并行执行模型– Salt 可以启用命令以并行方式执行远程系统。

  • Python API – Salt 提供了一个简单的编程接口,它被设计为模块化且易于扩展,使其易于模塑到不同的应用程序中。

  • 易于设置– Salt 易于设置并提供单一的远程执行架构,可以管理任意数量服务器的不同需求。

  • Language Agnostic – Salt 状态配置文件、模板引擎或文件类型支持任何类型的语言。

SaltStack的好处

简单且功能丰富的系统,Salt 提供了许多好处,它们可以总结如下 –

  • Robust – Salt 是功能强大且健壮的配置管理框架,适用于数以万计的系统。

  • Authentication – Salt 管理用于身份验证的简单 SSH 密钥对。

  • 安全– Salt 使用加密协议管理安全数据。

  • Fast – Salt 是非常快速、轻量级的通信总线,为远程执行引擎提供基础。

  • 虚拟机自动化– Salt Virt 云控制器功能用于自动化。

  • 基础设施即数据,而不是代码– Salt 提供了一个简单的部署、模型驱动的配置管理和命令执行框架。

ZeroMQ 简介

Salt基于ZeroMQ库,它是一个可嵌入的网络库。它是轻量级且快速的消息传递库。基本实现是在C/C++ 中,并且可以使用包括Java.Net在内的多种语言的本机实现

ZeroMQ 是一种无代理的对等消息处理。ZeroMQ 允许您轻松设计复杂的通信系统。

ZeroMQ 带有以下五种基本模式 –

  • 同步请求/响应– 用于发送请求并接收每个发送的后续回复。

  • 异步请求/响应– 请求者通过发送请求消息并等待响应消息来启动对话。Provider 等待传入的 Request 消息并回复 Response 消息。

  • 发布/订阅– 用于将数据从单个进程(例如发布者)分发到多个接收者(例如订阅者)。

  • 推/拉– 用于将数据分发到连接的节点。

  • Exclusive Pair – 用于将两个对等点连接在一起,形成一对。

ZeroMQ 是一种高度灵活的网络工具,用于在集群、云和其他多系统环境之间交换消息。ZeroMQ 是SaltStack 中提供默认传输库

SaltStack – 架构

SaltStack 的架构旨在与任意数量的服务器一起工作,从本地网络系统到跨不同数据中心的其他部署。架构是一个简单的服务器/客户端模型,将所需的功能内置到一组守护进程中。

请看下图。它展示了 SaltStack 架构的不同组件。

盐盘使用

  • SaltMaster – SaltMaster 是主守护进程。SaltMaster 用于向 Salt slaves 发送命令和配置。一个master可以管理多个master。

  • SaltMinions – SaltMinion 是奴隶守护进程。Salt Minion 从 SaltMaster 接收命令和配置。

  • 执行– 从命令行针对一个或多个 Minion执行的模块和 Adhoc 命令。它执行实时监控。

  • 公式– 公式是预先编写的盐状态。它们与 Salt States 本身一样开放,可用于安装包、配置和启动服务、设置用户或权限以及许多其他常见任务等任务。

  • Grains – Grains 是一个界面,提供特定于 Minion 的信息。通过grains界面可用的信息是静态的。当 Salt Minion 启动时,Grains 会被加载。这意味着谷物中的信息是不变的。因此,grains 信息可能与正在运行的内核或操作系统有关。它不区分大小写。

  • Pillar – 支柱是一个接口,用于生成和存储特定于特定 minion 的高度敏感数据,例如加密密钥和密码。它将数据存储在键/值对中,并且数据的管理方式与 Salt State Tree 类似。

  • Top File – 将 Salt 状态和支柱数据与 Salt Minion 匹配。

  • Runners – 它是位于 SaltMaster 内部的一个模块,执行诸如作业状态、连接状态、从外部 API 读取数据、查询连接的 salt minion 等任务。

  • Returners – 将数据从 Salt Minion 返回到另一个系统。

  • Reactor – 它负责在您的 SaltStack 环境中发生事件时触发反应。

  • SaltCloud – Salt Cloud 提供了一个强大的界面来与云主机交互。

  • SaltSSH – 在不使用 Salt Minion 的情况下在系统上通过 SSH 运行 Salt 命令。

在下一章中,我们将详细了解 SaltStack 的各种竞争对手及其功能。

SaltStack – 竞争对手

Salt、P​​uppet、Chef 和 A​​nsible 是领先的配置管理和编排工具,每个工具都采用不同的服务器自动化路径。它们旨在使配置和维护数十、数百甚至数千台服务器变得更加容易。

让我们了解 SaltStack 如何主要与 Puppet、Chef 和 A​​nsible 竞争。

平台和支持

以下是支持 SaltStack 及其竞争对手的所有平台的列表。

  • SaltStack – SaltStack 软件在 Linux、Windows、Mac OS X 和 UNIX 的许多版本上运行并管理。

  • Puppet – Red Hat Enterprise Linux、CentOS、Oracle Linux、Scientific Linux、SUSE Linux Enterprise Server 和 Ubuntu。

  • Chef – Chef 支持多个平台,例如 AIX、RHEL/CentOS、FreeBSD、OS X、Solaris、Microsoft Windows 和 Ubuntu。

  • Ansible – Linux、CentOS 和 Scientific Linux 通过 Extra Packages for Enterprise Linux (EPEL) 以及其他操作系统的 Fedora 发行版。

原始语言

  • SaltStack – Python

  • 木偶 – 红宝石

  • Chef – Ruby 及其 CLI 使用基于 Ruby 的 DSL

  • Ansible – Python

支持的语言

  • SaltStack – 任何语言

  • 木偶– 红宝石

  • Chef – Ruby 及其 CLI 使用基于 Ruby 的 DSL

  • Ansible – 任何语言

网页界面

  • SaltStack – Web UI 提供正在运行的作业、minion 状态和事件日志的视图。

  • Puppet – Web UI 处理报告、盘点和实时节点管理。

  • Chef – Web UI 可让您搜索和清点节点、查看节点活动并分配食谱、角色和节点。

  • Ansible – Web UI 可让您配置用户、团队和库存,并将 Playbooks 应用于库存。

管理工具

  • SaltStack – SaltStack Enterprise 定位为管理云和 IT 运营以及DevOps编排的主要工具

  • Puppet – Puppet 有两种版本,Puppet Enterprise 和开源 Puppet。除了提供开源 Puppet 的功能外,Puppet Enterprise 还提供用于节点管理的 GUI、API 和命令行工具。

  • Chef – CFEngine 是配置管理工具。

  • Ansible – Ansible 1.3 是管理的主要工具。

表现

  • SaltStack – Salt 旨在实现高性能和可扩展性。Salt 的通信系统使用 ZeroMQ 在 Salt Master 和 Minion 之间建立了一个持久的数据管道。

  • Puppet – 安全且高性能,无需代理。

  • Chef – Chef Server 最明显的问题是搜索;搜索速度很慢,并且不会同时从客户端请求。

  • Ansible – 安全、高性能且无需代理。

价格和价值

  • SaltStack – 免费开源版本。SaltStack Enterprise 每年每台机器的成本为 150 美元。

  • Puppet – 免费的开源版本。Puppet Enterprise 每年每台机器的成本为 100 美元。

  • Chef – 免费开源版本;Enterprise Chef 5 台机器免费,20 台机器每月 120 美元,50 台机器每月 300 美元。

  • Ansible – 免费开源版本;10 台机器免费使用 Ansible,然后每台机器每年 100 美元或 250 美元,具体取决于您需要的支持。

用法

  • SaltStack – 思科和 Rackspace 使用 SaltStack。它可以与任何基于云的平台集成。

  • Puppet – Puppet 被 Zynga、Twitter、纽约证券交易所、PayPal、迪士尼、谷歌等使用。

  • Chef – Chef 可以与基于云的平台集成,例如 Internap、Amazon EC2、Google Cloud Platform、OpenStack、Microsoft Azure 和 Rackspace。

  • Ansible – Ansible 可以部署到虚拟化环境、云环境,包括 Amazon Web Services、Cloud Stack、DigitalOcean 和 Google Cloud Platform 等。

SaltStack – 安装

在开始安装之前,您需要满足以下要求 –

  • Linux 服务器(最新的 Ubuntu 服务器)。

  • sudoroot 访问此服务器。

使用以下命令安装所有更新 –

sudo apt-get update

安装 SaltMaster

使用以下 apt-get 命令从存储库安装 SaltMaster。

sudo apt-get install salt-master

安装 Salt Minion

使用以下 apt-get 命令从存储库安装 Salt Minion。

sudo apt-get install salt-minion 

安装 Salt Syndic

使用以下 apt-get 命令从存储库安装 Salt Syndic。

sudo apt-get install salt-syndic

主配置

Salt配置非常简单。master 的默认配置适用于大多数安装。配置文件安装在“/etc/salt”目录中,并以其各自的组件命名,例如 – /etc/salt/master 和 /etc/salt/minion。

#interface: 0.0.0.0
interface: <local ip address>

更新配置文件后,使用以下命令重新启动 Salt Master。

sudo service salt-master restart

Minion配置

配置 Salt Minion 非常简单。默认情况下,Salt Minion 会尝试连接到 DNS 名称“salt”;如果 Minion 能够正确解析该名称,则不需要配置。在 minion 配置文件中重新定义“master”指令,通常是/etc/salt/minion,如下面的代码所示 –

#master: salt
master: <local ip address>

更新配置文件后,使用以下命令重新启动 Salt Minion。

sudo service salt-minion restart

密钥管理

Salt 使用AES 加密进行 Master 和 Minion 之间的所有通信。Master 和 Minion 之间的通信通过可信的、接受的密钥进行身份验证。

salt-key -L

它将产生以下输出

Accepted Keys:
Denied Keys:
Unaccepted Keys:
<local system name>
Rejected Keys:

通过发出以下命令接受所有密钥。

sudo salt-key -A

它将产生以下输出

The following keys are going to be accepted:
Unaccepted Keys:
<local system name>
Proceed? [n/Y] y
Key for minion bala-Inspiron-N4010 accepted.

现在再次发出salt key列表命令,

salt-key -L

它将产生以下输出

Accepted Keys:
<local system name>
Denied Keys:
Unaccepted Keys:
Rejected Keys:

发送命令

Master 和 Minion 之间的通信必须通过运行 test.ping 命令来验证。

sudo salt '*' test.ping

它将产生以下输出

<local system name>
   True

这里,“*”指的是所有的minion。因为,我们只有一个 minion – test.ping,它执行ping命令并返回 ping 是否成功。

SaltStack – 创建一个简单的环境

在本章中,我们将创建一个简单的 SaltStack 环境,一个 salt master 和两个 salt minions。这种环境将帮助我们在接下来的章节中学习盐的概念。

让我们按照以下步骤来创建 SaltStack 环境。

安装 VirtualBox 环境

VirtualBox 是一个跨平台的虚拟化应用程序。VirtualBox 允许您一次运行多个操作系统。VirtualBox 可在 Windows、Linux、Macintosh 和 Solaris 上运行。它承载并支持大量客户操作系统

您可以通过访问以下链接下载并安装 VirtualBox – https://www.virtualbox.org/wiki/Downloads

我们将创建三个虚拟机并使用 VirtualBox 运行它。

安装流浪汉

Vagrant 提供易于配置、可复制和可移植的工作环境。

您可以通过访问以下链接下载并安装 Vagrant – https://www.vagrantup.com

Vagrant安装成功后,需要进行配置。在文件夹中创建一个名为Vagrantfile的文件,并描述机器的类型及其属性。

运行 Vagrant – 要运行 Vagrant,请发出以下命令 –

vagrant up

在你运行 vagrant up 之后,Vagrant 创建并启动这些机器,这些机器是在Vagrantfile中定义的,在后台使用 VirtualBox。这些机器将一直运行,直到您关闭它们。

停止 Vagrant – 要停止 VirtualBox 中所有正在运行的机器,请键入以下命令 –

vagrant halt

下载演示环境

SaltStack 提供了一个简单的演示环境作为 Vagrant 设置,它托管在github 中让我们使用以下命令下载设置 –

cd /cd/to/path

git clone https://github.com/UtahDave/salt-vagrant-demo

启动环境

现在,使用以下命令启动演示环境 –

cd /cd/to/path/salt-vagrant-demo
vagrant up

执行此命令后,您将看到以下响应 –

result

现在,三台服务器正在运行,一台配置了 salt master,两台配置了 salt minion。

运行 Salt Master

使用以下命令登录到 Salt Master –

vagrant ssh master

现在,使用以下命令移至 root 用户 –

sudo su

现在我们已经成功连接到 Salt Master。

现在让我们来看看 SaltStack 中的一些基本命令。

列出所有键

下面的命令是验证Salt minion连接,查看连接是被接受、拒绝还是挂起。

salt-key —list-all

它将产生以下输出

Accepted Keys:
minion1
minion2
Denied Keys:

Unaccepted Keys:
Rejected Keys:

验证 Salt Minions

现在,我们已经接受了所有的密钥,你可以从 Salt Master 发送一个命令来检查 Salt Minions 是否正在监听,

salt '*' test.ping

它将产生以下输出

minion1:
   True
minion2:
   True

从上面的结果中,列出 minion 1 和 minion 2,这意味着 minion 正在正常监听,否则 minion 现在可能会正确响应。

SaltStack – 访问控制系统

访问控制系统为用户组提供选项以执行具有权限的任务。Salt 访问控制系统用于配置对非管理控制界面的访问。您可以将此过程应用于所有系统。此控件可帮助非管理用户执行 Salt 命令。

Salt接口有以下三种类型 –

  • 发布者 ACL 系统
  • 外部认证系统
  • 对等系统

让我们详细了解这些接口中的每一个。

发布者 ACL 系统

发布者 ACL 系统允许访问除 root 之外的用户以从 master 对 minions 执行 Salt 命令。通过publisher_acl配置选项在主配置文件中配置发布者ACL 系统它的定义如下 –

publisher_acl:
   user1:
      - .*

   user2:
      - web*:
         - test.*
         - pkg.*

这里,

  • user1可以执行任何操作。

  • 允许user2使用testpkg,但只能在“web*”minions 上使用。

外部认证系统

外部身份验证系统用于提供接入通过外部授权系统等执行特定的爪牙盐命令PAM,LDAP等如下所述该配置文件的主文件中定义的。

external_auth:
   pam:
      user1:
         - 'web*':
            - test.*
            - network.*
      user2:
         - .*

这里,

  • 允许user1web*目标匹配的 minion 上执行testnetwork 模块中的函数

  • 允许user2执行所有功能。

在命令中启用外部身份验证系统

Salt 服务器提供了一个选项 ‘-a’ 来启用外部身份验证。

salt -a pam web\* test.ping

这里,-a pam选项用于启用 PAM 外部身份验证。每当我们执行命令时,Salt Server 都会询问身份验证详细信息。为了限制 Salt Server 仅在第一次询问身份验证详细信息,我们可以使用 T 选项。-T 选项会缓存接下来 12 小时(默认设置)的身份验证详细信息并使用它来对用户进行身份验证。

salt -T -a pam web\* test.ping

对等系统

Salt Minion 可以使用对等接口传递命令。peer 接口通过 master 配置文件进行配置,以允许minions使用peer配置部分从 master 发送命令,或者允许minions使用peer_run配置从 master 执行运行程序。

让我们详细了解这两种配置。

对等配置

要在主文件中定义的简单配置如下 –

peer:
   .*:
      - .*

在这里,它可以为所有 Minion 启用通信,但仅推荐用于非常安全的环境。

要将 Minion 分配给特定 ID,需要如下定义配置: peer –

.*domain.com:
   - test.*

peer_run 配置

此配置是为了允许 minions 使用 master 文件上的 peer_run 选项从 master 执行运行程序。下面的例子是允许访问所有minion和所有runner。

peer_run:
   .*:
      - .*

要将 Minion 分配给特定 ID,需要定义如下配置 –

peer_run:
   .*domain.com:
      - test.*

如何执行命令

在所有minion执行test.ping,请使用salt-call命令和publish.publish模块。

salt-call publish.publish \* test.ping

要执行runner,请使用 salt-call 命令和publish.runner模块。

salt-call publish.runner manage.up

SaltStack – 作业管理

Salt具有与大量系统高速通信的能力。这种方法有助于 Salt 制作一个强大的多任务系统。Salt 可以在多个系统上运行作业,因此 Salt 使用作业管理技术来管理在所有系统上运行的每个作业。本章详细说明作业管理。

什么是作业 ID?

Salt 有缓存目录,cachedir在其中,minions 维护的目录称为proc目录。它位于以下目录 /var/cache/salt/proc 中。

proc 目录用于维护所有文件。执行这些文件时,它们会分配一个唯一的作业 ID。此作业 ID 有助于识别 minion 上当前正在运行的作业并允许查找作业。

SALTUTIL 模块

Salt 引入了一个新模块,称为 Saltutil 作业管理过程。该模块包含管理作业的不同功能。这些函数用于管理 minion 级别的作业。功能简要描述如下 –

  • running – 返回在 proc 目录中找到的所有正在运行的作业数据。

  • find_job – 根据作业 ID 返回有关某个作业的特定数据。

  • signal_job – 允许向给定的作业 id(jid) 发送信号。

  • term_job – 发送指定作业的终止信号。

  • kill_job – 为指定的作业发送终止信号。

求职者

作业运行器包含使查看数据更容易、更清晰的功能。它有不同的功能。让我们详细讨论这些功能中的每一个。

活动功能

Active 功能用于识别哪些作业仍在运行,并检查哪些系统已完成作业以及哪些系统仍在等待。它使用以下命令执行,

salt-run jobs.active

LOOKUP_JID 函数

lookup_jid runner 将显示当前查找作业的数据。这些作业是通过主配置中keep_jobs选项配置的。它是使用以下命令执行的。

salt-run jobs.lookup_jid <job id number>

LIST_JOBS 函数

List_jobs 函数用于列出作业的作业数据。它由以下命令表示 –

salt-run jobs.list_jobs

作业调度

调度系统公开了 Minion 上的任何执行函数或 master 上的任何 runner。

它通过以下方法执行 –

  • Schedule – master 或 minion配置文件中的计划选项

  • Minion pillar data – 它使用 saltutil.refresh_pillar 命令刷新 minion 支柱数据。

  • 调度状态或调度模块。

Salt 状态在 minion 上执行。您可以传递位置参数并配置文件中提供命名参数YAML 字典如下所示。

schedule:
   job1:
      function: saltstate.sls
      seconds: 3600
      args:
         - httpd
      kwargs:
         test: True

在这里,job1每小时执行带有指定参数的函数saltstate.slshttpd测试:真正是为附加参数的httpd是在定义的命令saltstate.sls

SaltStack – 盐文件服务器

Salt 文件服务器是一个无状态的 ZeroMQ 服务器。它内置于 Salt Master 中。Salt 文件服务器用于将文件从 master 分发到 minions。它包含不同的模块。本章让我们了解salt文件服务器,它的配置,与salt文件服务器相关的模块,如何在python中访问salt文件服务器等。

文件服务器后端

文件服务器后端允许 Salt 文件服务器充当与本地文件系统、Git 版本控制系统等其他文件服务器的透明接口。

可以通过在主文件中使用以下配置来启用 Git 文件服务器后端。

fileserver_backend:
   - git

要启用多个后端文件系统,我们可以使用以下配置。

fileserver_backend:
   - roots
   - git

我们还可以使用相应后端服务器的特定部分为不同的后端服务器指定附加选项。

本地文件系统

为了使用这个系统,我们必须使用以下代码。

file_roots:
   base:
      - /srv/salt/prod

Git文件系统

为了使用这个系统,我们必须使用以下代码。

gitfs_remotes:
   - https://github.com/sample/sample1.git

请求文件

Salt 可以选择为特定环境请求文件。

salt://path/to/file?saltenv = base

在这里,环境是使用 root 选项定义的。

文件服务器配置

Salt 文件可以在许多根目录中分配,并通过指定文件路径和要搜索的环境来访问。单个环境可以跨越多个目录根。

环境

默认环境是 base。此环境已定义,用于在未指定其他环境时下载文件。

file_roots:
   base:
      - /srv/salt/base

您还可以使用多种环境,如下面的代码所示。

file_roots:
   base:
      - /srv/salt/base
   dev:
      - /srv/salt/dev
      - /srv/salt/base

CP模块

CP 模块是操作Salt 文件服务器的主要模块盐的cp命令也可以用于分发由盐业文件服务器提供文件。

获取文件

cp.get_file功能可以在仆从可以用来从主机下载文件。它的定义如下面的代码块所示。

salt '*' cp.get_file salt://vimrc /etc/vimrc

上面的命令指示所有 Salt Minion 下载vimrc文件并将其复制到/etc/vimrc

启用模板

您可以在 get_file 中启用模板选项,如下所示 –

salt '*' cp.get_file "salt://vimrc" /etc/vimrc template = jinja

应用压缩

要使用压缩,请使用gzip命名参数。有效值是从 1 到 9 的整数,其中 1 是最小压缩值,9 是最大值。

命令定义如下 –

salt '*' cp.get_file salt://vimrc /etc/vimrc gzip = 5

GET_DIR

cp.get_dir功能可以在仆从被用来从主下载整个目录。它在以下代码块中定义。

salt '*' cp.get_dir salt://etc/mysql /etc

cp.get_dir支持模板渲染和gzip压缩参数。如果你愿意,你也可以分配。

文件客户端模块

Salt 提供了一个 python 模块来帮助访问 salt 文件服务器。盐/ fileclient.py模块用于建立从仆从到主用的通信。

获取文件的示例代码如下 –

import salt.minion
import salt.fileclient

def get_file(path, dest, saltenv = ‘base'):
   client = salt.fileclient.get_file_client(__opts__)
   return client.get_file(path, dest, true, saltenv)

这里,

  • 当模块在 salt 环境中运行时, opts 可用。否则,我们应该提供配置路径 – /etc/salt/minion

  • path指的是salt文件服务器中源文件的路径。

  • dest指的是文件的目标路径。

  • saltenv指的是环境

在下一章中,我们将了解如何使用Git作为文件服务器。

SaltStack – Git 作为文件服务器

Git是一个开源的分布式版本控制系统。它可用于跟踪任何文件中的更改。Salt 使用 Git 文件服务器从 Git 存储库发送文件。您可以将 Git 配置为fileserver_backend列表选项,如果您需要配置一个或多个存储库,您可以使用gitfs_remotes选项来实现。

本章介绍如何安装和配置 Git 文件服务器。在进行安装之前,您必须具备以下先决条件。

使用 Git 的 Salt Server 先决条件

Salt 服务器使用 Git 作为文件服务器的最低要求如下 –

  • pygit2
  • 德威

Pygit2 和 Dulwich 使用主配置文件中gitfs_provider参数进行配置。如果gitfs_provider没有在主文件中配置,那么 Salt 将更喜欢 pygit2,如果合适的版本可用,然后是GitPythonDulwich

安装pygit2

以下命令用于在基于 Fedora 和 Ubuntu 的系统中安装 pygit2 –

  • 基于 Fedora 的系统

yum install python-pygit2
  • 基于Ubuntu的系统

apt-get install python-pygit2

这里,pygit2 支持的最低版本是 0.20.3。

安装 GitPYTHON

GitPython 可以使用yum / apt 命令轻松安装在 master 上,如下所示。

  • 基于 Fedora 的系统

yum install GitPython
  • 基于Ubuntu的系统

apt-get install python-git

安装德威

使用 yum 命令可以轻松地将 Dulwich 安装到主服务器上。

  • 基于 Fedora 的系统

yum install python-dulwich
  • 基于Ubuntu的系统

apt-get install python-dulwich

现在,我们已经安装了 Git 文件服务器的所有依赖项。现在让我们使用主配置文件中fileserver_backend部分配置此 Git 文件服务器

后端配置

为了使用 Git 文件服务器,您需要在主配置文件的 fileserver_backend 列表中添加 Git。描述如下 –

fileserver_backend:
   - git

让我们进一步了解如何在远程配置中配置 Git 文件服务器。

gitfs_remotes 配置

您可以为主文件中的 gitfs_remotes 配置指定任何一个或所有 URL,例如 git://、https://、file:// 或 ssh://。这用于搜索请求的文件。

下面定义了简单的 https URL 规范。

gitfs_remotes:
   - https://github.com

所述SSH配置可以如下所示进行。

gitfs_remotes:
   - [email protected]:user1/sample.git
   - ssh://[email protected]/path/to/sample.git

现在,我们已经使用fileserver_backendgitfs_remotes两个选项配置了 Git 文件服务器

重启大师

在 master 文件中进行所有更改后,现在重新启动 master 以加载 Git 文件服务器中的所有配置。

多个遥控器配置

以下命令用于master文件gitfs_remotes的多重配置

gitfs_remotes:
   - git://github.com/sample/sample1.git
   - https://github.com/sample/sample2.git
   - file:///root/user/sample

在这里,存储库sample1.git、sample2.gitsample.doc可能包含以下文件。

sample1.git:
   top.sls
   
sample2.git
   edit/vimrc
   
sample.doc
   edit/vimrc

SaltStack – 使用 MinionFS 作为文件服务器

MinionFS是由盐提供一个特殊的文件服务器的爪牙在它们之间交换文件。MinionFS 提供的文件是 Minion 有意共享的文件。要共享文件,Minion 必须遵循以下步骤。

  • Source minion 必须使用cp.push函数将文件推送到 salt master

  • 一旦文件被源 minion 推送,任何其他 minion 就可以使用 MinionFS 文件服务器访问部署的文件。

启用推送

默认情况下,minion 将文件推送到 master 是禁用的。要接受来自 minion 的文件,master 需要在配置文件中有“file_recv”选项,并且它的值必须设置为True默认情况下,“file_recv”的值为false

file_recv: True

启用该选项后,重新启动主服务。

推送文件

Minions 可以将文件推送到 master。它由cp.push函数执行这个 cp.push 函数提供了一种简单的机制,可以使用 minion id 通过 minion 推送文件。

salt 'minion-id' cp.push /path/to/the/file

这里,minion-id 用于标识哪个 minion 正在推送文件。此命令会将文件存储master 的 cachedir名为minions的子目录中通常,路径是-/var/cache/salt/master/minions。

对于minion、m1和文件-/var/log/mylog.txt,该文件将存储在-/var/cache/salt/master/minions/m1/var/log/mylog.txt。

启用 MinionFS

为了使MinionFS,只需添加仆从在文件服务器的后端设置为显示在下面的代码块。

fileserver_backend:
   - roots
   - minion

启用 MinionFS 后,minion 推送文件可用作 –

salt://<minion-id>/path/to/pushed/file

对于 minion、m1和推送文件 – /var/log/mylog.txt,推送文件将从 salt://m1/var/log/mylog.txt 提供。

可以使用以下配置将此 minionFS 挂载到特殊目录中。它将 minionFS 文件与其他文件分开,并有助于组织 minion 文件。

minionfs_mountpoint: salt://minionfs

对于上述配置,该文件将在minionfs目录下可用– salt://minionfs/m1/var/log/mylog.txt

MinionFS 高级选项

MinionFS 还提供了一个选项来启用/禁用来自某个 Minion 的推送文件的可用性。选项是minionfs_whitelist,启用minionminionfs_blacklist,禁用minion

minionfs_whitelist:
   - webserver
   - develop*
   - ‘mail\d+.mysite.com'

minionfs_blacklist:
   - testing

在上面的配置中,除了testing之外的所有minion都可以使用minionFS共享文件。

  • 网络服务器1

  • id 与正则表达式匹配的 Minions develop *

  • id 与正则表达式mail\d+.mysite.com匹配的 Minions

  • 测试

在下一章中,我们将学习如何将 Cron 与 Salt 结合使用。

SaltStack – 将 Cron 与盐一起使用

Salt 可以与Cron应用程序一起使用一起使用这两个应用程序提供了自动化 Salt 的绝佳机会。虽然 Salt 提供了远程执行命令的选项,但 Cron 使其能够以预先安排或自动的方式运行。让我们在本章中学习如何一起使用 Cron 和 Salt。

什么是克朗?

Cron 是 Linux 环境中非常有用的应用程序。它允许预设命令或脚本以在特定日期和时间运行。它还允许定期运行应用程序,例如每天、每周或每个月的第一天。

Cron 在系统启动时启动并检查/etc/crontab文件以获取配置详细信息。/etc/crontab 将每个应用程序及其时间表放在单独的一行中,如下所示。

15 * * * * root echo "This command runs at 15 minutes past every hour"
15 10 * * * root echo "This command is run daily at 10:15 am"

每行有以下七个入口点,以空格分隔,如下所示 –

  • 分钟– 一小时的分钟,介于“0”和“59”之间。

  • 小时– 小时,以 24 小时制指定。

  • day_of_month – 月份中的第几天,介于 1 到 31 之间。例如,10th 每个月是 10。

  • – 指定的月份并以数字(0-12)或月份的名称(例如五月)指定。

  • day_of_week – 星期几以数字(0-7)或一天的名称(例如太阳)指定。

  • user – 命令运行的用户帐户。

  • cmd – 实际命令及其参数。

在这里,如果没有指定任何内容,则替换为 *。

盐调用者(salt-call)

Salt 提供了一个 CLI(命令行界面),salt-call在本地 minion 系统本身而不是使用 salt 命令从主服务器运行模块。salt call CLI 支持 salt 命令支持的所有选项,但在本地运行。

Salt Caller 最初旨在支持调试,但现在,它可以用作独立应用程序。

salt-call test.ping

在 cron 中使用 salt-call

salt-call CLI 可用于使用 Cron 调度 salt 操作。例如,要每天在午夜检查 minion 的状态,我们可以使用 salt-call 和选项 – state.apply ,如下所示。

/etc/crontab

PATH = /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin
0 0 * * * salt-call state.apply

这里,

  • state.apply功能将检查盐配置文件仆从并检查仆从定义的所有动作是否被正确配置。

  • 设置路径是一个很好的做法,因为有时系统路径中可能没有 salt 命令。

下一章我们将学习Remote Execution,它是Salt的一个核心概念。

SaltStack – 远程执行

Salt 的核心概念之一是远程执行。Salt 可以在几秒钟内跨数千个系统执行命令。Salt 使用自己的命令来执行此功能。现在让我们了解本章中用于远程执行的不同 Salt 命令。

盐命令

Salt 命令使 Salt Master 能够与一个或多个Salt Minion通信基本语法如下,

salt '<target>' <module.function> [arguments]

上述命令语法由以下三个主要部分组成。

  • target – 它确定命令应用哪些系统。

  • module.function – 这是一个命令。命令由模块和函数组成。

  • arguments – 调用函数所需的额外数据。

让我们详细了解每个组件。

什么是目标组件?

Target 是一个组件,它允许您过滤 minion(托管系统)以运行该功能。下面定义了一个使用目标组件的简单命令。

salt '*' test.ping

它将产生以下输出

minion2:
   True
minion1:
   True

此处,目标“*”代表所有受管系统。这里的’ test ‘是一个模块,ping是一个函数。这用于测试远程系统中的 ping 服务。我们将在后续章节中了解不同的模块及其功能。

使用 ID 的目标(minion)

您可以使用目标中的id向特定 minion 发送命令您可以使用minion id替换它,而不是使用‘*’它定义如下。

salt 'minion1’ test.ping

它将产生以下输出

minion1:
   True

使用正则表达式的目标

可以通过特定的正则表达式过滤目标。它定义如下。

salt -E 'minion[0-9]' test.ping

它将产生以下输出

minion2:
   True
minion1:
   True

使用列表的目标

可以在列表中明确指定目标。它在以下代码块中定义。

salt -L 'minion1,minion2' test.ping

它将产生以下输出

minion2:
   True
minion1:
   True

条件目标

目标可以组合在一个命令中,如下面的代码块所示。

salt -C 'G@os:Ubuntu and minion* or [email protected].*' test.ping

它将产生以下输出

minion1:
   True
minion2:
   True

模块和函数 (module.function)

Salt可以执行shell命令;同时在其所有托管系统中更新包和分发文件等。Salt 使用模块执行这些操作。Salt 具有用于所有可用功能的特殊模块。让我们通过本章中的一些简单示例来了解不同的 Salt 模块。

外壳命令

Salt 使用cmd.run命令跨多个系统远程执行 shell 命令CMD是主模块和运行是在现有的功能之一CMD模块。运行功能使作为显示在下面的代码块被在远程系统执行的任何外壳命令。

salt '*' cmd.run 'ls -l /etc'

它将产生以下输出

minion2:
   total 868
   drwxr-xr-x 7 root root    4096 Jan 26 22:10 X11
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 acpi
   -rw-r--r-- 1 root root    2981 Jan 26 20:48 adduser.conf
   -rw-r--r-- 1 root root      10 Jan 26 21:04 adjtime
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 alternatives
   drwxr-xr-x 3 root root    4096 Jan 26 20:53 apm
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apparmor
   drwxr-xr-x 9 root root    4096 Jan 26 21:02 apparmor.d
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apport
   drwxr-xr-x 6 root root    4096 Jan 29 07:14 apt
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 at-spi2
……………
……………
minion1:
   total 868
   drwxr-xr-x 7 root root    4096 Jan 26 22:10 X11
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 acpi
   -rw-r--r-- 1 root root    2981 Jan 26 20:48 adduser.conf
   -rw-r--r-- 1 root root      10 Jan 26 21:04 adjtime
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 alternatives
   drwxr-xr-x 3 root root    4096 Jan 26 20:53 apm

   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apparmor
   drwxr-xr-x 9 root root    4096 Jan 26 21:02 apparmor.d
   drwxr-xr-x 3 root root    4096 Jan 26 21:02 apport
   drwxr-xr-x 6 root root    4096 Jan 29 07:09 apt
   drwxr-xr-x 2 root root    4096 Jan 26 22:10 at-spi2
   -rw-r----- 1 root daemon   144 Oct 21  2013 at.deny
   -rw-r--r-- 1 root root    2177 Apr  9  2014 bash.bashrc
   -rw-r--r-- 1 root root      45 Mar 22  2014 bash_completion
……………
……………

显示磁盘使用情况

Salt 提供了一个特殊的模块disk来获取托管系统的完整磁盘详细信息。diskmodule具有使用功能来查询详细信息。

salt '*' disk.usage

它将产生以下输出

minion1:
   ----------
   /:
      ----------
      1K-blocks:
         41251136
      available:
         37852804
      capacity:
         5%
      filesystem:
         /dev/sda1
      used:
         1662420
   /dev:
      ----------
      1K-blocks:
         503908
      available:
         503896
      capacity:
         1%
      filesystem:
         udev
      used:
         12
   /run:
      ----------
      1K-blocks:
         101780
      available:
         101412
      capacity:
         1%
      filesystem:
         tmpfs
      used:
         368
   /run/lock:
      ----------
      1K-blocks:
         5120
      available:
         5120
      capacity:
         0%
      filesystem:
         none
      used:
         0
   /run/shm:
      ----------
      1K-blocks:
         508884
      available:
         508872
      capacity:
         1%
      filesystem:
         none
      used:
         12
   /run/user:
      ----------
      1K-blocks:
         102400
      available:
         102400
      capacity:
         0%
      filesystem:
         none
      used:
         0
   /sys/fs/cgroup:
      ----------
      1K-blocks:
         4
      available:
         4
      capacity:
         0%
      filesystem:
         none
      used:
         0
   /vagrant:
      ----------
      1K-blocks:
         303114632
      available:
         252331440
      capacity:
         17%
      filesystem:
         none
      used:
         50783192
minion2:
   ----------
   /:
      ----------
      1K-blocks:
         41251136
      available:
         37852804
      capacity:
         5%
      filesystem:
         /dev/sda1
      used:
         1662420
   /dev:
      ----------
      1K-blocks:
         503908
      available:
         503896
      capacity:
         1%
      filesystem:
         udev
      used:
         12
   /run:
      ----------
      1K-blocks:
         101780
      available:
         101412
      capacity:
         1%
      filesystem:
         tmpfs
      used:
         368
   /run/lock:
      ----------
      1K-blocks:
         5120
      available:
         5120
      capacity:
         0%
      filesystem:
         none
      used:
         0
   /run/shm:
      ----------
      1K-blocks:
         508884
      available:
         508872
      capacity:
         1%
      filesystem:
         none
      used:
         12
   /run/user:
      ----------
      1K-blocks:
         102400
      available:
         102400
      capacity:
         0%
      filesystem:
         none
      used:
            0
   /sys/fs/cgroup:
      ----------
      1K-blocks:
         4
      available:
         4
      capacity:
         0%
      filesystem:
         none
      used:
         0
   /vagrant:
      ----------
      1K-blocks:
         303114632
      available:
         252331440
      capacity:
         17%
      filesystem:
         none
      used:
         50783192

网络接口

Salt提供了一个单独的模块,网络和功能,模块内部的接口来查询被管系统的网络接口信息。

salt '*' network.interfaces

它将产生以下输出

minion1:
   ----------
   eth0:
      ----------
      hwaddr:
         08:00:27:04:3e:28
      inet:
         |_
            ----------
            address:
               10.0.2.15
            broadcast:
               10.0.2.255
            label:
               eth0
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fe04:3e28
            prefixlen:
               64
            scope:
               link
      up:
         True
   eth1:
      ----------
      hwaddr:
         08:00:27:34:10:52
      inet:
         |_
            ----------
            address:
               192.168.50.11
            broadcast:
               192.168.50.255
            label:
               eth1
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fe34:1052
            prefixlen:
               64
            scope:
               link
      up:
         True
   lo:
      ----------
      hwaddr:
         00:00:00:00:00:00
      inet:
         |_
            ----------
            address:
               127.0.0.1
            broadcast:
               None
            label:
               lo
            netmask:
               255.0.0.0
      inet6:
         |_
            ----------
            address:
               ::1
            prefixlen:
               128
            scope:
               host
      up:
         True
minion2:
   ----------
   eth0:
      ----------
      hwaddr:
         08:00:27:04:3e:28
      inet:
         |_
            ----------
            address:
               10.0.2.15
            broadcast:
               10.0.2.255
            label:
               eth0
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fe04:3e28
            prefixlen:
               64
            scope:
               link
      up:
         True
   eth1:
      ----------
      hwaddr:
         08:00:27:a7:31:8e
      inet:
         |_
            ----------
            address:
               192.168.50.12
            broadcast:
               192.168.50.255
            label:
               eth1
            netmask:
               255.255.255.0
      inet6:
         |_
            ----------
            address:
               fe80::a00:27ff:fea7:318e
            prefixlen:
               64
            scope:
               link
      up:
         True
   lo:
      ----------
      hwaddr:
         00:00:00:00:00:00
      inet:
         |_
            ----------
            address:
               127.0.0.1
            broadcast:
               None
            label:
               lo
            netmask:
               255.0.0.0
      inet6:
         |_
            ----------
            address:
               ::1
            prefixlen:
               128
            scope:
               host
      up:
         True

sys.doc 执行模块

Salt 函数可以发送到sys.doc执行模块。这用于直接从命令行获取任何模块的详细信息。Salt 函数是自记录的。所有函数文档都可以通过 sys.doc() 函数从 minions 中检索,该函数定义如下。

salt '*' sys.doc

函数调用的参数

参数用于为函数调用提供附加数据。下面给出了一个简单的参数示例。

salt '*' sys.doc pkg.install

在这里,参数pkg.install是用于安装特定软件包的模块。

Python 函数

参数是以空格分隔的函数参数。它允许将 python 代码作为参数传递,如下所示。

salt '*' cmd.exec_code python 'import sys;print sys.version'

它将产生以下输出

minion2:
   2.7.6 (default, Oct 26 2016, 20:30:19) 
   [GCC 4.8.4]
minion1:
   2.7.6 (default, Oct 26 2016, 20:30:19) 
   [GCC 4.8.4]

同样,您也可以使用可选关键字和YAML格式。

SaltStack – 配置管理

配置管理是 SaltStack 中最重要的概念之一。它用于创建一个可重用的配置模板,称为state状态描述了将系统组件或应用程序置于已知配置中所需的一切。

盐州

Salt 状态是系统特定部分的可重用配置。使用简单的 YAML 更容易理解和描述状态。

创建盐状态

盐状态很容易创建。让我们在本章中创建一个简单的状态。移动到目录“salt-vagrant-demo/saltstack/salt/”并创建一个名为samples.sls的文件并在其中添加以下行。

样品.sls

install_network_packages:
   pkg.installed:
      - pkgs:
         - rsync
         - lftp
         - curl

现在,保存文件并在 Salt Master 中运行以下命令。

root@saltmaster:/home/vagrant# salt 'minion1’ state.apply samples

在这里,我们安装的rsync,lftp的卷曲通过pkg.installed模块使用盐状态盐奴才,minion1如果它工作正常,您可以看到如下所示的响应。

它将产生以下输出

minion1:
----------
   ID: install_network_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 08:08:48.612336
   Duration: 545.385 ms
   Changes:

Summary for minion1
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 545.385 ms

应用盐态

现在我们已经使用“.sls”文件创建了一个状态,并通过专门调用它来应用它。Salt 有一个名为top.sls文件的默认状态文件。顶层文件用于将多个状态文件应用于 Salt Minion。顶部文件描述了应该在哪里应用状态。好吧,StatesTop 文件共同创建了 SaltStack 配置管理功能的核心。

现在让我们在目录saltstack/salt 中创建一个简单的 top.sls 文件并添加以下内容。

顶.sls

base:
  '*':
      - common
   'minion1':
      - samples

这里,state,通常适用所有系统状态,samples适用于minion1

接下来,运行 Salt Master 并应用如下所示的状态。

root@saltmaster:/home/vagrant# salt '*' state.apply

它将产生以下输出

minion1:
----------
   ID: common_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 09:33:35.642355
   Duration: 588.21 ms
   Changes:

Summary for minion1
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 588.210 ms
minion2:
----------
   ID: common_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 09:33:35.890331
   Duration: 602.79 ms
   Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 602.790 ms

应用批量大小

如果您有大量连接的 Minion,那么您可以限制一次更新的系统数量。它是通过使用–batch-size选项执行的,该选项定义如下。

root@saltmaster:/home/vagrant# salt --batch-size 5 '*' state.apply

它将产生以下输出

Executing run on ['minion2', 'minion1']
jid:
   20170314094638482664
minion1:
----------
   ID: common_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 09:46:41.228519
   Duration: 582.24 ms
   Changes:

Summary for minion1
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 582.240 ms
retcode:
   0
jid:
   20170314094638482664
minion2:
----------
   ID: common_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 09:46:41.153609
   Duration: 605.235 ms
   Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 605.235 ms
retcode:
   0

盐状态函数

Salt 状态函数用于在远程系统上安装和配置应用程序。让我们使用 Salt 状态函数安装一个“Vim”包。

创建和应用状态函数

在“salt-vagrant-demo/saltstack/salt/sample.sls”目录下创建一个名为“sample.sls”的文件并添加以下内容 –

样本.sls

install vim:
   pkg.installed:
      - name: vim

一旦 Vagrant 环境启动,运行 salt master 并通过运行以下命令应用 sample.sls。

root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample

它将产生以下输出

minion2:
----------
   ID: install vim
   Function: pkg.installed
   Name: vim
   Result: True
   Comment: Package vim is installed
   Started: 15:07:45.752764
   Duration: 553.506 ms
   Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 553.506 ms

现在,我们添加了一个包“Vim”。现在让我们使用 Salt 测试方法测试包。

盐态测试

通过向状态添加“test = True”选项来强制执行测试运行。返回信息将显示将应用的状态为黄色,结果报告为“无”。

以下命令用于测试状态 –

root@saltmaster:/home/vagrant# sudo salt 'minion2’ state.apply sample test = True

它将产生以下输出

minion2:
----------
   ID: install vim
   Function: pkg.installed
   Name: vim
   Result: True
   Comment: Package vim is already installed
   Started: 15:07:45.752764
   Duration: 553.506 ms
   Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 553.506 ms

SaltStack ─ 支柱组件

Pillar 是使 Salt 状态可重用的重要组件。它用于为使用目标分配的 Minion 定义安全数据。Salt pillar 数据存储端口、文件路径、配置参数和密码等值。

支柱配置文件

用于配置pillar_roots在主配置文件如下所示-

pillar_roots:
   base:
      - /srv/pillar

在这里,该文件位于“/srv/pillar”目录中。

考虑一下,位于 /srv/pillar/top.sls 的顶级文件具有以下结构 –

base:
   '*':
      - default

现在,移至位于 /srv/pillar/default.sls 中的 default.sls 文件并添加以下代码。

# Default pillar values
apache
git

保存文件后,刷新支柱以更新所有更改。

刷新支柱

您可以使用以下命令刷新支柱。

root@saltmaster:/home/vagrant# salt '*' saltutil.refresh_pillar

上述命令用于刷新所有minion上的Salt pillar数据。

列出支柱数据

要列出支柱数据,您可以使用下面给出的命令。

root@saltmaster:/home/vagrant# salt '*' pillar.ls

它将产生以下输出

minion2:
   - apache
   - git
minion1:
   - apache
   - git

支柱项目

一旦设置了支柱,就可以通过支柱模块在 minion 上查看数据。可以通过函数pillar.items访问它,该函数定义如下。

root@saltmaster:/home/vagrant# salt '*' pillar.items

它将产生以下输出

minion2:
   ----------
   apache:
      httpd
   git:
      git
minion1:
   ----------
   apache:
      httpd
   git:
      git

SaltStack – 包含组件

“包含”组件用于在多个位置定义相同的配置任务。它很容易执行。在状态文件的顶部,使用以下格式添加一个包含 –

include:
   - state file 1 
   - state file 2

此处,状态文件 1状态文件 2是您要包含的 SLS 文件的名称。无需包含.sls扩展名。Included Salt 状态被插入到当前文件的顶部。

子目录中的状态文件

您可以使用点 (.) 包含子目录状态文件。它充当目录分隔符。

include:
   - dir.sls1 

谷物界面

Grains 是一个接口,用于获取有关底层系统的信息。为操作系统、域名、IP 地址、内核、操作系统类型、内存和许多其他系统属性收集 Grain。

谷物瞄准

以小兵为目标时可以使用谷物数据,这在以下代码块中定义。

root@saltmaster:/home/vagrant# salt -G 'os:Ubuntu' test.ping

它将产生以下输出

minion1:
   True
minion2:
   True

列出谷物

可以使用“grains.ls”模块列出谷物,该模块定义如下。

root@saltmaster:/home/vagrant# salt '*' grains.ls

列出项目

与 Pillar 一样,Grains 数据也可以使用“grains.items”列出。

root@saltmaster:/home/vagrant# salt '*' grains.items

SaltStack – 日志记录

日志记录用于跟踪正在运行的软件事件。事件由描述性消息描述,该消息可以选择性地包含可变数据。盐日志记录方法用于解决您可能面临的任何问题。您可以查看特定的日志级别。

配置设置

让我们详细了解日志记录的不同配置设置。

日志文件

Salt 日志记录通过文件传递,其中包含本地路径名或网络位置以供识别。该文件被视为日志文件。

log_file: /var/log/salt/master

在这里,依赖于在 master 中执行的二进制文件的文件。同样,您也可以在 minion 中执行,如下所示。

log_file: /var/log/salt/minion

您也可以使用远程地址。使用远程地址的语法是 – <file|udp|tcp>://<host|socketpath>:<port-if-required>/<log-facility>。

log_file: udp://loghost:port

在这里,日志工具默认为 LOG_USER。

LOG_LEVEL

日志级别按数字分配的值排序。默认情况下,Python 库定义了大部分日志记录级别。除此之外,Salt 使用了更多级别。下面解释了一些级别。

  • log_level:错误;级别值为 40 – 它表示错误时的日志语句记录。

  • log_level:安静;级别值为 1000 – 表示在此级别不应记录任何内容。

  • 日志级别:信息;level value is 20 – 它表示正常的日志信息。

  • 日志级别:警告;级别值为 30 – 它表示警告时的日志语句记录。

  • log_level:调试;level value is 10 – 对调试salt实现和salt代码有用的信息。

  • log_level:跟踪;级别值为 5 – 更详细的代码调试信息。

LOG_LEVEL_LOGFILE

它定义了发送到日志文件的消息级别。

log_level_logfile: info

LOG_DATEFMT

它定义了日志日期格式。默认情况下,它表示为 &percntY-&percntm-&percntd &percntH:&percntM:&percntS。

log_datefmt_logfile: '&percntY-&percntm-&percntd &percntH:&percntM:&percntS'

LOG_FMT_CONSOLE

它定义了记录消息的控制台的格式。Salt 使用自定义LogRecord属性为控制台日志输出着色。它遵循以下语法 –

'%(colorlevel)s'       # log level name colorized by level
'%(colorname)s'        # colorized module name
'%(colorprocess)s'     # colorized process number
'%(colormsg)s'         # colorized messages name

LOG_FMT_LOGFILE

它定义记录消息的日志文件的格式。基本语法如下 –

%(asctime)s,%(msecs)03d [%(name)-17s][%(levelname)-8s] %(message)s

LOG_GRANULAR_LEVELS

此级别用于更具体地控制日志记录级别。

log_granular_levels:
   'salt': 'info'
   'salt.modules': ‘trace'

在这里,’info’ 级别的 Main salt 库将salt.modules设置为跟踪级别的日志。

外部日志处理程序

Salt 使用 LogStash 和 Sentry 外部日志处理程序进行日志记录。让我们在本章中详细了解它。

LOGSTASH 处理程序

LogStash 是一个开源软件;服务器端安全数据处理管道。让我们考虑在 Salt 中使用 LogStash 的简单 UDP 日志处理程序。

在 Salt master 文件中指定以下更改 –

logstash_udp_handler:
   host: 127.0.0.1
   port: 9999
   version: 1
   msg_type: logstash

然后在 Logstash 配置文件中添加更改 –

input {
   udp {
      port ⇒ 9999
      codec ⇒ json
   }
}

在这里,UDP – 是需要具有json_event格式的输入,这是我们通过线路发送的内容。

SENTRY 日志处理程序

Sentry 是生产部署和信息中的实时错误跟踪,用于重现和修复崩溃。主文件中的默认配置定义如下。

sentry_handler:
   dsn: https://pub-key:[email protected]/app-id
   log_level: debug

在这里,哨兵处理程序的默认日志级别是 ERROR,但我们在 sentry_handler 配置键下定义了调试log_level

SaltStack – 通过 SSH 加盐

Salt 通过使用salt-minion在远程系统中执行命令这是正常行为。在某些情况下,远程系统只能通过 SSH 协议访问。对于这些场景,Salt 提供了仅使用 SSH 协议连接远程系统并通过 SSH 层执行命令的选项。

Salt SSH很容易配置。唯一需要的配置是在称为名册文件的特殊文件中指定远程系统详细信息该名册文件通常位于/etc/salt/roster 中名册文件将包含有关远程系统的所有信息以及我们如何连接到它。一旦配置了名册文件,所有的 Salt 命令都将使用salt-ssh而不是 salt 命令来执行。

名册文件

名册系统专为 Salt SSH 设计。这被设计为可插拔系统。名册系统的唯一目的是收集有关远程系统的信息。名册文件是一个基于 YAML 的配置文件,其中包含作为目标的远程系统信息这些目标是具有预定义属性集的特殊数据结构。一个名册文件包含一个或多个目标,每个目标都由一个Salt ID 标识

名册文件的基本结构如下 –

<Salt ID>:
   host: <host name>
   user: <user name>
   passwd: <password of the user>

名册文件支持的所有其他属性都是可选的。它们如下 –

  • 端口– SSH 端口号。

  • sudo – 是否通过 sudo 运行命令。

  • sudo_user – sudo 用户名。

  • tty – 如果启用了 sudo,则为真。

  • priv – 私钥。

  • timeout – SSH 连接超时。

  • minion_optsminion opts 字典。

  • Thin_dir – 目标系统的盐组件存储目录。

  • cmd_umask – 强制执行 salt-call 命令的 umask。

示例名册文件如下 –

web:
   host: 192.168.2.1
   user: webuser
   passwd: secret
   sudo: True   
db:
   host: 192.168.2.2

部署 SSH 密钥

Salt SSH 将为 SSH 登录生成默认的公钥/私钥对。默认路径为 /etc/salt/pki/master/ssh/salt-ssh.rsa。可以使用ssh-copy-id命令将此密钥部署到远程系统,如下所示。

ssh-copy-id -i /etc/salt/pki/master/ssh/salt-ssh.rsa.pub [email protected]

执行命令

执行 salt 命令就像将salt cli命令更改salt-ssh一样简单,如下所示。

salt-ssh '*' test.ping

原始 Shell 命令

Salt SSH 提供了一个选项 (-r) 来绕过 salt 模块和函数在远程系统中执行原始命令。

salt-ssh '*' -r 'ls'

使用 Salt SSH 定位

在 Salt SSH 中定位远程系统仅支持 glob 和 regex 目标。由于 Salt SSH 是一个单独的模块,因此它目前仅提供有限的选项,并将在不久的将来提供更多功能。

SaltStack – 云基础设施的盐

Salt 提供了一个单独的模块,Salt Cloud提供各种云提供商的虚拟机,如 Amazon AWS、Google Compute 等。 Salt Cloud 是一个通用接口,用于配置和管理各种云提供商的 VM。

  • Cloud Config – Salt Cloud 的主要配置文件是 /etc/salt/cloud,它适用于所有 VM。主配置文件称为Cloud Config

  • Cloud Providers – 要针对特定​​的云提供商,我们可以使用特定的配置文件,它们位于 /etc/salt/cloud.providers.d/*.conf 中,这些称为Cloud Providers

  • Cloud Profiles – 为了针对特定的 VM,我们还可以使用一个特殊的配置文件,该文件仅适用于该特定的 VM,它们位于 /etc/salt/cloud.profiles.d/*.conf,这些称为Cloud配置文件

对于虚拟机,首先应用Cloud Config 中的设置,然后应用到Cloud Providers 中,最后覆盖由Cloud Profiles 完成

盐云安装

默认情况下,Salt Cloud 内置于 Salt 中并且随时可用。如果它不可用,我们可以使用下面的命令安装它。

pip install salt-cloud

由于 Salt Cloud 是一个单独的模块并在自己的进程中运行,因此它也可以安装在 Salt Minion 系统中,而不是安装在 Salt Master 中。

配置虚拟机

要配置虚拟机,我们需要定义云提供商和云配置文件。一旦两者都被创建,我们就可以配置一个新的虚拟机来使用它。

云供应商

云主机信息在云提供商配置文件中配置。通常,需要配置的基本信息是云驱动、用户名、密码、私钥等。让我们创建一个名为my-amazon-cloud的新云提供商

  • 在 /etc/salt/cloud.providers.d/ 下创建一个文件 my-amazon-cloud.conf

  • 使用ec2驱动程序添加新的提供程序。

my-amazon-cloud:
   driver: ec2
   id: '<AWS_ID>'
   key: '<AWS_KEY>'
   private_key: /path/to/privatekey.pem
   keyname: <name of the key>
   securitygroup: default

   minion:
      master: <master server>

Salt 为各种云主机提供开箱即用的驱动程序,例如 GoGrid、HP Cloud、Google Compute Engine (GCE)、Amazon AWS、Joyent、Linode、OpenNebula、ProfitBricks、Proxmox、Saltify、VexxHost、VMWare 等。

一旦配置了云提供商,我们就可以查询提供商的可用位置、可用机器映像及其各种大小。

salt-cloud --list-location my-amazon-cloud
salt-cloud --list-images my-amazon-cloud
salt-cloud --list-sizes my-amazon-cloud

云简介

云配置文件指定虚拟机映像和大小。可以在-/etc/salt/cloud.profiles.d/下进行配置。让我们创建一个简单的配置文件simple.conf

aws_micro:
   provider: my-amazon-cloud
   image: <image_id>
   size: <machine_id e.g. t1.micro>

虚拟机

一旦配置了提供者和配置文件,我们就可以轻松地使用 salt-cloud 提供一个虚拟机,如下所示。

salt-cloud -p aws_micro master minion1 minion2

其中,p – 配置文件名称 master,minion1 和 minion2 是新的虚拟机。

可以使用以下命令获取新创建的虚拟机的详细信息。

salt-cloud --query

可以使用以下命令销毁虚拟机 –

slat-cloud -d master minion1

云图

Cloud Map 是一种可以同时创建多个虚拟机的特殊格式。映射文件的格式是指定配置文件,然后在其下添加虚拟机列表。

示例地图文件如下 –

micro:
   - web1
   - web2
large:
   - db1
   - db2

映射文件可以作为参数传递给 salt-cloud 命令以创建虚拟机,如下所示 –

salt-cloud -m /path/to/mapfile

SaltStack – Salt 代理 Minions

有很多设备,如路由器、网络设备等,具有自定义操作系统、有限的内存和高安全性考虑。在这些设备中,我们无法安装标准的salt-minion,因此无法管理这些系统。然而,Salt 提供了一种创新技术来克服这种限制。

Salt 有一个单独的模块,即 salt proxy minion,它使用远程系统中运行的 REST 服务来控制远程系统。此 REST 服务是使用Representational State Transfer (REST)概念编写的基于 HTTP 的 Web 服务,它们既易于实现又易于使用。

每个设备都有自己的 SDK 和开发环境来编写复杂的应用程序。Salt 期望根据 Salt 接口规范在设备中开发 REST 服务。Salt 还提供了一个 python 模块来编写 REST web 服务。如果设备支持python,那么开发REST web服务就很容易了。

一旦在远程系统中开发并部署了 REST Web 服务,就可以将 Salt 配置为使用 REST Web 服务而不是 salt minion 来控制远程设备。

工作示例

让我们在现场工作环境中学习salt proxy minion的概念对于 live 环境,我们为 master 和 proxy minion 选择了一个 Linux 系统。我们将使用 REST Web 服务而不是 salt-minion 来控制系统。

安装和配置 REST Web 服务

Salt 提供了 REST Web 服务实现的示例,在其 contrib 模块中将其命名为 proxyminion_rest_example。让我们安装示例 Web 服务。

  • 使用 pip安装“瓶子”命令是一个Python的Web框架来开发Web应用程序。

pip install bottle = 0.12.8
  • 从 github下载saltstack/salt-contrib项目。否则,使用以下命令克隆项目。

git clone https://github.com/saltstack/salt-contrib
  • 打开终端并转到salt-contrib目录。

  • 这个 salt-contrib 目录将有一个文件夹,proxyminion_rest_example此文件夹包含 REST Web 服务的示例实现。转到 proxyminion_rest_example 文件夹。

  • 运行以下命令以启动 REST Web 服务。

python rest.py --address <your ip address> --port 8000
  • 打开浏览器并加载 http://«您的 IP 地址»:8000。这将显示包含服务和包的默认页面,如下面的屏幕截图所示。

REST 网络服务

现在,我们已经配置了 REST web 服务,它将检查如何配置 salt 代理来查询 REST web 服务并控制系统。

配置盐代理

要配置 Salt-Proxy,我们必须遵循以下步骤。

  • 我们必须为盐代理指定主节点。编辑 /etc/salt /proxy 中的代理配置文件位置,然后输入以下代码。

master: <your ip address>
  • 修改/创建/srv/pillar/top.sls 中的基础支柱文件,如以下代码块所示。

base:
  'p8000':
      - p8000
  • /srv/pillar 中添加一个新的 pillar 文件p8000.sls如下面的代码块所示。

proxy:
   proxytype: rest_sample
   url: http://<your ip address>:8000
  • 使用以下命令在调试模式下启动 salt-proxy。

salt-proxy --proxyid = p8000 -l debug
  • 与 salt-minion 类似,接受如下所示salt-proxy 密钥

salt-key -y -a p8000

The following keys are going to be accepted:
Unaccepted Keys:
p8000
Key for minion p8000 accepted.

运行盐

现在,运行salt命令并调用ping.test函数,如下所示。

salt p8000 test.ping

我们可以通过使用salt来运行 REST web 服务支持的任何函数,它类似于salt-minion

例如,可以使用以下命令获取谷物信息。

salt p8000 grains.items

SaltStack – 事件系统

Salt 中的事件系统是一个本地 ZeroMQ PUB 接口,它会触发 salt 事件。它由以下组件执行。

  • 事件套接字– 用于发布事件。

  • 事件库– 用于侦听事件并将事件发送到盐系统。

盐大师活动

Salt master 提供不同类型的事件,下面详细解释 –

  • 认证事件
  • 开始活动
  • 关键事件
  • 工作事件
  • 跑者活动
  • 出席活动
  • 云事件

让我们详细了解每种事件类型。

认证事件

当 minion 与 master 执行身份验证检查时,会触发这些身份验证事件。它由salt/auth 表示。

开始活动

每当一个 minion 连接到 Salt Master 时都会触发 start 事件,它由 salt/minion//start 表示。

关键事件

当 salt master 接受和拒绝 Salt minion 上的密钥时,会触发 Key 事件。您可以使用 salt-key 命令访问此事件。

工作事件

每当要开始新作业时都会触发 Job 事件。它由salt/job//new 表示在这里,JID – 作业 ID 新 – 新作业

跑者活动

当跑步者开始执行时,会触发跑步者事件。它用 salt/run//new 表示。

出席活动

当 Minion 连接或新连接或断开连接时,此事件会定期触发。它由 – salt/presence/presentsalt/presence/change 表示这里,

  • Present – 表示 Salt Master 当前连接到 Minions 列表。

  • Change – 用于检测新的 minion – 已连接或已断开连接。

云事件

盐云事件在虚拟机上触发。除非发生其他事件,否则不会在 minion 上执行。您可以使用 – salt/cloud//creating访问它当 Salt 云启动虚拟机执行过程时会触发它。

活动工具

现在,让我们来看看事件工具和脚本。您可以使用 CLI 访问事件总线。它通过以下命令访问。

salt-run state.event pretty = True

在这里,运行器旨在与来自外部工具和 shell 脚本的事件总线进行交互。Salt 的事件总线可以通过REST API远程访问它由 –(示例 URL)表示。

curl -SsNk https://salt-api.example.com:8000/events?token = 05A3.

同样,您也可以从 Python 脚本访问事件。

SaltStack – 编排

一般来说,编排是系统的自动协调和安排。Orchestrate runner 用于在 SaltStack 中执行编排。

编排跑步者

Orchestrate Runner 提供OverState(以前的系统)的所有功能它最初被称为state.sls runner。这个编排运行器用于将 Salt 状态系统推广到 Salt Master 上下文。

state.slsstate.highstate功能在每个盐仆从执行,但state.orchestrate转轮上的主执行。state.orchestrate亚军,让您充分管理整个基础架构的状态。让我们了解如何通过一个简单的执行过程。

简单执行

Orchestrate Runner 命令与state.sls函数相同,但您可以使用“salt-run”而不是 salt 来执行它。

假设你有一个sample.sls文件位于/srv/salt/orch/samples.sls在该文件中添加以下代码。

样本.sls

install_nginx:
   salt.state:
      - tgt: 'web*'
      - sls:
         - nginx

以下命令用于在主服务器上运行,它将应用该文件中定义的状态。

salt-run state.orchestrate orch.sample

它将产生以下输出

saltmaster.local_master:
----------
   ID: install_nginx
   Function: salt.state
   Result: True
   Comment: States ran successfully.
   Started: 11:54:56.308078
   Duration: 63.401 ms
   Changes:

Summary for saltmaster.local_master
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time:  63.401 ms
root@saltmaster:/home/vagrant#

在这里,根据当前版本,运行器函数被重命名为state.orchestrate这将有助于避免与 state.sls 执行函数混淆,但必须使用之前版本的state.sls

执行函数

要执行一个函数,你应该使用salt.function考虑一个文件data.sls位于/srv/salt/orch/data.sls现在,在该文件中添加以下更改。

数据文件

cmd.run:
   salt.function:
      - tgt: '*'
      - arg:
         - rm -rf /tmp/data

以下命令用于执行 Salt 功能。

root@saltmaster:/home/vagrant# salt-run state.orchestrate orch.data

它将产生以下输出

saltmaster.local_master:
----------
   ID: cmd.run
   Function: salt.function
   Result: True
   Comment: Function ran successfully. Function cmd.run ran on minion1, minion2.
   Started: 12:14:54.791635
   Duration: 234.615 ms
   Changes:
      minion1:

      minion2:
Summary for saltmaster.local_master
------------
Succeeded: 1 (changed = 1)
Failed:    0
------------
Total states run:     1
Total run time: 234.615 ms

SaltStack – 盐包管理器

Salt 公式使用包管理器打包并分发给 Salt Master。这个概念受到RPMYumPacman包装系统的影响。公式使用盐状态、支柱、文件模板等文件,然后打包成单个文件。

创建公式包后,将其复制到存储库系统以供 Salt Master 使用。在转到包管理器之前,让我们看看如何使用 Salt 基本命令安装“nginx”包。

以下语法用于安装“nginx”包。

root@saltmaster:/home/vagrant# salt '*' pkg.install nginx

在这里,pkg.install nginx命令用于安装包。执行后,您将看到以下响应。

它将产生以下输出

minion2:
   ----------
   httpd:
      ----------
      new:
         1
      old:
   httpd-cgi:
      ----------
      new:
         1
      old:
   libxslt1.1:
      ----------
      new:
         1.1.28-2build1
      old:
   nginx:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:
   nginx-common:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:
   nginx-core:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:
minion1:
   ----------
   httpd:
      ----------
      new:
         1
      old:
   httpd-cgi:
      ----------
      new:
         1
      old:
   libxslt1.1:
      ----------
      new:
         1.1.28-2build1
      old:
   nginx:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:
   nginx-common:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:
   nginx-core:
      ----------
      new:
         1.4.6-1ubuntu3.7
      old:

现在,您已经安装了一个软件包。要启动该包的服务,请使用下面给出的命令。

root@saltmaster:/home/vagrant# salt '*' service.start nginx

运行此命令后,结果如下面的代码块所示。

minion1:
   True
minion2:
   True

因此,我们已经使用基本命令安装并启动了“nginx”包的服务。现在让我们讨论如何在 Salt 包管理器中构建和安装包。

构建包

可以在任何可以安装 Salt 的系统上构建软件包。有三种类型的包,它们如下。

  • 公式
  • 反应堆
  • 会议

现在让我们了解如何使用公式文件构建包

公式文件

包中的大部分文件默认都在-/srv/spm/salt/目录下,但pillar文件可以放在-/srv/spm/pillar/目录下。公式文件描述了包。

例子

name: apache
os: RedHat
os_family: RedHat
version: 201607
release: 2
summary: Formula for installing Apache
description: Formula for installing Apache

这里,

  • 名称– 包的名称。在这里,包名称是apache

  • os – 用于了解哪些操作系统可以支持此包。

  • os_family – 用于了解哪些操作系统系列可以支持此包。

  • 版本– 包的版本。它以 YYYYMM 格式指定。

  • Release – 此字段主要是指版本的发布。

  • 摘要– 包的简短描述。

  • 描述– 包的更详细描述。

反应堆

反应器文件位于/srv/spm/reactor/目录中。

配置文件

这种类型的包中的文件是 Salt 的配置文件,通常位于/etc/salt/目录中。Salt 以外的包的配置文件可以并且应该使用 Salt State(使用公式类型的包)进行处理。

让我们继续以下步骤来构建一个包。

  • 创建一个 FORMULA 文件并将其放在包文件夹的根目录中。

  • 将公式文件组装到构建系统上的文件夹中。

  • 运行spm 构建该包已构建并放置在 /srv/spm_build 文件夹中。以下命令用于构建包。

spm build /path/to/salt-packages-source/formula
  • 现在,将.spm文件复制到存储库系统上的文件夹。

  • 您可以在网络上共享srv/spm_build文件夹,或者将文件复制到您的 FTP 或Web服务器。

  • 使用以下命令生成 repo 元数据。

spm create_repo /srv/spm_build

安装包

本节介绍有关安装 Salt 包管理器包的信息。

配置远程存储库

要配置远程存储库,Salt Master 需要通过配置过程知道存储库的位置。

文件位于/etc/salt/spm.repos.d/spm.repo目录中。

例子

file_repository:
   url: https://spm.example.com/

此处,该文件包含存储库的名称和存储库的链接。您还可以使用 http、https、ftp 或文件路径。要使用文件路径,您可以使用 URL 访问它:file:///srv/spm_build。

更新元数据

在 Salt Master 上配置存储库后,使用以下命令下载存储库元数据。

spm update_repo

更新文件根

SPM 软件包位于 srv/spm/salt 目录中。将以下路径添加到 Salt Master 上的文件根目录,

file_roots:
   base:
      1. /srv/salt
      2. /srv/spm/salt

现在,重新启动 salt master。

安装 Apache 包

要安装包 apache,请使用以下命令。

spm install apache

您也可以使用以下命令直接从 SPM 文件安装。

spm local install /srv/spm/apache-201607-1.spm

删除包

要删除一个包,例如 – apache,请使用以下命令,

spm remove apache

请注意,如果任何文件被修改,它们将不会被删除。

SaltStack – Python API

Salt 提供对其所有命令的编程访问。Salt 为 Salt 系统的每个部分提供了不同的模块。在本章中,让我们学习 Python API 的基础知识以及如何运行基本的 salt 命令。

配置

salt.config模块用于接入盐配置的详细信息。

import salt.config
opts = salt.config.client_config('/etc/salt/master')

在这里,client_config读取 salt 配置文件并将配置详细信息作为字典返回。

装载机

所述salt.loader模块用于加载在Salt每个模块,例如谷物,爪牙等

import salt.loader
opts = salt.config.minion_config('/etc/salt/minion')
grains = salt.loader.grains(opts)

在这里,grains读取 Salt 系统中的grains 的详细信息并返回。

客户端模块

所述salt.client模块用于执行盐,盐呼叫和编程方式将盐-SSH命令。

最重要的 Python 类如下 –

  • salt.client.LocalClient
  • salt.client.Caller
  • salt.client.ssh.client.SSHClient

大多数客户端模块提供的主要功能是cmd该函数包装了CLI选项并执行它,类似于命令行,将结果作为python数据结构返回。

本地客户端

LocalClient 用于从 master 向 salt minions 发送命令并将结果返回给 master。

import salt.client

local = salt.client.LocalClient()
local.cmd('*', 'test.ping')

它将产生以下输出

{'minion1': True, 'minion2': True }

呼叫者

Caller 用于以编程方式运行salt-call并返回结果。

import salt.client
caller = salt.client.Caller()
caller.cmd('test.ping')

它将产生以下输出

True

SSH客户端

SSHCient 用于以编程方式运行salt-ssh并返回结果。

import salt.client.ssh.client
ssh = salt.client.ssh.client.SSHClient()
ssh.cmd('*', 'test.ping')

它将产生以下输出

{'minion1': True, 'minion2': True }

云客户端

salt.cloud 模块用于以编程方式执行 salt-cloud 命令。

client = salt.cloud.CloudClient(path = '/etc/salt/cloud')

Cloud 模块提供创建虚拟机(create)、销毁虚拟机(destroy)、列出云提供商提供的图像(list_images)、列出云提供商的位置(list_locations)、列出云提供商的机器大小(list_sizes)的功能,等等。

SaltStack – 工作示例

在这个工作示例中,我们将创建一个 Salt 公式,该公式将配置 apache Web 服务器以及 PHP 软件。Salt 是执行临时命令的好方法,但您不会真的希望以这种方式持续配置您的基础设施。通过创建一组 Salt 公式,您可以可靠地复制任何配置。

Salt Formulas 是简单的 YAML 文本文件,默认情况下驻留在您的 Salt Master 的/srv/salt/* 中让我们首先创建一个 Salt 公式来同时安装 Apache Web 服务器和 PHP。

/srv/salt/目录下创建一个名为“websetup.sls”的文件并添加以下代码。

websetup.sls

websetup:
   pkg:
      - installed
      - pkgs:
         - apache2
         - php5
         - php5-mysql

在此示例中,请注意“- pkgs:”参数。“- pkgs:”下面列表中的每一项都将一起传递给操作系统的包管理器一起安装。每当您要安装大量软件包时,这是安装它们的最有效方法。

使用以下命令将此公式应用于 Salt Master。

root@saltmaster:/home/vagrant# salt 'minion2' state.sls websetup

现在,您将看到以下输出

minion2:
----------
   ID: websetup
   Function: pkg.installed
   Result: True
   Comment: 3 targeted packages were installed/updated.
   Started: 01:50:53.978396
   Duration: 86738.132 ms
   Changes:
      ----------
         apache2:
            ----------
            new:
               2.4.7-1ubuntu4.13
            old:
         apache2-api-20120211:
            ----------
            new:
               1
            old:
         apache2-bin:
            ----------
            new:
               2.4.7-1ubuntu4.13
            old:
         apache2-data:
            ----------
            new:
               2.4.7-1ubuntu4.13
            old:
         libapache2-mod-php5:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         libapr1:
            ----------
            new:
               1.5.0-1
            old:
         libaprutil1:
            ----------
            new:
               1.5.3-1
            old:
         libaprutil1-dbd-sqlite3:
            ----------
            new:
               1.5.3-1
            old:
         libaprutil1-ldap:
            ----------
            new:
               1.5.3-1
            old:
         php5:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         php5-cli:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         php5-common:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         php5-json:
            ----------
            new:
               1.3.2-2build1
            old:
         php5-mhash:
            ----------
            new:
               1
            old:
         php5-mysql:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         php5-readline:
            ----------
            new:
               5.5.9+dfsg-1ubuntu4.21
            old:
         phpapi-20121212:
            ----------
            new:
               1
            old:
         ssl-cert:
            ----------
            new:
               1.0.33
            old:
Summary for minion2
------------
Succeeded: 1 (changed = 1)
Failed:    0
------------ 
Total states run:     1
Total run time:  86.738 s

现在,您已经在minion2 中安装了软件包

高州

“highstate”是 Salt 确定应将哪个 Salt 公式应用于某个仆从的一种方式。使用以下命令执行“highstate”。

root@saltmaster:/home/vagrant# salt <targets> state.highstate

顶.sls

如前所述,当 minion 请求执行 highstate 时,minion 会从 Salt Master 请求 top.sls 并搜索它匹配的公式。默认情况下,此文件位于 /srv/salt/top.sls。让我们将公式添加到 top.sls 文件并将 minion2 设置为目标。

base:
   '*':
      - common
   'minion2’:
      - websetup

现在,执行highstate目标 minion2,如下所示。

root@saltmaster:/home/vagrant# salt 'minion2' state.highstate

应用此操作后,您可以看到以下输出

minion2:
----------
   ID: common_packages
   Function: pkg.installed
   Result: True
   Comment: All specified packages are already installed
   Started: 01:55:17.998824
   Duration: 461.615 ms
   Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time: 461.615 ms

现在,Apache Web 服务器和 PHP 安装在 minion2 中。通过这种方式,我们必须同时使用top.slshighstate来定位minion并以最少的工作和最大的灵活性安装所需的软件。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁