Ansible 是一种用 Python 编写的无代理自动化工具。 它通过 SSH 连接到您的客户端,并允许您自动执行您不想做的无聊、重复的任务。 它允许您将一项可能需要一个小时才能完成的人工任务,并将其转换为可在几分钟内完成的单个命令。 这会提高你的表现,并让你开始下一个大项目的工作。
Ansible 是一种用 Python 编写的无代理自动化工具。 它通过 SSH 连接到您的客户端,并允许您自动执行您不想做的无聊、重复的任务。 它允许您将一项可能需要一个小时才能完成的人工任务,并将其转换为可在几分钟内完成的单个命令。 这会提高你的表现,并让你开始下一个大项目的工作。
Ansible 的好处
Ansible 提供了很多好处,让我们花点时间了解一些最重要的好处。 我将把它分成几个部分,一个是针对那些没有自动化或自动化程度最低的人,另一个是针对那些已经在使用 Salt 或 Puppet 等自动化工具的人。
自动化新手
如果您不熟悉自动化,使用简单的工具可以帮助您缩短学习曲线。 让我们看看您应该选择 Ansible 而不是其他可用工具的一些原因。
1.语法简单
由于 Ansible 定义任务的方式简单,因此上手非常简单。 以下面的片段为例:
-
– 主持人:全部
任务:
– 名称:安装 Nginx
百胜:
名称:nginx
状态:最新
一个完整的 Ansible 任务,相当于在所有主机上运行 yum install nginx。
您可能已经知道它在做什么。 它正在安装最新版本的 Nginx的 在您定义的所有主机上的开源 Web 服务器。 稍后我们将着眼于定义主机。 由于您创建的所有任务都在 YAML 中,因此它们既易于阅读又易于创建。 这在开始学习新工具时至关重要,因为它可以让您在建立信心和理解的同时快速获得经验。
2. Git 爱
由于您的自动化是简单的文本文件,因此可以将它们存储在 Git(或其他源存储库系统)中,在那里它们具有更改控制并且可以从中央源检出和更新。
3. 简单的执行顺序
由于任务按照您定义的顺序执行,因此您不必担心执行顺序。 只需像对人类一样定义步骤,Ansible 每次都会按照完全相同的顺序执行它们,而不必担心错过任何一个步骤。
4.无代理
拥有一种无代理的方式来管理您的主机很重要,如果您还没有以自动化方式部署代理的方式,则更是如此。 尝试在现有环境中启动自动化推送可能是一场噩梦,尤其是当有数十或数百台机器需要新代理时。
自动化爱好者
如果您已经完成了一些自动化,可能使用 Bash、Python 或 Powershell,您可能想知道 Ansible 带来了什么。 让我们来看看。
1. 简单编排
您是否尝试过使用 bash 脚本更新网站? 假设您有一个 Web 负载平衡器或反向代理、5 个 Web 服务器、一个数据库负载平衡器和 2 个数据库服务器。 您可能会花费数百行代码来检查每个组件是否已成功更新。
使用 Ansible,您可以定义健康检查、滚动升级,并设置您的负载均衡器以在升级的每个步骤中删除添加和删除节点。 您可以在官方的持续交付和滚动升级文档中看到这方面的示例。
2.幂等性
幂等性是数学和计算机科学中某些操作的属性,因此它们可以多次应用而不改变初始应用之外的结果。-维基百科基本上,目标是运行你的剧本一次以根据需要设置东西,然后继续运行它每 *X* 小时/天/周,以确保没有任何变化。 如果确实有任何变化,您应该在您的环境中寻找*配置漂移*的来源。
配置漂移是基础架构中的服务器随着时间的推移变得越来越不同的地方。- Shadow Soft
3、内置密文存储
Ansible 的内置机密存储(称为 Ansible Vault)允许您以安全的方式存储敏感数据,例如密码、API 密钥,甚至私钥,以及您的代码库的其余部分,在源代码控制中。 这在 Bash 或 Python 中是闻所未闻的,通常需要第三方工具,如支持 API 的密码库。
4.可扩展性
Ansible 可以针对 Windows 和 Linux 模块轻松扩展,也可以与第三方工具进行通信。 这意味着如果您想自动化某些事情,很可能已经有一个社区模块可供您使用,或者您可以创建或调整现有模块以满足您的需求。
您可以在官方文档中找到有关开发您自己的模块的信息,或者您可以查看 Ansible Galaxy 的社区模块。
开始使用 Ansible
安装
入门就像在工作站或服务器上安装 Ansible 一样简单。 我将展示 RedHat/CentOS 命令,但您可以在官方文档中查看其他安装步骤。
`sudo yum 安装 ansible`
就是这样! 您已经安装了一个功能齐全的 Ansible 控制节点并准备就绪。
库存
Ansible 需要知道要与哪些机器通信并针对哪些机器运行您的剧本。 因此,让我们看看设置基本清单。 在 Linux 上,默认清单文件位于“/etc/ansible/hosts”。 如果你看一下那个文件,你会发现它是类似 INI 的格式,可能看起来像这样:
邮箱.example.com
[网络服务器]
foo.example.com
bar.example.com
[数据库服务器]
one.example.com
两个.example.com
三.example.com
如文档中所述,括号中的标题是组名,可让您将系统分类为任意组。 我建议您花一些时间来设置清单文件,因为 Ansible 知道要针对哪些主机运行任务很重要。
创建剧本
剧本是要针对您的主机运行的任务的集合。 您可以创建一个 playbook,它非常简单,只需一个文件即可进行一次播放,也可以创建多个具有多个条件和从其他 playbook 导入的文件。 我们将从一个简单的剧本开始,在我们的网络服务器上为 nginx 安装、启动和添加防火墙规则。 在我们的主机文件中,我们可能有这样的东西:
[网络服务器]
web01.example.com
web02.example.com
在我们的“nginx-install.yaml”文件中,我们有以下内容:
-
– 主机:网络服务器
任务:
– 名称:安装 Nginx
百胜:
名称:nginx
状态:最新
– 名称:启动 Nginx
服务:
名称:nginx
状态:开始
– 名称:允许端口 80 通过 firewalld
防火墙:
端口:80/tcp # 或者,您可以使用“服务:http”语法
永久:是的
状态:启用
Ansible 主机连接到您的 Web 服务器并安装 NGINX 的概述。 要运行此剧本,只需运行“ansible-playbook nginx-install.yaml”,Ansible 将在您的网络服务器组中的任何主机上安装 Nginx。 这是一个简单的剧本,只有一个剧本,但它是一个很好的例子,说明 Ansible 可以在您的环境中轻松使用。
结语
如您所见,Ansible 是一个非常灵活且易于使用的自动化工具,可以在任何环境中工作。 凭借其简单的学习曲线和根据您的需求增长的能力,Ansible 是将基础架构部署到完整的 DevOps 管理环境的最佳自动化工具之一。
-贾斯汀·戈捷