Ansible 是全球发展最快的基础设施即代码 (IaC) 和自动化工具之一。我们中的许多人将 Ansible 用于第 1 天和第 2 天的操作。理解阶段/阶段/操作的最佳类比之一是在 RedHat 的网站上定义的:
“想象一下,你要搬进一所房子。如果说第 1 天的操作正在进入内部(安装),那么第 2 天的操作就是软件生命周期的“内务”阶段。
简而言之,在软件生命周期中:
第 0 天:设计/规划阶段 - 此阶段包括准备、初步规划、头脑风暴和项目准备。此阶段的典型活动包括定义范围、收集需求、组建开发团队和设置开发环境。例如,该团队讨论了要集成项目的 CI/CD 平台、项目管理策略等。
第 1 天:开发/部署阶段 - 此阶段根据规划阶段收集的需求标记实际的开发活动,例如编码、构建功能和实施。此外,测试将开始确保及早发现问题(在开发术语中,“错误”)。
第 2 天:维护阶段 - 在这个阶段,您的项目/软件上线,您可以随时了解项目的运行状况。您可能需要修补或更新软件,并根据用户反馈提交功能请求/问题,以便开发团队进行处理。在这个阶段,监视和日志记录(可观测性)发挥着至关重要的作用。
Ansible 是一个用 Python 编写的开源工具,它使用 YAML 来定义所需的配置状态。Ansible 用于配置管理、应用程序部署和编排。它简化了跨多个服务器管理和部署软件的过程,使其成为系统管理员、开发人员和 IT 运营团队的必备工具之一。
借助 AI,生成 Ansible 代码变得更加简单和高效。查看以下文章,了解 Ansible 如何将 AI 工具引入您的集成开发环境:“自动化、Ansible、AI”。
RedHat Ansible Lightspeed 与 IBM Watsonx 代码助手
Ansible 的核心采用简单的无代理架构,依靠 SSH 连接到远程服务器并执行任务。这消除了在目标计算机上安装任何其他软件或代理的需要,从而实现了轻量级和高效的自动化解决方案。
Ansible 的主要功能
以下是 Ansible 提供的主要功能列表:
基础结构即代码 (IaC)
Ansible 允许您在代码中定义基础架构和配置要求,从而轻松对环境进行版本控制、共享和复制。例如,假设您计划将本地应用程序迁移到云平台。您可以在配置文件中定义应用程序所需的云服务和依赖项,例如计算、存储、网络、安全性等,而不是手动预配云服务和安装依赖项。这种期望的状态由 Ansible 作为基础架构即代码工具来处理。这样,设置开发、测试、暂存和生产环境将轻松避免重复。
格式
Ansible playbook 以 YAML 格式编写,并定义了要在远程主机上执行的一系列任务。Playbook 提供了一种清晰、人类可读的方式来描述复杂的自动化工作流。使用 playbook,您可以为应用程序定义所需的依赖项和所需状态。
模块
Ansible 提供了大量模块,用于管理系统、网络、云服务和应用程序的各个方面。模块是幂等的,这意味着无论当前状态如何,它们都能确保实现系统的预期状态。例如,是一个模块,可帮助您在远程计算机上执行命令。您可以使用内置的模块(如 、 等)作为 Ansible Core 的一部分,也可以在 Ansible 中开发自己的模块。要进一步了解 Ansible 模块,请查看 RedHat 上的此主题。ansible.bultin.command
dnf
yum
清单文件
Ansible 使用清单文件来定义它管理的主机。此清单可以是静态的,也可以是动态的,允许跨不同环境进行灵活的配置管理。清单文件(.ini 或 .yaml)是用于安装、配置或设置软件、添加用户或更改文件夹权限等的主机或节点的列表。有关最佳实践,请参阅如何构建清单。
角色
Ansible 中的角色提供了一种组织和重用任务、变量和处理程序的方法。它们促进了代码的可重用性,并帮助维护干净和模块化的 playbook。您可以将重复的任务分组为角色,以便重复使用或与他人共享。一个很好的例子是 ping 远程服务器,您可以将任务、变量等移动到角色下进行重用。下面是具有八个主要标准目录的角色目录结构示例。在本文的下一节中,您将了解用于生成此定义结构的工具。
壳
1
roles/
2
common/ # this hierarchy represents a "role"
3
tasks/ #
4
main.yml # <-- tasks file can include smaller files if warranted
5
handlers/ #
6
main.yml # <-- handlers file
7
templates/ # <-- files for use with the template resource
8
ntp.conf.j2 # <------- templates end in .j2
9
files/ #
10
bar.txt # <-- files for use with the copy resource
11
foo.sh # <-- script files for use with the script resource
12
vars/ #
13
main.yml # <-- variables associated with this role
14
defaults/ #
15
main.yml # <-- default lower priority variables for this role
16
meta/ #
17
main.yml # <-- role dependencies
18
library/ # roles can also include custom modules
19
module_utils/ # roles can also include custom module_utils
20
lookup_plugins/ # or other types of plugins, like lookup in this case
21
22
webtier/ # same kind of structure as "common" was above, done for the webtier role
23
monitoring/ # ""
24
fooapp/
超越自动化
Ansible 在多个领域都有应用。
配置管理:Ansible 简化了跨各种 IT 基础架构对配置文件、软件包、服务和用户的管理。
应用程序部署:Ansible 通过自动执行软件安装、配置和版本控制等任务来简化应用程序的部署。
持续集成/持续部署 (CI/CD):Ansible 与 CI/CD 管道无缝集成,支持应用程序的自动化测试、部署和回滚。
编排:Ansible 编排涉及多个服务器、网络和云服务的复杂工作流,确保任务的无缝协调和执行。
安全自动化:Ansible 有助于跨 IT 环境实施安全策略、执行安全审计和自动执行合规性检查。
云配置:Ansible 的云模块有助于在 IBM Cloud、AWS、Azure、Google Cloud 和 OpenStack 等平台上配置和管理云资源。
该列表并不详尽,因此上面仅包含应用程序的子集。Ansible 可以充当安全合规性管理器,通过补丁管理、配置强化和漏洞修复,跨基础架构和应用程序实施安全策略和合规性标准。此外,Ansible 还可以帮助设置监控和日志记录、自动化灾难恢复过程(备份和还原过程、故障转移等),以及与各种工具和服务(如版本控制系统、问题跟踪器、工单系统和配置数据库)集成,以创建端到端自动化工作流。
工具和项目生态系统
Ansible 提供了广泛的工具和程序,如 Ansible-lint、用于测试 Ansible 角色的 Molecule、yamllint 等。以下是 Ansible 文档中未提及的其他工具:
Ansible 生成器:创建必要的文件夹/目录结构;在创建 Ansible 角色时派上用场
AWX:提供基于 Web 的用户界面、REST API 和基于 Ansible 构建的任务引擎;如果您计划在 RedHat OpenShift 等容器编排平台上进行设置,则附带 awx-operator
Red Hat 的 Ansible VS Code 扩展:语法高亮显示、验证、自动完成、自动关闭 Jinja 表达式 () 等。
"{{ my_variable }}"
Ansible 生态系统非常广泛。本文仅让您一瞥庞大的工具和框架集。您可以在 Ansible 文档上找到 Ansible 生态系统中的项目。
Ansible 面临的挑战
每个工具或产品都有其自身的挑战。
学习曲线:Ansible 面临的主要挑战之一是学习曲线。掌握功能和最佳实践可能非常耗时,尤其是对于刚接触基础架构自动化或配置的用户而言。
复杂性:最初,理解术语、文件夹结构和层次结构对用户提出了挑战。清单、模块、插件、任务、剧本等术语在开始时很难理解。随着节点/主机数量的增加,管理 playbook 和编排的复杂性也会增加。
故障排除和错误处理:对于初学者来说,对错误进行故障排除和调试 playbook 可能具有挑战性。特别是,理解错误消息并确定故障的根本原因需要熟悉 Ansible 的语法和模块等。
Ansible 作为一种开源工具不仅可以用于自动化,还可以用于配置、部署和安全支持。您还了解了 Ansible 的功能和挑战,并了解了 Ansible 和社区提供的工具。一旦您通过了最初的学习曲线,Ansible 将成为您的首选基础架构即代码工具。为了克服最初的复杂性,这里有一个 GitHub 存储库,其中包含 Ansible YAML 代码片段。祝您学习愉快。