Saltstack

出自 ArchWiki

来自 docs.saltproject.io

Salt 是一种新的基础设施管理方法。它非常容易上手,几分钟即可运行,可扩展性强,足以管理数万台服务器,并且速度非常快,可以在几秒钟内与它们通信。
Salt 为基础设施提供了一个动态的通信总线,可用于编排、远程执行、配置管理等等。

安装

安装 saltAUR 软件包。

Salt Stack 组件

Salt 的核心是一个远程执行解决方案。它可以在远程主机上运行预定义或任意命令。Salt 基于 master/minion 拓扑结构运行。master 服务器充当客户端(称为 minions)的中央控制总线,而 minions 连接回 master。

Salt Master

默认配置适用于绝大多数安装。启动/启用 salt-master.service

Salt Master 也可以在前台以调试模式启动,从而大大增加命令输出

# salt-master -l debug

Salt Master 需要绑定到系统上的 2 个 TCP 网络端口,这些端口是 4505 和 4506。

Salt Minion

Salt Minion 可以在有或没有 Salt Master 的情况下运行。本 wiki 假设 minion 将连接到 master。有关如何运行 masterless minion 的信息,请参阅 masterless 快速入门指南:https://docs.saltproject.io/en/latest/topics/tutorials/quickstart.html

Salt minion 只需要知道一个信息即可运行,即 master 的网络位置。默认情况下,minion 将查找 DNS 名称 salt 作为 master,最简单的方法是将内部 DNS 设置为将名称 salt 解析回 Salt Master IP。否则,需要编辑 minion 配置文件,编辑配置选项 master 以指向 Salt Master 的 DNS 名称或 IP。

/etc/salt/minion
master: saltmaster.example.com

现在 master 可以被找到,启动/启用 salt-minion.service

或者以调试模式运行

# salt-minion -l debug

Salt Key

Salt 使用公钥加密和身份验证来验证 minion。为了使 minion 开始接受来自 master 的命令,需要接受 minion 密钥。salt-key 命令用于管理 master 上的所有密钥。要列出 master 上的密钥,请运行 salt-key list 命令

# salt-key -L

列出了已被拒绝、接受和待接受的密钥。要接受一个 minion

# salt-key -a minion.example.com

或者您可以一次接受所有密钥,使用 

# salt-key -A

Salt Cloud

Salt 也可以用于在大多数主要云提供商上配置云服务器。为了连接到这些提供商,可能需要额外的依赖项。python-apache-libcloudAUR 是许多流行的提供商(如 Rackspace 和 Amazon)所必需的。有关配置云提供商的更多详细信息,请访问官方 wiki:https://docs.saltproject.io/en/latest/topics/cloud/

Salt 命令

在连接并接受 Salt Master 上的 minion 后,您现在可以向 minion 发送命令。Salt 命令允许执行大量功能,并可以针对特定的 minion 和 minion 组执行操作。这使得 salt 命令非常强大,但该命令也非常易用且易于理解。

salt 命令由命令选项、目标规范、要执行的函数以及函数的参数组成。一个简单的入门命令如下所示

# salt '*' test.ping

* 是目标,它指定所有 minions,而 test.ping 告诉 minions 运行 test.ping 函数。此 salt 命令将告诉所有 minions 并行执行 test.ping 并返回结果。

有关更多命令,请参阅文档或运行

# salt '*' sys.doc

Salt States

除了运行命令外,salt 还可以使用所谓的 states。state 就像一个配置文件,允许以完全相同的方式设置新的安装。state 也可以在安装后几周运行,以确保计算机仍处于已知配置中。

Salt 环境

States 可以分为不同的环境。这些环境可用于在移动到生产机器之前在测试环境中进行更改、以相同方式配置一组服务器等等。基本环境默认为 /srv/salt,有时必须手动创建 /srv/salt

可以在 salt-master 文件中设置不同的环境。请查看 /etc/salt/master 以获取更多信息。

创建 State

state 是一个扩展名为 .sls 的文本文件,位于配置的环境中。这里假设仅设置了默认的基本环境。

创建 一个名为 test.sls 的文件在 /srv/salt 中,内容如下

/srv/salt/test.sls
netcat:
 pkg.installed: []

现在运行 state

# salt '*' state.apply test

Salt 将在基本环境文件夹中搜索任何名为 test.sls 的文件,并将找到的配置应用于所有服务器。在本例中,netcat 将安装在所有服务器上。

有关 state 文件语法和使用 states 的更多信息,请参阅此处:https://docs.saltproject.io/en/latest/topics/tutorials/starting_states.html

Top 文件

Top 文件是一次将不同配置应用于不同服务器的主要方式。Top 文件名为 top.sls,位于环境的根目录中。可以使用以下命令运行 top 文件配置

# salt '*' state.apply

假设我们有 2 台服务器:fs01、web01。我们还假设我们在基本环境中有 3 个 states:nettools.slssamba.slsapache.sls。这是一个示例

top.sls
# Applied to all servers
'*':
  nettools

# Applied only to fs01
fs01:
  samba

# Applied only to web01
web01:
  apache

state.apply 运行时,会读取 top 文件,并将 states 应用于正确的服务器。例如:nettools 应用于所有服务器,samba 应用于 fs01,apache 应用于 web01。

计划任务

使用以下命令在 minion 上启用 salt 调度器

# salt 'minion-name' schedule.enable

安装 python2-dateutilAUR 在 master 和任何将使用调度器的 minions 上,并在该服务器上重启 salt-minion 服务。请记住,您可以使用 state 或 salt '*' 命令轻松地在所有 minions 上安装 python2-dateutilAUR 并重启 salt-minion 服务。

假设存储在 /srv/salt 中的 samba.sls 需要在每周一在 fs01 上运行。这可以通过将以下内容放入 state 文件并运行它来实现。

 configure_samba_daily:
   schedule.present:
     - function: state.sls
     - job_args:
       - samba
     - when:
       - Monday 5:00am

运行

# salt 'minion-name' schedule.list

以验证作业是否已添加到计划中。

注意: 在上面的配置文件中,为函数指定 state.sls 是指定 job_args 接收名为 samba 的 state 的方式。不要尝试用 samba.sls 或任何其他 .sls 文件替换 state.sls。Function 只是告诉调度器如何处理 jobs_args。

有关配置计划的更多详细信息,请参阅 https://docs.saltproject.io/en/latest/ref/states/all/salt.states.schedule.html

参见