Ansible

    IT 领域,你可能经常一遍遍重复着同样的操作任务。如果可以通过自动化一次性解决问题,你的双手将得到解放。这便是 设计的初衷。

    Ansible 是一个非常简单轻量级的 IT 自动化引擎,可应用与很多 IT 领域:

    • 云设施管控;
    • 配置管理;
    • 应用部署;
    • etc

    Ansible 通过描述 系统间关系 来为 IT 基础设施建模,从设计之初便瞄准多层部署场景,因此不局限于单个系统这种简单场景。

    Ansible 非常容易部署,不需要客户端软件,也不需要额外的安全基础设施。更重要的是, Ansible 使用 YAML 这样简单的语言来描述自动化任务,非常接近英语大白话。

    Ansible 先连上目标节点,并推送一些称为 Ansible 模块( Ansible modules )的小程序。这些程序被设计成描述 系统目标状态 的资源模型,可以多次执行( 幂等性 )。此后, Ansible 执行这些模块(默认通过 SSH ),并在执行完毕后删除。

    你的模块库可以部署在任意机器上,而且不需要任何服务、守护进程或者数据库来支撑。通常,你只需使用自己喜欢的 终端程序文本编辑器 以及一个可选的 版本控制工具 (用于管理内容变更),便可管理一切。

    SSH密钥

    Ansible 通过 SSH 管理目标节点,因此必须通过 SSH 认证。虽然密码认证也是支持的,但是 Ansible 更推荐使用 SSH 密钥。尽管如此,如果你想使用 Kerberos ,也是可以的。root 用户登录也不是必要的,你可以用任何用户登录,并通过 su 或者 sudo 命令切换到任何其他用户。

    Ansible 默认通过一个非常简单的 INI 配置文件维护其管理的机器—— 清单 ( inventory )。通过该配置文件,你可以根据需要为机器进行分组。

    添加机器无需额外的 SSL 签名,因此不会因 NTP 或者 DNS 问题导致机器不能导入。要知道,排查这些问题还是相当繁琐的。

    可以看到,设备清单配置文件是非常直白的文本:

    清单还支持为主机或者集群定义 变量 ,以此实现差异化操作。变量可以直接在清单配置文件中定义,也可以由额外的文本文件来定义(放置于 或者 子目录)。

    如果你的基础设施体系由其他系统提供可靠的数据源, Ansible 也可以与其对接。例如,开发 动态清单 ( dynamic inventory ),从类型 EC2RackspaceOpenstack 等数据源中,获取 机器列表群组 以及 变量 等信息。

    快速执行

    只要有一个目标节点就绪,即可通过命令行执行任务,无需任何额外配置:

    注意到,你可以执行确保系统最终状态的模块,或者直接执行原生命令行。这些模块写起来非常简便,而且 Ansible 已经有大量的积累,大部分问题解决方案唾手可得。

    定义好设备清单之后,你可以非常方便地进行批量执行。例如,对 集群批量执行:

    执行簿( playbooks )可以非常优雅地编排你的基础设施拓扑,可以通过非常详细的配置控制每次处理的机器数。执行簿让 Ansible 开始变得非常有趣了。

    Ansible 有意将编排设计得尽量简单,因为自动化代码需要多年维护,语法特性必须简洁好记。

    下面是一个执行簿样例。

    本文只是介绍性概述,对此不再继续展开。完整文档可以跳转到 docs.ansible.com 查看,那里可以看到执行簿各种可能的用法。

    扩展

    Ansible 是一个非常灵活的引擎,你可以通过 模块插件 ,以及 API 等方式为其提供 功能扩展 ,或者 对接外部系统

    Ansible 模块可以使用任何可以返回 JSON 格式结果的语言开发,包括: RubyPythonShell 等等。设备清单可以对接任何数据源,只需要写一个程序从中捞数据并以约定的 JSON 格式返回即可。Ansible 还提供了大量的 Python API 用于扩展 连接类型 ( SSH 不是唯一的 ),回调函数 ( callbacks ,例如控制日志输出格式),甚至添加新的服务端行为。

    订阅更新,获取更多学习资料,请关注我们的 :

    ../../../../_images/wechat-mp-qrcode.png小菜学编程