#打卡不停更# Ansible总体介绍 原创
Ansible
笔者在工作中需要使用到ansible,为了能够快速满足线上的需求,开展这个系列的需求,在这个系列里,笔者会更多介绍ansible的实际应用,尽可能以最少的笔墨将ansible的实际功能描绘清楚,如有不到之处,希望各位读者能不吝赐教。
什么是Ansible
Ansible 是一款开源 IT 自动化工具,能够自动执行置备、配置管理、应用部署、编排和许多其他手动 IT 流程。与更为简易的管理工具不同,Ansible 用户(如系统管理员、开发人员和架构师)可以运用 Ansible 自动化,在整个企业范围内更高效地安装软件、自动执行日常任务、置备基础架构、提高安全性和合规性、修补系统并共享自动化。
这是来自 Red Hat的官方介绍,显而易见,ansible是一个自动化运维工具,强大而且无需代理,底层使用ssh来完成一系列运维任务,并且支持多平台交互。
但是使用也有一定要求,尽管简单,用我的话说,首先你需要完全清楚你使用ansible做了什么,因为这只是个运维工具,而不能帮你自动的配置好你想要的服务;其次,ansible的使用有一定的学习门槛,如果你没有使用过任何的运维工具,那这个使用YAML文件来完成任务的工具需要你进行一定的练习才能上手。
Ansible的工作方式
ansible在运行的时候会使用ssh进行连接,所以如果你首先无法使用ssh功能的话,ansible会在第一步报错,要我说,这对大多数人来讲是一个打击。
当ansible成功建立连接之后,ansible的程序将推送一系列原本需要手动执行的命令,这些命令的完成依托于ansible的各个模块,并在完成后结束连接。
所以,ansible工作的起点是SSH。需要首先满足ssh通信能够正常连接,并且ssh连接在ansible执行任务时不会中断,比方说你需要ansible修改ip地址,那么ansible可能会在完成修改后被迫断开连接。作为ansible的使用者需要预先考虑到这一点并作出相应的对策,比如,在完成修改后对修改后的ip地址进行连通性测试。
anzible使用的相关问题会在稍后进行介绍。
Ansible典型的工作方式,也是我需要的工作方式,是通过一个名叫 playbook 的脚本文件(基于YAML格式构建)去控制远端操作系统按照特定的逻辑顺序完成相应任务。
比如我需要部署一个Mariadb集群,只需要写好相应的playbook交给ansible执行就可以了,不需要在不同的主机之间来回切换。极大的减少了工作量和任务的复杂程度,在进行更为复杂的任务时,ansible的优势更为明显,这也是ansible在运维工作者中广受青睐的原因之一。
Ansible的组成
架构
**节点:**Ansible 架构中拥有两种计算机类型,即控制节点和受控节点。Ansible 运行在控制节点上,并且只能运行在 linux 操作系统上,对于被控节点,可以是主机设备,也可以是网络设备,主机设备的操作系统,可以是 Windows,也可以是 linux。
清单(inventory): 受控节点设备的列表。在这个列表中,你可以根据某些标准(如,作用,服务等)将拥有相同属性的计算机组织到一个组中。Ansible 清单,支持静态清单(一旦定义好,除非你修改配置文件,不然不会发生改变。),也支持动态清单(通过脚本从外部源获取清单,该清单可以随着环境的改变而改变。)。
Playbook: 需要在被控节点主机上运行的任务列表,从而让他们达到我们预期的状态。Playbook 中包含一个或多个 play,每个 play 会在一组或多组计算机上按顺序执行已经定义好的一系列 task,每个 task 都是一个执行模块。
模块(Module): 用于确保主机处于某一个特定的状态,例如可以使用yum(对于不同发行版本的 Linux,模块名可能有所不同,如,在 Ubuntu 中与之对应的是 apt 模块。) 模块确保主机已经安装了某个软件,如果主机状态已经是预期的了(已经安装了该软件),那么就不会执行任何操作,执行下一个模块(task)。
Plugin 添加到 Ansible 中的代码段,用于扩展 Ansible 平台
Ansible执行流程
ansible有两种执行模式:
- ad-hoc(点对点模式)
使用单个模块,支持批量执行单条命令。ad-hoc命令是一种可以快速输入的命令,而且不需要保存。就相当于运行了一道shell指令一样。
非常实用,当我想要收集一个集群中所有主机被dhcp服务分发的ip地址时;或者进行大量的连通性测试。诸如此类,各位可以在应用时联想到各种场景。
- playbook(剧本模式)
这是Ansible的主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如web服务的按照,数据库服务器的批量备份等。可以简单的把playbook理解成通过多个ad-hoc操作的配置文件。
实际运行的流程是ansible读取ansible.cfg中的配置,然后根据规则来获取inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后返回执行的结果。
- 加载自己的配置文件,默认/etc/ansible/ansible.cfg;
- 查看对应的主机配置文件,找到要执行的主机或者组;
- 加载自己对应的模块文件,如command;
- 通过ansible将模块或命令生成的对应py文件(python脚本 ),传输至远程服务器
- 对应执行用户家目录的.ansible/tmp/xxx/xxx.py文件;
- 给文件赋予执行权限;
- 执行并返回结果,删除临时py文件,sleep 0 退出。
以上就是一个ansible程序执行的流程。下一节会讲解如何在centos系统中安装部署ansible程序。