您可以使用 SaltStack Config 中的作业来简化和自动化您或您的团队定期执行的常见配置管理任务和过程。

SaltStack Config 中的作业是什么?

作业用于运行远程执行任务或将状态文件应用于由 SaltStack Config 管理的节点(工作节点)。作业通常用于需要自动运行多次的系统操作。可以创建作业以自动执行在系统中置备、配置、部署、监控和管理节点时定期执行的常见任务。还可以将作业设置为定期运行,例如定期检查和防止配置偏差的作业。

可以保存经常重复执行的作业,并逐步构建丰富的作业库,供您的团队将来重用。使用作业进行配置管理可以缩短您的团队在系统中手动安装、配置、部署、更新和维护节点所需的时间。

常见作业示例

有关作业工作原理的实践操作介绍以及典型作业的一些实际示例,请参见 SaltStack Config 入门指南中的教程:

根据您的预期目标和目的,您可能会在 SaltStack Config 中运行数千种不同的作业。确定要完成的任务或需要解决的问题后,可以搜索可用的 Salt 模块以查找执行所需功能的模块。

SaltStack Config 中的作业通常包含 Salt 开源社区开发的一个或多个执行模块或状态模块。Salt 执行模块是包含 Python 代码的小程序,可在 Salt 工作节点上运行并执行特定的任务。Salt 状态模块类似于执行模块。Salt 状态模块是包含 Python 代码的程序,可在 Salt 状态文件中用于管理将状态应用于工作节点的情况。

下表显示了一些最常用的执行模块和状态模块:

Salt 模块 说明

state.apply

将状态文件应用于工作节点的模块。当状态文件运行时,该模块会检查工作节点是否处于当前所需的状态。如果工作节点未处于当前所需的状态,则该模块会运行命令和模块以将该工作节点置于所需状态。

highstate 将应用 top 文件中定义的所有状态。有关详细信息,请参见 state.highstate

pkg.installed

一个状态模块(意味着在状态文件中使用),用于检查是否安装了软件包的正确版本。如果未安装,则该模块会安装软件包并确保安装的是该软件包的正确版本。有关在特定操作系统中安装软件包的详细信息,请参见 salt.states.pkg

file.managed

一个状态模块(意味着在状态文件中使用),用于从 Salt 主节点下载文件,并将该文件放置在目标工作节点上供以后使用。有关使用 Salt 管理文件的详细信息,请参见 salt.states.file

service.running

一个状态模块(意味着在状态文件中使用),用于检查服务是否正在运行。如果服务未运行,则该模块会启动该服务。有关使用 Salt 启动或重新启动服务的详细信息,请参见 salt.states.service

有关 Salt 执行模块和状态模块完整列表的详细信息,请参见 Salt 模块索引

如果 Salt 中没有您需要的模块,则可以通过采用 Python 编写自己的自定义模块来扩展 Salt。如果需要,还可以将该模块提交到上游的 Salt Project。Salt Project 社区由 VMware 官方赞助,包括从事 IT 和系统管理工作的 3,000 多位参与者。Salt 社区通过创建各种执行模块和状态模块来扩展 Salt,以完成最常见的任务或解决系统管理员面临的最重要问题。

作业工作流概述

通常,高级系统管理员创建、配置和保存作业设置以供以后重用。然后,高级管理员可以授权初级管理员在初级管理员有权访问的任何节点(目标)上运行此作业。创建作业时,高级管理员定义作业输入,这些输入指的是初级管理员可以在运行时更改的特定作业设置或变量。

例如,高级系统管理员可能会构建这样一个作业:创建和部署虚拟机,并在该计算机上安装一组基本的应用程序或服务。每次需要部署新虚拟机时,都可以运行该作业,以确保将一组相同的应用程序和配置应用于每个部署。创建此基本作业后,高级系统管理员可以向初级管理员授予在其有权访问的目标(节点)上运行此作业的访问权限。使用 SaltStack Config 中基于角色的访问控制 (RBAC) 并遵循最小特权原则,高级管理员可以确定初级管理员可以运行哪些作业以及在哪些节点(工作节点)上运行。

创建和运行作业是一个多步骤过程,需要在 SaltStack Config 中使用一些不同的工具和工作区。下图概述了整个作业工作流:

说明作业工作流的图表

下文介绍了每个步骤: