1.ansible是什么?
ansible可以理解为一个远程集中式控制软件,可以同时并发控制多台机器,执行各种操作
2.ansible可以用来干什么?
正如所言,ansible可以同时控制很多机器,非常适合用来做机器数量大的云计算运维和部署,可以在一台机器上,集中运维管理多台机器
3.ansible的缺陷是什么?
很多操作和逻辑都是面向基础,大众的,因此可能存在很多实际使用的限制,以及缺少定制化需求的实现,举个例子
ansible无法随心所欲的打印你想打印的东西,以及颜色,这个非常头疼,而且ansible的报错有时候根本看不懂
4.如何更好的使用ansible?
因为ansible的强大的分发能力,和薄弱的定制化和错误排查展示能力,其实最好的使用ansible的方式,就是只使用他的分发能力,使用自己独立的脚本,来做自己实际需要的事情
举个例子,需要在100台机器上,做一个lscpu的操作,ansible本身当然可以实现,直接使用shell模块,执行lscpu,
但此处我认为,更好的方案是,将lscpu单独写入xshell/python脚本,通过ansible将脚本分发到100台机器上,再执行脚本
看起来,步骤反而更多了,更麻烦了,而实际上,从长久的可维护和可扩展性来看,这样更好,为什么,因为脚本里,你可以自由的判断lscpu的结果,也可以在ansible执行出错,无法看懂错误原因的时候,直接去目标机器执行该脚本,直接进行定位调试,这一点非常重要,当你的部署系统越来越大的时候,就会发现他的好处,就类似于面向对象的思想。
5.ansible的框架
一个成熟的软件,尤其是应用领域较强的,肯定有自己的框架,ansible的框架,简单理解为:
a.将host分组,不同的组放到不同的roles文件夹,以组别来执行操作
b.将变量分组,不同作用域的变量放到不同的文件夹下,如group_var/host_var,你能很明显看懂他的意思
c.将task分组,加上--tags标签,例如,你执行一句--tags update,肯定希望升级包含备份,升级等操作,那么tags就很好用
6.ansible代码怎么写
对于一种工具来说,它的代码无非是默认的规则,并没有很强的逻辑和可扩展性,所以我认为,
只要能理解ansible代码是基于以下特性:
6.1 模块化的特性:
根据需求,可以直接问chatgpt,比如你说,我要复制一个文件到目标主机,以下是chatgpt给你的答复:
使用Ansible可以很方便地复制文件到目标主机。可以使用copy
模块来完成这个任务。下面是一个简单的Ansible playbook示例,演示了如何复制一个文件到目标主机:
- name: 复制文件到目标主机
hosts: 目标主机 # 替换为您要操作的目标主机或主机组
tasks:
- name: 复制文件
copy:
src: /path/to/source/file # 替换为源文件的路径
dest: /path/to/destination/file # 替换为目标文件的路
6.2 执行幂等性:
不用害怕重复执行,因为ansible会自己判断步骤是否执行,不会重复执行,当前这也要求我们如果单独写的脚本,也需要满足幂等性,因为重复执行的概率太大了,需要消除这个风险