当前位置: 首页>前端>正文

关于Ansible选型思考

这是一篇纯安利文章, 不会涉及任何的教程。关于教程, 官方已经有非常系统的文档了. 不过这里我推荐有条件的话可以看一下Ansible: Up and Running, 2nd Edition这本书作为起步教程, 对于日常的使用,你可以只看第1-9章基础知识和最佳实践相关内容,如果希望开发相关插件或者希望跟虚拟化技术结合起来, 再看剩下的相关章节即可。

What:

首先简单一下Ansible是什么, 可以用来做什么:

  1. 配置管理工具, 他们的特点但是基于状态的操作,是幂等操作。举个例子,很多时候我们会需要保证某个配置始终是最新版本,当然我可以暴力覆盖的方式每次都重新拉取,但这样带了一个问题就是如果文件很大或者很多这种操作非常低效。如果用Ansible来做的话它会检查当前文件是否与目标文件相同, 如果相同, 那么直接跳过该文件。如果不是, 那么就拉取最新的版本。
  2. 部署工具,举个例子:我希望为我新申请的100台Linux目前安装了MySQL, 我肯定不想一台台的去操作。 其实这个操作用Ansible实现非常简单, 你只需要把希望操作的机器信息全部写到inventory文件里面(就是被管理的机器的hostname或者IP),然后再定义一下具体的task(task定义非常简单,如果是Redhat可以直接用yum模块来操作)
  3. 编排工具,比如你希望你的测试在数据库,web服务器起来之后再运行的, 这时你就可以预定义一个task去探测服务器和数据库的状态, 等一切ok以后再开始做测试工作。
  4. 使用Yaml格式定义具体的工作,支持基于Jinja2的template引擎。

Why:

市面上类似的Chef, Puppet等工具很多, 而Ansible的优势主要体现在如下方面:

  • 简洁易读的语法, 使用yaml定义任务形成playbook; 一个playbook定义了需要配置的主机以及一系列顺序的任务.

  • 被控主机几乎无需安装, 基于ssh和python2.5+版本, 大部分Linux系统已经默认安装.

  • 基于推送的配置管理, 无需agent进程, 方便控制变更生效时机.

  • 生态丰富, 我特地去官方的modules目录下面差了一下模块数量, 截止写作时已有3387个, 而且这个数字还在持续增长, 可见社区的活跃度非常高; 同时拓展模块也很容易.

  • 使用Jinja2作为模板引擎, 提供灵活的模板化配置功能.

  • 支持基于条件和状态的幂等操作, 不会执行无效操作.

  • 天然支持规模化管理, 包括新增主机, 批量操作等;

  • 更轻量级的抽象层, 方便用户快速上手;

How:

最后大致说明一下Ansible是如何完成这些工作的. 假定我们需要在主机A、 B、 C上执行任务1、2、3,那么大致的流程如下:

  1. 控制主机基于playbook中各模块生成对应的python脚本;
  2. 将脚本拷贝到主机A, B, C上;
  3. 主机A,B,C执行脚本依次完成任务1,2,3;
  4. 待所有主机完成所有任务(任务失败则也视为完成)后退出

https://www.xamrdz.com/web/2sh1905857.html

相关文章: