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架构:
基本执行流程:
Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务
Ansible通过主机清单找到要执行的主机,然后调用具体的模块
Ansible会通过连接插件连接对应的主机并推送对应的任务列表
最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行
快速上手ansible是非常简单的,只需要了解常用的几个模块,就可以实现简单的批量操作远程主机。想要学透是比较困难的,涉及到的知识板块既零散又旁多,光是模块已经上千个了。所以多数情况只需要用到那个功能就查找相关的实现方式即可。比起各种繁杂的模块与用法,更多的应该关注任务整体的流程与逻辑,并根据自己的实际需求来写出一个可复用程度高的playbook。