一 引言
从最初的从刘天斯先生的的<<Python自动化运维>>接触ansible,其后有幸接触了李松涛先生的<<Ansible权威指南>>,再之后的学习通用官网进行后续学习,总觉得在成长的过程中应该记录写什么,加之后续的红帽的RHCE考试全部以ansible作为着重点,已经成为业界的主流,因此决定写这一系列的文章,文章全部以自己的视觉来理解,部分内容可能撷取网友的结晶!
二 自动化运维工具
问题0:什么是运维自动化?
运维自动化就是将日常重复性的工作通过规则设定使其遵循预先既定规则(怎么理解),在指定的范围内(怎么理解)自动化运行,整个过程无需人工参与,Ansible只是帮助运维人员实现自动化的工具之一!
问题1:什么是ansible?
Ansible是近年越来越火的一款运维自动化工具,其主要功能是帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提升运维工作效率。
常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。
其他常见的部署管理工具有Chef、Puppet(ruby语言)、SaltStack(Python)、Fabric
Ansible发布于2012年,其作者兼创始人是Michael DeHaan,被红帽于2015收购
问题2:为什么选择Ansible?
(1)Ansible完全基于Python开发,而DevOps在国内已然是一种趋势,Python被逐步普及,运维人员自己开发工具的门槛逐步降低,得益于此,方便对Ansible二次开发。
(2)Ansible丰富的内置模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能所需。
# 查看模块的个数
ansible-doc -l |wc -l
(3)在Ansible去中心化概念下,一个简单的复制操作即可完成管理配置中心的迁移。
(4)Agentless(无agent客户端),客户端无需任何配置,由管理端配置好后即可使用
问题3:Ansible是如何工作的?
原理:Ansible没有客户端,因此底层依赖于软件系统,Linux系统下基于OpenSSH通信,管理端必须是Linux系统(客户端可以是Windows或者Linux),使用者认证通过后(免密)在管理节点通过Ansible工具调用各种应用模块将指令推送至被管理端执行,并在执行完毕之后自动删除产生的临时文件。
问题4:Ansible使用过程的角色
(1)Ansible以API调用的方式运行,相关语言可以是PHP、Python、PERL、Java!
(2)使用Ad-Hoc的临时命令集(内置模块)调用Ansible工具集来完成任务执行!
(3)使用预先编译好的Ansible playbook,通过执行PLaybooks中预先编排好的任务集按序完成任务的执行!
关键字:丰富的内置模块和开放的API接口!
问题5:主流三大自动化运维工具的比较
问题六:Ansible的工作机制
INVENTORY:命令执行的目标对象配置文件,资源主机的清单!
API:供第三方程序调用的应用程序编程接口 !
MODULES:Ansible执行命令的功能模块,多数为内置模块 !
PLUGINS:内置和可自定义的插件!
问题七:Ansible组件的调用关系
二 Ansible的应用场景
应用部署
Ansible内置网络、应用、系统、第三方云平台扩展等完善的功能模块,协助运维快速完成应用的安装、卸载、升级、启停、配置等部署类工作,即使对跨平台或知名的商业硬件也同样支持。
配置管理
Ansible内置File、Template,结合Jinja、Lineinfile等内置模块,同时无缝结合GitHub、GitLab、Git、SVN、Jenkins等主流版本控制和CI持续集成工具,助力配置管理自动化。