介绍
配置管理是以确保随着时间的推移保持完整性的方式处理系统更改的过程,通常涉及促进自动化和可观察性的工具和过程。 尽管这个概念并非起源于 IT 行业,但该术语被广泛用于指代 服务器配置管理 。
在服务器的上下文中,配置管理通常也称为 IT Automation 或 Server Orchestration。 这两个术语都强调了配置管理的实际方面以及从中央服务器控制多个系统的能力。
本指南将引导您了解使用配置管理工具自动化服务器基础架构设置的好处,以及这样的工具 Ansible 如何为您提供帮助。
使用配置管理工具的好处
市场上有许多配置管理工具,它们具有不同程度的复杂性和不同的架构风格。 尽管这些工具中的每一个都有自己的特点并且工作方式略有不同,但它们都提供相同的功能:确保系统的状态与一组 配置脚本 描述的状态相匹配。
服务器配置管理的许多好处来自于将基础设施定义为代码的能力。 这使您能够:
- 使用版本控制系统来跟踪基础架构中的任何更改
- 为多个服务器环境重用配置脚本,例如开发、测试和生产
- 在同事之间共享配置脚本以促进标准化开发环境中的协作
- 简化复制服务器的过程,这有助于从严重错误中恢复
此外,配置管理工具为您提供了一种从集中位置控制一台到数百台服务器的方法,这可以显着提高服务器基础架构的效率和完整性。
Ansible 概述
Ansible 是一种现代化的配置管理工具,它有助于设置和维护远程服务器的任务,其极简设计旨在让用户快速启动和运行。
用户使用 YAML 编写 Ansible 配置脚本,这是一种用户友好的数据序列化标准,不依赖于任何特定的编程语言。 与同一类别中的类似工具相比,这使用户能够更直观地创建复杂的配置脚本。
Ansible 不需要在将使用此工具管理的节点上安装任何特殊软件。 使用 Ansible 软件设置控制机器,然后通过标准 SSH 与节点通信。
作为一个配置管理工具和自动化框架,Ansible 封装了同类其他工具中存在的所有常见功能,同时仍然非常关注简单性和性能:
幂等行为
Ansible 跟踪托管系统中的资源状态,以避免重复之前执行的任务。 如果一个软件包已经安装,它不会尝试再次安装它。 目标是在每次配置执行后,系统达到(或保持)所需状态,即使您多次运行它也是如此。 这就是 Ansible 和其他配置管理工具具有 幂等行为 的特点。 运行剧本时,您将看到正在执行的每个任务的状态以及该任务是否在系统中执行了更改。
支持变量、条件和循环
在编写 Ansible 自动化脚本时,您可以使用变量、条件和循环,以使您的自动化更加通用和高效。
系统事实
Ansible 收集一系列有关被管节点的详细信息,例如网络接口和操作系统,并将其作为全局变量提供,称为 系统事实 。 事实可以在剧本中使用,以使您的自动化更加通用和适应性强,根据所配置的系统表现不同。
模板系统
Ansible 使用 Jinja2 Python 模板系统来允许动态表达式和访问变量。 模板可用于帮助设置配置文件和服务。 例如,您可以使用模板在 Apache 中设置新的虚拟主机,同时为多个服务器安装重用相同的模板。
支持扩展和模块
Ansible 附带了数百个内置模块,以促进常见系统管理任务的编写自动化,例如使用 apt
安装包和使用 rsync
同步文件,以及处理流行的软件,例如数据库系统(如 MySQL、PostgreSQL、MongoDB 等)和依赖管理工具(如 PHP 的 composer
、Ruby 的 gem
、Node 的 npm
等)。 除此之外,您可以通过多种方式扩展 Ansible:当您需要默认情况下不存在的自定义功能时,插件和模块是不错的选择。
您还可以在 Ansible Galaxy 门户中找到第三方模块和插件。
熟悉 Ansible 概念
现在,我们将了解 Ansible 术语和概念,以帮助您熟悉这些术语,因为它们在本系列中出现。
控制节点
控制节点 是安装了 Ansible 并设置为连接到您的服务器的系统。 您可以拥有多个控制节点,任何能够运行 Ansible 的系统都可以设置为控制节点,包括运行基于 Linux 或 Unix 的操作系统的个人计算机或笔记本电脑。 目前,Ansible 无法安装在 Windows 主机上,但您可以通过设置运行 Linux 的虚拟机并从那里运行 Ansible 来规避此限制。
托管节点
您使用 Ansible 控制的系统称为 托管节点 。 Ansible 要求 托管节点可通过 SSH 访问,并且已安装 Python 2(2.6 或更高版本)或 Python 3(3.5 或更高版本)。
Ansible 支持多种操作系统,包括作为托管节点的 Windows 服务器。
存货
inventory 文件包含您将使用 Ansible 管理的主机列表。 尽管 Ansible 通常在安装时会创建一个默认清单文件,但您可以使用每个项目的清单来更好地分离您的基础架构,并避免在错误的服务器上错误地运行命令或 playbook。 静态清单通常创建为 .ini
文件,但您也可以使用以任何能够返回 JSON 的编程语言编写的动态生成的清单。
任务
在 Ansible 中,task 是在受管节点上执行的单个工作单元。 每个要执行的动作都被定义为一个任务。 任务可以通过临时命令作为一次性操作执行,或者作为自动化脚本的一部分包含在剧本中。
剧本
playbook 包含一个有序的任务列表,以及一些其他指令来指示哪些主机是该自动化的目标,是否使用权限提升系统来运行这些任务,以及用于定义的可选部分变量或包含文件。 Ansible 按顺序执行任务,完整的剧本执行称为 play。 剧本以 YAML 格式编写。
处理程序
Handlers 用于对服务执行操作,例如重新启动或停止在受管节点系统上主动运行的服务。 处理程序通常由任务触发,它们的执行发生在播放结束时,在所有任务完成之后。 这样,如果有多个任务触发了服务的重启,例如,该服务只会在所有任务执行完毕后重启一次。 尽管默认处理程序行为更有效并且总体上是一种更好的实践,但如果任务需要,也可以强制立即执行处理程序。
角色
role 是一组 playbook 和相关文件,它们组织成 Ansible 已知的预定义结构。 角色有助于重用 playbook 并将其重新调整为可共享的粒度自动化包,以实现特定目标,例如安装 Web 服务器、安装 PHP 环境或设置 MySQL 服务器。
结论
Ansible 是一个极简主义的 IT 自动化工具,学习曲线平缓,部分原因在于它在配置脚本中使用了 YAML。 它具有大量内置模块,可用于抽象任务,例如安装包和使用模板。 其简化的基础架构要求和可访问的语法非常适合那些开始使用配置管理的人。
在本系列的下一部分中,我们将看到如何在Ubuntu 20.04服务器上安装和开始使用Ansible。