【注】本文译自:https://www.edureka.co/blog/what-is-ansible/
Ansible 是一个开源的 IT 配置管理、部署和编排工具。它旨在为各种自动化挑战提供巨大的生产率收益。该工具使用非常简单,但功能强大,可以自动化复杂的多层 IT 应用程序环境。
通过本文,您将学习:
- Ansible 是什么?
- 为什么我们需要 Ansible?
- 使用 Ansible 的优点
- Ansible 能做什么?
- Ansible 架构
- DevOps 中的 Ansible
- NASA 对 Ansible 的实际用法
- 一些 Ansible 术语,可以帮助您更好地理解Ansible。
为什么我们需要 Ansible ?
在知道什么是 Ansible 之前,有很必要了解 Ansible 出现之前所面临的问题。
让我们稍微回顾一下:在网络计算的开始、可靠而高效地部署和管理服务器成为一项挑战之时。在那个时候,系统管理员手动管理服务器,在单个服务器上安装软件,更改配置以及管理服务。
随着数据中心的发展以及托管应用程序的日益复杂,管理员意识到他们无法满足启用的应用程序那样快速地扩展其手动系统管理。由于开发团队是敏捷的,并且经常发布软件,但是 IT 运营花费很多时间来配置系统,从而阻碍了开发人员的工作速度。这就促进了服务器配置和配置管理工具的蓬勃发展。
考虑一下管理服务器队列的繁琐例程。我们始终需要不断更新,推送更改,在其上复制文件等。这些任务使事情变得非常复杂且耗时。
但是,让我告诉您,上述问题有解决方案。那就是 – Ansible。
在全面介绍 Ansible 之前, 首先让我们熟悉一些 Ansible 术语:
Ansible 术语:
- **控制器机器:**安装 Ansible 的机器,负责在您管理的服务器上运行资源调配。
- 库存:一个初始化文件,其中包含有关您所管理的服务器的信息。
- 剧本:Ansible 置备的入口点,其中的自动化是通过使用 YAML 格式的任务定义的。
- 任务:定义要执行的单个过程的块,例如安装软件包。
- **模块:**模块通常抽象一个系统任务,例如处理程序包或创建和更改文件。Ansible 具有许多内置模块,但是您也可以创建自定义模块。
- **角色:**一种预定义方法,用于组织剧本和其他文件,以便于共享和重用配置的各个部分。
- **播放:**从头到尾执行的预配称为播放。简单来说,执行剧本称为播放。
- **Fact:**包含有关系统信息的全局变量,例如网络接口或操作系统。
- **处理程序:**用于触发服务状态更改,例如重新启动或停止服务。
Ansible 是一个有用的工具,可让您创建一组机器 ,描述如何配置这些机器或应对它们采取什么操作。Ansible 从中央位置发出所有命令来执行这些任务。
节点计算机上未安装其他客户端软件。它使用 SSH 连接到节点。Ansible 只需要安装在甚至可以是笔记本电脑的控制机器(您将在其上运行命令的机器)上。这是解决复杂问题的简单方法。
当我说 Ansible 填补了配置管理和 IT 编排世界中的所有漏洞时,我并没有自夸。当您看看下面提到的 Ansible 的好处时,您也会知道的:
使用 Ansible 的优点
**简单:**Ansible 使用 YAML 格式的简单语法,称为剧本。 YAML是一种人类可读的数据序列化语言。 这非常简单。 因此,不需要任何特殊的编码技能,甚至您的 IT 组织中不了解 Ansible 的人都可以阅读剧本并了解正在发生的事情。 Ansible 总是按顺序执行任务。 安装也很简单。 总之,简单性确保您可以快速入门。
**无代理:**最后,Ansible是完全无代理的。 您无需在要自动执行的客户端系统或主机上安装任何代理/软件或其他防火墙端口。 您不必单独设置管理基础结构,包括管理整个系统,网络和存储。 Ansible 进一步减少了团队立即开始自动化的工作量。
**强大而灵活:**Ansible 具有强大的功能,可以使您对最复杂的 IT 工作流程进行建模。 在这方面,Ansible 的内置电池方法(这种理念意味着自给自足的、开箱即用,具备所需的一切),可以管理您所需要的基础设施、网络、操作系统和服务已被使用,因为 Ansible 为您提供了数百个模块来对其进行管理。 Ansible 的功能使您可以编排整个应用环境,而不管它被部署在何处。
**高效:**服务器上没有额外的软件,意味着更多的应用程序资源。 另外,由于 Ansible 模块通过 JSON 进行工作,因此 Ansible 可以通过使用你熟悉的编程语言编写模块进行扩展。 Ansible 引入了模块作为软件的基本构建块。 因此,您甚至可以根据需要自定义它。 例如如果您已有一个以纯文本格式发送消息的消息发送模块,并且您也想发送图像,也可以添加图像发送功能。
Ansible 能做什么?
Ansible 通常与其他配置管理工具(如Puppet,Chef,SaltStack等)一起分组。嗯,让我告诉您,Ansible 不仅限于配置管理。它也可以以许多不同的方式使用。 下面我会提到一些:
**设置:**您的应用程序必须位于某个地方。 如果您是 PXE(预引导执行环境)引导并启动裸机服务器或虚拟机,或者从模板创建虚拟或云实例,则 Ansible&Ansible Tower 可帮助简化此过程。 例如,如果我要测试使用 Visual C ++ 构建的应用程序的调试版本,则应该满足一些先决条件,例如拥有 Visual C ++ 库 DLL(msvcr100d.dll)。我还将需要在您的计算机中安装 Visual Studio。 这时 Ansible 会确保所需的软件已下载并安装,以便提供我的应用程序。
**配置管理:**它通过记录和更新描述企业的硬件和软件的详细信息,建立并保持产品性能的一致性。此类信息通常包括已应用于已安装软件包的版本和更新以及硬件设备的位置和网络地址。例如:如果要在企业中存在的所有计算机上安装新版本的 Tomcat,那么手动更新每台计算机都是不可行的。您可以使用最简单的方式在 Ansible 剧本和清单中一次性在所有计算机上安装 Tomcat。您所要做的就是列出清单中节点的IP地址,并编写一本手册来安装Tomcat。从您的控制机器上运行该剧本,它将被安装在您的所有节点上。
**应用部署:**使用 Ansible 定义应用程序并使用 Ansible Tower 管理部署时,团队可以有效地管理从开发到生产的整个应用生命周期。例如,假设我要部署默认 Servlet 引擎。部署引擎需要执行许多步骤。
- 将 .war 应用程序从 dropins 目录移动到 apps 目录
- 添加 server.xml 文件
- 导航至该网页以查看您的应用。
但是,当我们拥有 Ansible 之类的工具时,为什么还要担心一步一步地执行这些步骤。您所需要做的就是在 Ansible 剧本中列出这些任务,然后坐下来观看 Ansible 按顺序执行这些任务。
**安全性和合规性:**在 Ansible 中定义安全策略时,可以将站点范围安全策略的扫描和修复集成到其他自动化过程中。而且它将在部署的所有内容中不可或缺。这意味着,您需要在控制计算机中配置一次安全详细信息,然后将其自动嵌入到所有其他节点中。此外,Ansible 中存储的所有凭据(管理员用户 ID 和密码)都无法以任何纯文本格式检索。
**编排:**单独的配置并不能定义您的环境。您需要定义多个配置如何交互,并确保可以将不同的部分作为一个整体进行管理。在复杂性和混乱性中,Ansible 带来了秩序。Ansible 提供了业务请求与应用程序、数据和基础设施保持一致的编排。它通过自动化工作流、供应和变更管理来定义策略和服务级别。这将创建一个与应用程序保持一致的基础设施,可以根据每个应用程序的需求扩大或缩小规模。
例如:考虑一下我想部署一个新网站来代替现有网站的情况。为此,我们将删除现有网站,并部署新网站,并在需要时重新启动负载均衡器或 Web 群集。现在,如果我们只是这样做,用户将注意到停机,因为我们尚未删除通过负载平衡器进入这些计算机的实时流量。因此,我们需要某种类型的预任务,在该任务中,我们告诉负载平衡器将此 Web 服务器置于维护模式,以便在升级时暂时禁止流量通过。假设我在此处添加了一个模块,它的前置任务是禁用负载均衡器中的 Web 节点。
因此,这是我们的前置任务,在此我们禁用流量,然后在此处使用这些不同的任务升级节点。最后,我们需要某种类型的后置任务,通过使它退出维护模式,可以再次使流量到达该 Web 节点。这些任务可以写在 Ansible 剧本中,因此有助于编排环境。
当你对 Ansible 的架构有一个清晰的了解时,你就会更好地理解 Ansible 的工作原理。
Ansible 的架构
Ansible架构相当简单,参考下图:
如您所见,在上图中,Ansible 自动化引擎与编写剧本以执行 Ansible 自动化引擎的用户直接交互。它还与云服务和配置管理数据库(CMDB)进行交互。
Ansible 自动化引擎包括:
- **清单:**Ansible 清单是需要管理的主机(节点)及其IP地址,服务器,数据库等的殂。然后,Ansible 通过传输工具采取行动 - UNIX,Linux或网络设备使用SSH,Windows 系统使用 WinRM。
- **APIs:**Ansible 中的 API 用作云服务的传输,可以是公有云,也可以是私有云。
- **模块:**模块通过剧本直接在远程主机上执行。这些模块可以控制系统资源,例如服务,程序包或文件(实际上是任何东西),或执行系统命令。模块通过操作系统文件、安装软件包或对服务网络进行 API 调用来实现。 Ansible 提供的模块超过 450 个,可自动执行环境的几乎每个部分。例如:
- 云模块(例如 cloudformation ),用于创建或删除 AWS 云组栈;
- 诸如 mssql_db 之类的数据库模块可从远程主机中删除 MYSQL 数据库。
- 插件:插件允许在工作构建步骤中执行 Ansible 任务。 插件是增强 Ansible 核心功能的代码片段。Ansible 附带了许多方便的插件,您可以轻松编写自己的插件。 例如:
- Action 插件是模块的前端,可以在调用模块本身之前在控制器上执行任务。
- Cache 插件用于保留“facts”缓存,以避免昂贵的事实收集操作。
- Callback 插件使您可以挂钩 Ansible 事件以进行显示或记录。
Ansible 架构中还有一些其他组件,解释如下:
- **网络:**Ansible 也可以用于自动化不同的网络。Ansible 使用的是 IT 运营和开发部门已在使用的简单、强大且无代理的自动化框架。使用与 Ansible 自动化引擎分离的数据模型(剧本或角色),该引擎可轻松跨越不同的网络硬件。
- **主机:**Ansible 架构中的主机只是由 Ansible 自动化的节点系统。它可以是任何类型的机器:Windows、Linux、RedHat 等。
- **剧本:**剧本是以 YAML 格式编写的简单文件,描述了 Ansible 要执行的任务。剧本可以声明配置,但即使包含跳转语句,它们也可以协调任何手动排序过程的步骤。他们可以同步或异步启动任务。
- **CMDB:**它是一个存储库,充当 IT 安装的数据仓库。它保存与 IT 资产集合(通常称为配置项(CI))有关的数据,并描述这些资产之间的关系。
- **云:**它是由托管在 Internet 上的远程服务器网络,用于存储、管理和处理数据,而不是本地服务器。您可以在云上启动资源和实例,并连接到服务器。
DevOps 中 Ansible
众所周知,在 DevOps 中,开发和运营工作是集成在一起的。这种集成对于现代测试驱动的应用程序设计非常重要。因此,Ansible 通过为开发和运营提供稳定的环境用以集成,从而实现流畅的编排。请参考下图,看看 Ansible是如何融入 DevOps 的:
现在让我们讨论 Ansible 如何管理整个 DevOps 基础设施。当开发人员开始将基础设施视为其应用程序的一部分时,即将基础设施即代码(IaC),稳定性和性能就成为规范。基础设施即代码是通过计算机可处理的定义文件(而不是物理硬件配置或使用交互式配置工具)来管理和供应计算基础架构(流程、裸机服务器、虚拟服务器等)及其配置的过程。在这方面 Ansible 自动化发挥了重要作用,并在同行中脱颖而出。
在 DevOps 中,系统管理员与开发人员紧密合作,提高了开发速度,可以并花费更多的时间进行诸如性能调整,实验和完成工作之类的活动,而花费在解决问题上的时间却更少。 请参考下图,以了解 Ansible 如何简化 sysadmins 和其他用户的任务。
至此,您知道了使用 Ansible 的好处。那么,现在让我们来看一个真实的例子,NASA 是如何通过 Ansible 受益的。
Ansible 案例研究 – NASA 的真实用法
让我们考虑一下 NASA 面临的业务挑战。 NASA 需要将 65 个应用程序从传统的基于硬件的数据中心转移到基于云的环境中,以实现更好的敏捷性和成本节约。快速的时间表导致许多应用程序“按原样”迁移到云环境。这样就创建了一个环境,该环境跨越了多个难以轻松管理的虚拟私有云(VPC)和AWS账户。即使是简单的事情,例如确保每个系统管理员都可以访问每个服务器或简单的安全修补程序,也非常繁琐。
解决方案是利用 Ansible Tower 来管理和调度云环境。
因此,为了解决 NASA 缺乏集中管理和多样化环境的问题,他们评估了多种解决方案并决定实施 Ansible Tower。NASA 现在正在利用 Ansible Tower 以一种有组织、有计划的方式管理其环境。
NASA 如何使用 Ansible:
Ansible Tower 提供了一个仪表板,该仪表板给出了所有主机和作业的状态摘要,允许 NASA 对所有内容进行分组,并管理不同部门的访问权限。它还通过关联内容和控制组的权限来帮助拆分组织。
Ansible Tower 是一个基于 Web 的界面,用于管理 Ansible。在Ansible 的用户愿望清单中,最重要的一项是易于使用的UI,用于管理快速部署和监视其配置。Ansible 管理层提出了 Ansible Tower 作为回应。
此外,Ansible 通过分配各种角色在团队中划分任务。它管理旧作业历史、活动流、标记为删除的数据和系统跟踪信息的清理。请参考下图,以了解 Ansible 是如何简化 NASA 的工作的。
结果,NASA 实现了以下效率:
• 通过非常简单的 10 行 Ansible 剧本,可以通过 Ansible Tower 定期自动对 NASA Web 应用程序服务器进行修补。
• Ansible 还被用于补救安全问题,并被用于补救 OpenSSL 问题。这不仅节省了时间,而且可以快速修复一个非常棘手的安全问题。
• 每一周,都会通过 Ansible 更新 www.nasa.gov 的完整版和移动版,通常只需 5 分钟左右。
• 如果缺少任务关键人员的 OS 级用户帐户,则将对其进行连续检查和创建。现在,每个需要访问权限的人都可以访问,即使这意味着几乎立即从所有服务器中添加或删除用户。
• NASA 还将 Ansible facts 集成到其 CMDB、CloudAware 中,以提高整个 AWS 库存的管理可见性。结果,可以以一种非常细粒度的方式组织 AWS 资源的库存,这在以前是不可能的 。
• Ansible 还用于确保环境符合 FedRAMP 概述的必要联邦安全标准和其他监管要求。
结果:
实施 Ansible 后,NASA 可以更好地管理其 AWS 环境。Ansible 使 NASA 能够为其客户提供更好的操作和安全保障。作为一个团队,它也提高了效率。
如果我们从数字上看:
• 更新 nasa.gov 的时间从 1 小时以上缩短到 5 分钟以下
• 安全修补程序更新从多天的过程变为 45 分钟
• 实现近乎实时的 RAM 和磁盘监视(无需代理即可完成)
• 不到 10 分钟即可在整个环境中配置 OS 帐户
• 为标准 AMI(Amazon Machine Image)设定基准的过程从 1 个小时的手动配置变成了无形且无缝的后台流程
• 每个应用程序堆栈的建立时间从 1-2 小时减少到 10 分钟以下。
**总结:**Ansible 是一个开源软件供应、配置管理和应用程序部署工具,可将基础设施作为代码。它可以在许多类 Unix 系统上运行,并且可以配置类 Unix 系统和 Microsoft Windows。