引言
配置管理是指以确保系统长期完整性的方式处理系统变更的过程,通常涉及促进自动化和可观察性的工具和流程。尽管这一概念并非起源于IT行业,但该术语广泛用于指代服务器配置管理。
在服务器环境中,配置管理也常被称为IT自动化或服务器编排。这两个术语都强调了配置管理的实际方面以及从中央服务器控制多个系统的能力。
本指南将带您了解使用配置管理工具自动化服务器基础设施设置的好处,以及如何通过一款名为Ansible的工具来实现这一目标。
使用配置管理工具的好处
市面上有许多配置管理工具,它们的复杂程度和架构风格各异。尽管这些工具各有特色,工作方式也略有不同,但它们都提供相同的功能:确保系统状态与一组配置脚本所描述的状态相匹配。
服务器配置管理的诸多好处很大程度上源自于将基础设施定义为代码的能力。这使您能够:
- 使用版本控制系统跟踪基础设施中的任何变更
- 为多个服务器环境(如开发、测试和生产)复用配置脚本
- 在同事间共享配置脚本,以促进标准化开发环境中的协作
- 简化服务器复制流程,便于从严重错误中恢复
此外,配置管理工具还提供了一种从中心位置控制一台至数百台服务器的方法,这能显著提高服务器基础设施的效率和完整性。
Ansible概述
Ansible是一款现代配置管理工具,其设计简洁,旨在快速帮助用户搭建和维护远程服务器。
用户编写Ansible配置脚本使用的是YAML,这是一种用户友好的数据序列化标准,不依赖于任何特定的编程语言。这使得用户相比同类工具能更直观地创建复杂的配置脚本。
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服务器。
清单
清单文件包含了一组主机列表,这些主机将通过Ansible进行管理。尽管Ansible在安装时通常会创建一个默认的清单文件,但你可以为每个项目使用独立的清单文件,以便更好地划分基础设施,并避免因误操作而在错误的服务器上运行命令或剧本。静态清单通常创建为.ini
格式的文件,但你也可以使用任何能够返回JSON的编程语言生成的动态清单。
任务
在Ansible中,任务是执行在受管节点上的工作单元。每个要执行的动作都定义为一个任务。任务可以通过临时命令作为一次性动作来执行,或者作为自动化脚本的一部分包含在剧本中。
剧本
剧本包含了一系列有序的任务,以及一些指令,用于指明自动化目标的主机、是否使用特权提升系统来运行这些任务,以及可选的部分来定义变量或包含文件。Ansible按顺序执行任务,整个剧本的执行被称为一个剧本执行。剧本是用YAML格式编写的。
处理器
处理器用于对服务执行操作,例如重启或停止在受管节点系统上运行的服务。处理器通常由任务触发,其执行发生在剧本结束时,即所有任务完成后。这样,如果多个任务触发了服务的重启,例如,服务将仅重启一次,且在所有任务执行完毕后进行。尽管默认的处理器行为更高效且总体上更佳,但如果任务需要,也可以强制立即执行处理器。
角色
角色是一组按照Ansible已知预定义结构组织的剧本及相关文件。角色有助于将剧本重用并重新定位为针对特定目标(如安装Web服务器、安装PHP环境或设置MySQL服务器)的可共享细粒度自动化包。
结论
Ansible 是一款极简主义的 IT 自动化工具,得益于其采用 YAML 编写供应脚本,学习曲线较为平缓。它内置了大量模块,能够抽象执行如安装软件包和处理模板等任务。其简化的基础设施需求和易懂的语法,非常适合初涉配置管理的用户。
在本系列的下一部分,我们将探讨如何在 Ubuntu 20.04 服务器上安装并开始使用 Ansible。