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