在编排程序执行,软件安装等过程中,ansible playbook 与 shell脚本,各自的特点有哪些?

有时候遇到linux系统批量安装程序,部分程序是公司内部开发人员编写,会倾向写shell,再通过批量工具执行脚本
在什么情况下会选择使用ansible工具?
目前使用的是2.9.9版本,实际使用过程发现,ansible解决了大文件批量远程复制效率低的问题,以前老版本在上传1G的大文件非常慢?
ansible是一款非常好用的自动化运维工具,目前也在尝试使用ansible工具,希望能在选择使用过程中得到一些帮助

2回答

邓毓邓毓  系统工程师 , 江西农信
Kevenzhangswimming03Charlesyan等赞同了此回答
最大的三个不同:1、 Ansible 内置了大量的模块,这些模块是声明式的(Declarative),只需使用这些模块描述被管节点期望达到的状态。而 Shell脚本是命令式,声明式相比命令式更智能,例如分别使用Shell脚本和Ansible Playbook启动某个服务,然后再完成其他事情。如果在启动时发现这个...显示全部

最大的三个不同:
1、 Ansible 内置了大量的模块,这些模块是声明式的(Declarative),只需使用这些模块描述被管节点期望达到的状态。而 Shell脚本是命令式,声明式相比命令式更智能,例如分别使用Shell脚本和Ansible Playbook启动某个服务,然后再完成其他事情。如果在启动时发现这个服务已经启动,监控端口已经被占用,Shell脚本将异常退出,返回非0,导致后面的脚本中断执行,但使用Playbook将不会遇到这样的问题。
2、 Ansible 内置模块都是等幕性的(Idempotent)。等幕性对于自动化维护是非常重要的特性,这样在被管节点上多次执行Ansible Playbook 也能达到同样效果。相对于直接执行操作系统Shell脚本的方式是巨大的改进,操作系统脚本再执行一次可能就会产生不同的、非预期的结果。 而 Ansible 具有幂等性的特点,无论执行多少次,只要你的操作系统是同一个版本,那么安装出来的环境绝对是一样的,这样也就保证了应用所处的底层环境的一致性,而不会造成同一个版本的应用在不同的机器上运行出现不同的效果的问题。
3、Ansible Role功能,可以使用ansible role来简化playbook的编写且易于复用,这点是Shell脚本非常难以做到的。例如我们想要 在主机 A 、 B 、 C 上部署 JDK1.7 的环境,主机 D 、 E 、 F 上部署 JDK1.8 的环境,而又想在 A 、 B 上安装 Nginx ; C 、 D 上部署 Tomcat ; E 、 F 上部署 MySQL ,这时候使用 Ansible工具是最佳的。对于这种情况只需要新建 5 个 roles ,分别是: JDK1.7 、 JDK1.8 、 Nginx 、 Tomcat 、 MySQL 。对于 A 、 B 主机,安装 JDK1.7 和 Nginx 的 roles , C 主机安装 JDK1.7 和 Tomcat 的 roles ; D 主机安装 JDK1.8 和 Tomcat 的角色, E 、 F 主机安装 JDK1.8 和 MySQL 的角色。换句话讲, Ansible 就是对于各种环境的搭积木式组合,你需要什么环境,我就给你装上什么环境,对于系统管理员来讲,不必再去每一台机器上根据需求名单一个一个安装,不仅效率低、劳动成本高、而且容易出错,造成环境的不一致。

收起
 2020-06-16
浏览1426
swimming03swimming03  系统工程师 , 芯火科技
playbook,就像你坐镇指挥台指挥大家打仗,发布号令即可,最后执行的结果坐等就有报告。shell,就像你跑到步兵阵营,一个一个告诉他们一会儿怎么操作,然后再跑到骑兵阵营一个一个告诉他们怎么操作。。。。执行结果你还需要一个一个记录,自己汇总。...显示全部

playbook,就像你坐镇指挥台指挥大家打仗,发布号令即可,最后执行的结果坐等就有报告。
shell,就像你跑到步兵阵营,一个一个告诉他们一会儿怎么操作,然后再跑到骑兵阵营一个一个告诉他们怎么操作。。。。执行结果你还需要一个一个记录,自己汇总。

收起
 4天前
浏览271

提问者

jiaoyutwt系统运维工程师, 大运汽车

问题状态

  • 发布时间:2020-06-16
  • 关注会员:3 人
  • 问题浏览:2869
  • 最近回答:4天前