S_lion's Studio

(一)ansible入门

字数统计: 745阅读时长: 2 min
2021/08/22 Share

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

—— 百度百科

简而言之,ansible融合了众多老牌运维工具的优点,通过一台ansible控制节点,就能实现批量配置、部署与运维多主机操作,进而减少重复性的工作,提高运维效率。目前已然成为了大厂标配技能,运维人员的敲门砖。

ansible与ssh工具相比,虽说都可以完成远程控制其他主机执行任务,但ansible可以实现批量整合不同主机上执行的不同任务,同时让用户可以去协调这些任务的执行策略。

ansible基于模块工作,它只提供了一种运行框架,就如各种命令于shell的意义一样。

ansible的优点很多,轻量化、基于python便于二次开发什么的,但最吸引人的是兼容性、无代理与幂等性。

  • 兼容性:

    ansible几乎不受到平台和系统的限制,只需要python环境即可,基本上各种的Linux操作系统已经内置了python。

  • 无代理

    Agentless,即无Agent的存在,它就像普通命令一样,并非C/S软件,只需在某个作为控制节点上安装一次Ansible即可,通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务。

  • 幂等性

    ansible绝大多数模块都具备幂等性。所谓幂等性,指的是多次操作或多次执行不影响结果。比如算术运算时数值加0是幂等的,无论加多少次结果都不会改变,而数值加1是非幂等的,每次加1结果都会改变。

ansible架构:

基本执行流程:

  1. Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务

  2. Ansible通过主机清单找到要执行的主机,然后调用具体的模块

  3. Ansible会通过连接插件连接对应的主机并推送对应的任务列表

  4. 最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行

快速上手ansible是非常简单的,只需要了解常用的几个模块,就可以实现简单的批量操作远程主机。想要学透是比较困难的,涉及到的知识板块既零散又旁多,光是模块已经上千个了。所以多数情况只需要用到那个功能就查找相关的实现方式即可。比起各种繁杂的模块与用法,更多的应该关注任务整体的流程与逻辑,并根据自己的实际需求来写出一个可复用程度高的playbook。

CATALOG