Ansible 入门成功技巧

使用 Ansible 自动化数据中心的关键信息。
619 位读者喜欢这篇文章。
Server room

Cory Doctorow 拍摄,Opensource.com 修改,CC BY-SA 2.0 许可。

Ansible 是一款开源自动化工具,用于配置服务器、安装软件,以及从一个中心位置执行各种 IT 任务。它是一种一对多的无代理机制,所有指令都从控制机器运行,并通过 SSH 与远程客户端通信,尽管也支持其他协议。

虽然 Ansible 的目标用户是具有特权访问权限的系统管理员,他们经常执行诸如安装和配置应用程序之类的任务,但非特权用户也可以使用 Ansible。例如,使用 mysql 登录 ID 的数据库管理员可以使用 Ansible 来创建数据库、添加用户和定义访问级别控制。

让我们来看一个非常简单的例子,系统管理员每天配置 100 台服务器,并且必须在将每台服务器交给用户之前在其上运行一系列 Bash 命令。

Mapping Bash commands to an Ansible playbook

opensource.com

这是一个简单的例子,但应该说明命令在 yaml 文件中指定并远程服务器上执行是多么容易。在异构环境中,可以添加条件语句,以便某些命令仅在某些服务器上执行(例如,“仅在不是 Ubuntu 或 Debian 的系统上执行 `yum` 命令”)。

Ansible 的一个重要特性是 playbook 描述了计算机系统中的*期望*状态,因此 playbook 可以针对服务器多次运行而不会影响其状态。如果某个任务已经实现(例如,“用户 `sysman` 已经存在”),则 Ansible 只会忽略它并继续。

定义

  • 任务: 任务是最小的工作单元。它可以是一个动作,例如“安装数据库”、“安装 Web 服务器”、“创建防火墙规则”或“将此配置文件复制到该服务器”。
  • Play: Play 由任务组成。例如,Play:“准备一个供 Web 服务器使用的数据库”由以下任务组成:1) 安装数据库软件包;2) 设置数据库管理员的密码;3) 创建数据库;以及 4) 设置对数据库的访问权限。
  • Playbook: Playbook 由 Play 组成。一个 Playbook 可以是:“使用数据库后端准备我的网站”,而 Play 将是:1) 设置数据库服务器;以及 2) 设置 Web 服务器。
  • 角色: 角色用于保存和组织 playbook,并允许共享和重用 playbook。按照之前的示例,如果您需要完全配置 Web 服务器,您可以使用其他人编写和共享的角色来完成此操作。由于角色是高度可配置的(如果编写正确),因此可以轻松地重用它们以适应任何给定的部署需求。
  • Ansible Galaxy: Ansible Galaxy 是一个在线存储库,角色被上传到其中以便可以与他人共享。它与 GitHub 集成,因此角色可以组织到 Git 存储库中,然后通过 Ansible Galaxy 共享。

这些定义及其关系在此处描述

Ansible definitions and how they relate to each other

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 自动化您的数据中心的?在评论中分享您的经验。

User profile image.
Jose 是一位 Linux 工程师。他大部分时间都在学习新事物、防止东西损坏并让客户满意。

4 条评论

请注意,ansible 2.2 版本在 Debian 9 中以 Debian 原生软件包形式提供,因此只需 apt install 即可安装。混合使用 Debian 和 Ubuntu PPA 可能会很有趣,并可能导致 FrankenDebian,因此并不总是建议这样做。

我强烈反对角色比 playbook 更大的说法。角色是 playbook 的一部分,旨在可重用,您可以使这部分通过 Ansible Galaxy 获得。将整个 playbook 放入角色并共享并不是一个好主意,因为 playbook 有很多非常具体的东西,这些东西只对少数人有意义。通过 Ansible Galaxy 共享的角色是 playbook 中编写良好的一部分,可能对其他人有用。

在当今时代,Ansible 也是必不可少的。它非常强大,尤其是在您开始包含模板时,我建议使用 Jinja2,它可以使配置变得更加容易!

我也喜欢使用 Ansible 来维护我的 VPS :)

写得好,Jose!

对于初学者来说,这是一个非常好的介绍。谢谢你,Jose!

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© 2025 open-source.net.cn. All rights reserved.