Ansible 是一款开源自动化工具,用于配置服务器、安装软件,以及从一个中心位置执行各种 IT 任务。它是一种一对多的无代理机制,所有指令都从控制机器运行,并通过 SSH 与远程客户端通信,尽管也支持其他协议。
虽然 Ansible 的目标用户是具有特权访问权限的系统管理员,他们经常执行诸如安装和配置应用程序之类的任务,但非特权用户也可以使用 Ansible。例如,使用 mysql
登录 ID 的数据库管理员可以使用 Ansible 来创建数据库、添加用户和定义访问级别控制。
让我们来看一个非常简单的例子,系统管理员每天配置 100 台服务器,并且必须在将每台服务器交给用户之前在其上运行一系列 Bash 命令。

opensource.com
这是一个简单的例子,但应该说明命令在 yaml 文件中指定并远程服务器上执行是多么容易。在异构环境中,可以添加条件语句,以便某些命令仅在某些服务器上执行(例如,“仅在不是 Ubuntu 或 Debian 的系统上执行 `yum` 命令”)。
Ansible 的一个重要特性是 playbook 描述了计算机系统中的*期望*状态,因此 playbook 可以针对服务器多次运行而不会影响其状态。如果某个任务已经实现(例如,“用户 `sysman` 已经存在”),则 Ansible 只会忽略它并继续。
定义
- 任务:
- Play:
- Playbook:
- 角色:
- Ansible Galaxy:
这些定义及其关系在此处描述

opensource.com
请注意,这只是组织需要执行的任务的一种方式。我们可以将数据库和 Web 服务器的安装拆分为单独的 playbook 和不同的角色。Ansible Galaxy 中的大多数角色都安装和配置单个应用程序。您可以查看安装 mysql 和安装 httpd 的示例。
编写 playbook 的技巧
学习 Ansible 的最佳来源是官方文档站点。而且,像往常一样,在线搜索是您的朋友。我建议从简单的任务开始,例如安装应用程序或创建用户。准备就绪后,请遵循以下准则
- 测试时,请使用少量服务器子集,以便您的 Play 执行得更快。如果它们在一台服务器上成功,那么它们将在其他服务器上成功。
- 始终进行试运行以确保所有命令都有效(使用
--check-mode
标志运行)。 - 根据需要经常测试,而不必担心破坏任何东西。任务描述了期望的状态,因此如果期望的状态已经实现,它将被简单地忽略。
- 确保在
/etc/ansible/hosts
中定义的所有主机名都是可解析的。 - 由于与远程主机的通信是使用 SSH 完成的,因此密钥必须被控制机器接受,因此可以 1) 在启动前与远程主机交换密钥;或者 2) 准备输入“Yes”以接受您要管理的每个远程主机的 SSH 密钥交换请求。
- 虽然您可以在一个 playbook 中组合用于不同 Linux 发行版的任务,但为每个发行版编写单独的 playbook 会更简洁。
最终分析
Ansible 是在数据中心实现自动化的绝佳选择
- 它是无代理的,因此比其他自动化工具更易于安装。
- 指令使用 YAML 编写(尽管也支持 JSON),因此比编写 shell 脚本更容易。
- 它是开源软件,所以请为其做出贡献,使其变得更好!
您是如何使用 Ansible 自动化您的数据中心的?在评论中分享您的经验。
4 条评论