| Ansible是一个批量管理远程主机的自动化工具, |
| 用它可以实现如下功能,极大地提升了运维人员批量管理远程主机的效率 |
| 1、配置管理 |
| 2、应用程序部署 |
| 3、执行一次性批量任务 |
| 4、将任务编排起来形成一个playbook,可以多次使用,称之为多节点编排 |
与其他自动化运维工具对比
| 1.puppet 配置复杂,适用于大规模系统管理环境 |
| 2.ansible 轻量级、易用,ansible默认基于ssh协议,大规模环境基于ssh效率不足,需要搭配例如Ansible Tower一类的解决方案 |
| 3.saltstack 一般选择salt会使用C/S结构的模式,salt-master和salt-minion,并行的,大规模批量操作的情况下,会比Ansible速度快一些,底层使用的是zero-MQ消息队列 |
运维工程师角色
| 以前管理大规模远程主机:需要运维人员自己一台一台连接上机器进行操作,痛点举例 |
| 1、一台台连接非常的低效烦人,密码管理等十分繁琐 |
| 2、重复操作过多,无法统一管理,哪怕写成脚本,也要一台一台机器去执行 |
| 3、重复操作多了,不仅麻烦,还会导致出错率高 |
| 等等还有很多问题,总之就是缺少一套可靠的统一管理机制,能够让运维人员非常方便的批量管理多台远程主机 |
| |
| 这就是ansible这类自动化运维工具存在的意义,具体特性看下一小节 |
| 1、Agentless:不需要再被管理节点上安装客户端,只要有sshd即可 |
| 2、幂等性:许多自带模块提供幂等判断机制,这意味着多次执行相同的任务是安全的 |
| 比如通过 cron 模块添加定时任务时,如果任务已经存在,那么不会重复添加 |
| 3、Serverless:在服务端不需要启动任何服务,只需要执行命令就行 |
| 3、Modules in any language:基于模块工作,可以使用任意语言开发ansible模块 |
| 4、YAML, not code:使用yaml语言定制playbook进行任务编排,管理复杂任务非常方便 |
| 5、SSH by default:默认使用ssh控制各节点 |
| 6、Strong multi-tier solution:可实现多级控制 |
| 7、Ansible 的开发语言是 Python、便于运维进行二次开发。 |
举3个例子,快速了解幂等性
| 1、算术运算时数值加0是幂等的,无论加多少次结果都不会改变,而数值加1是非幂等的,每次加1结果都会改变。 |
| 2、再比如执行systemctl stop xxx命令来停止服务,当发现要停止的目标服务已经处于停止状态,它什么也不会做, |
| 所以多次停止的结果仍然是停止,不会改变结果,它是幂等的, |
| 3、而systemctl restart xxx是非幂等的。Ansible的很多 模块在执行时都会先判断目标节点是否要执行任务, |
| 所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用 |
幂等性专业解释
| 幂等性是一个在计算机科学中广泛使用的概念,它的核心思想是:一个幂等操作的连续多次执行,结果和执行一次的结果相同。 |
| 换句话说,无论你执行一次还是多次,结果都不会变。 |
| |
| 在IT领域中,这个概念特别重要,尤其在分布式系统和网络通信中,因为网络请求可能会出现超时、失效、或者重复请求的情况, |
| 这个时候幂等性判断机制就能确保数据的一致性和操作的有效性。 |
| |
| 在Ansible中,幂等性判断机制是其一个核心特性。它可以保证你的任务不论执行多少次,最后的结果都只会被应用一次。 |
| 比如,你使用Ansible去用户管理模块创建一个用户,无论你执行多少次该任务,Ansible都只会确保该用户存在,而不会重复创建。 |
| 因此,理解幂等性及其在实践中的应用,对于系统管理员来说是相当重要的。而Ansible的这个特性,也是它在自动化部署和配置管理中非常受欢迎的一个原因。 |
| 1.连接插件connection plugins:用于连接主机/被管理端 |
| 2.核心模块core modules :总控, 它负责调用具体的模块来做具体的事情 |
| 3.自定义模块custom modules :根据自己的需求编写具体的模块 |
| 4.插件plugins :完成模块功能的补充,例如Email、loggin |
| 5.任务副本/剧本Play Books :剧本playbookansible的配置文件,将多个任务定义在剧本中,由ansible自动执行 |
| 6.主机清单Host inventor :定义ansible需要操作的主机信息 |
| |
| 强调: |
| 1、ansible是模块化的 它所有的操作都依赖于模块 |
| 2、模块与插件的区别: |
| (1)模块会被上传到被控制主机上,在被控制主机上执行 |
| (2)插件在控制主机上,被 Ansible 调度执行 |
| 3、尽量使用 Ansible 自带的模块,而不是 shell 脚本,因为 Ansible 的很多模块提供幂等判断机制 |
Ansible 执行任务的流程,大致如下: