Ansible是近年越来越火的基于python开发的一款运维自动化工具,主要帮助运维实现IT工作的自动化、降低人为操作失误、提高业务自动化率、提高运维工作效率。Ansible是基于模块来运行,它本身没有任何批量部署的能力,Ansible主要是提供一种批量部署的框架。 常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成、零宕机平滑升级等。
(1) Ansible完全基于Python开发,而 DevOps(促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合)在国内已然是一种趋势,Python被逐渐普及,运维人员自己开发工具的门槛逐渐降低,因此,方便对Ansible的二次开发
(2) Ansible丰富的内置模块,甚至还有专门为商业平台开发的功能模块,完全可以满足日常功能所需
==(3) 在Ansible去中心化概念(任何人都是一个节点,任何人也都能够成为一个中心)==下,复制操作即可完成管理配置中心的迁移
(4) Agentless(无客户端),客户端无需任何配置,由管理端配置好后即可使用
(1) Ansible,是Ansible的命令工具,核心执行工具;一次性或临时执行的操作都是通过该命令进行。
(2) Ansible Playbook,任务剧本(又称任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,yam格式。
(3) Inventory,Ansible管理主机的清单,默认是/etc/ansible/hosts文件。
(4) Modules,Ansible执行命令的功能模块,Ansible2.3版本为止,共有1039个模块。还可以自定义模块。
(5) Plugins,插件,模块功能的补充,常有连接类型插件,循环插件,变量插件,过滤插件,插件功能用的比较少。
(6) API,提供给第三方程序调用的应用程序编程接口。
1、Ansible没有客户端,因此Ansible底层通信依赖于系统软件,Linux系统下基于OpenSSH通信,Windows系统下基于PowerShell,管理端必须是Linux系统。
2、根据Ansible使用过程中的不同角色,可分为:使用者、Ansible工具集 和 作用对象。
3、Ansible使用者来源于多种维度,分为以下几种方式:
CMDB存储和管理着企业IT架构中的各项配置信息,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具集完成操作者所希望达成的目标。
基于PUBLIC(公有云)/PRIVATE(私有云),Ansible以API调用的方式运行,Ansible提供了丰富的API语言接口:PHP、Python等。
直接使用Ad-Hoc临时集调用Ansible工具集来完成任务执行。
通过执行Playbooks中预先编排好的任务集按序完成任务执行。
4、Ansible工具集(ansible命令是Ansible的核心工具,总指挥)
INVENTORY:ansible管理主机的清单 /etc/ansible/hosts ( ansible命令执行的目标对象)
API: 供第三方程序调用的应用程序编程接口
MODULES: 丰富的内置功能模块,也可自定义
PLUGINS: 内置和自定义的插件,模块功能的补充,如连接类型插件,循环插件,变量插件,锅炉插件等,该功能不常使用
5、 Ansible作用对象
Ansible的作用对象,不仅是Linux和非Linux操作系统的主机,同样也可以作用于各类公/私有云、商业/非商业设备的网络设施
6、Ansible组件的调用关系
使用者使用ansible或ansible-playbook(会额外读取playbook文件)时,在服务器终端输入ansible的ad-hoc命令集或playbook后,ansible会遵循预先编排的规则将playbooks逐条拆解为play,再将play组织成ansible可识别的任务(task)。随后调用任务涉及的所有模块(module)和插件(plugin),根据inventory中定义的主机列表通过ssh将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果,如果临时文件执行完毕则自动删除.
ad-hoc模式(点对点模块)
使用单个模块,支持批量执行单条命令,相当与在bash中执行一句shell命令
playbook模式(剧本模式)
ansible主要的管理方式,通过多个task的集合完成一类功能,可以理解为多个ad-hoc的配置文件
Ansible无需任何daemon维护进程即可实现相互间的通信,且通信方式是基于业内统一标准的安全可靠的ssh安全连接. 同时因为sshP是每台linux主机系统必装的软件,所以ansible无需在远程主机端安装任何额外进程,即可实现agentless(无客户端),进而实现去中心化的思想.Ansible是非c/s架构,自身没有client端,其主要特点如下:
无客户端,只需安装ssh,python
基于OpenSSL通信,底层基于SSH协议,Ansible默认使用ssh连接的,但是Ansible也支持其他的连接方式,其他的连接方式是需要插件的支持,才可以实现通信。
支持密码和SSH认证,建议使用公私钥方式认证,因为密码认证方式的密码需明文写配置文件,虽然配置文件可加密,但会增加Ansible使用的复杂度.
/etc/ansible/ansible.cfg :配置文件
/etc/ansible/hosts :主机库(host inventory)管理被监控的主机
/usr/bin/ansible : 主程序
/usr/bin/ansible-doc : 文档
/usr/bin/ansible-playbook : 剧本
1、 ansible是核心的指令:
主要用于执行单条命令,默认跟的是主机和选项部分,默认不指定模块时,使用的是command模块(默认使用的模块可以在ansible.cfg修改):
2、ansible-doc:
ansible-doc -h 用于查看模块的信息常见的参数-l -s
ansible-doc -l 列出已安装的模块
ansible-doc -s 模块 : 查查看具体模块的使用方法
3、ansible-galaxy
ansible-galaxy 从站点下载第三方的扩展模块
4、ansible-lint:
ansible-lint是对playbook的语法进行检查的工具,也可以用ansible-playbook --syntax-check + 剧本名
5、ansible-playbook :
ansible-playbook 读取playbook文件执行相应的动作,执行ansible-playbook的剧本
6、ansible-pull:
ansible-pull 适用于数量多的机器配置,远程执行命令的工具。对运维架构能力比较强
7、ansible-vault:
ansible-vault 配置文件有敏感信息,设置加密/解密这个配置文件