Ansible学习手记一
Ansible简介
Ansible是一个运维工具,做运维的朋友无人不知。在架构上Ansible可以通过以一个主机为中心同时对多个应用服务器做配置、部署、命令执行等操作,大大降低了运维人员的操作。
同时Ansible的有点还在于跨平台支持,提供linux,Windows,unix多个平台的运维支持。对于比较复杂的运维操作还提供了playbook剧本设计功能,将运维操作以描述性文本编写好后执行。从而减少了人为操作所带来的错误。
学习前准备
既然ansible是一款简单的批量运维工具,那么我们在学习前就需要准备好我们学习用的基础环境。我们假设我们有两台运维服务器需要日常运维,并且我们还有一台空闲的服务器刚好用来安装ansible来批量运维我们的服务器。
1. 我在自己电脑上事先准备了3台虚拟机。配置都保持在2核2G50G盘即可。
2. 取其中一台,并将ip固定为192.168.204.128。这台机器准备作为安装ansible的主机使用。
3. 取另外两台,并将ip固定为192.168.204.129、192.168.204.130作为运维服务器使用。
4. 将192.168.204.129服务器与ansible主机(192.168.204.128),做互信,报证两台服务器间互信正常。(至于两台服务器间如何配置互信,请移步baidu.com)
Ansible安装
-
Ansible有多种安装方式,这里ansible使用最简单的安装方式 yum安装。
-
安装ansible之前需要先安装epel源,根据安装主机的版本不同安装源也不同,根据自己的主机版本选择。如果主机版本为centos7则可直接使用如下命令即可。
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
- 将epel源安装完毕后,可以直接安装ansible了。这里开始自动安装ansible,我们在192.168.204.128主机上直接运行如下命令
yum install ansible -y
-
安装过程中看到如下图的提示则表示Ansible已安装成功。
-
安装ansible完毕后,在/etc/ansible目录下会出现如下文件。
ansible.cfg : 这里是ansible的配置文件
hosts : ansible管理的主机清单都在这里配置
roles : 如果我们管理目标主机有很复杂的逻辑时就需要用到roles了,这里先说明一下他是存放角色的目录
这里面每个文件都会有它自己的作用,具体我们之后会在使用的时候一一讲解。
-
验证ansible是否安装成功
使用 ansible --version 命令即可查看ansible的安装版本,如下图所示
ansible --version
Ansible之 “Hello World !!”
-
在我们写第一个测试例子前,我们应该先看一下ansible的基本语法。
使用命令 ansible --help 查看ansible的帮助文档
ansible --help
如图我们先关注下-m这个参数,这个参数就是用来指定ansible的执行模块的。那么模块有是什么呢?
实际上ansible本身是没有批量部署的功能的,正在实际意义上执行部署操作的是它的模块。ansible只是提供一个架子,而模块就类似于插件,当需要不同的功能的时候我们只需要选择合适的插件就可以了。
-
如何使用最简单的模块,完成主机对其他服务器的一次批量操作。
前面我们通过准备工作,准备了三台虚拟机作为我们学习用的机器。192.168.204.128作为我们安装ansible的主机使用了。还有192.168.204.129、192.168.204.130两台机器我们可以作为测试用客户机使用。以下我们统一简称为ansible主机、129机器、130机器。
我们现在需要使用ansible主机来首次连通以下其他两台机器,看它们之间的网络通讯是否正常。可直接使用如下命令:
ansible all -m ping
命令解析:
- ansible : 命令的开头都使用ansible开头
- all : 表示ansible需要操作哪些主机,这里可先直接制动all,表示所有
- -m : 前面提到过的参数,后面直接跟着需要使用的模块
- ping : 本次操作需要使用到的模块,这里我们使用ansible的ping模块。(我们在windows/linux中也会经常使用ping命令来检查网络是否连通)
执行结果:
如上图所示,执行后提示警告信息:“提供的主机列表为空,只有localhost可用。请注意,隐式localhost与“all”不匹配”。这是因为我们没有配置ansible的主机列表,所以它不能匹配我们命令中”all“表达式。
解决办法:我们前面在ansible安装完成后提到过,在以yum方式安装完成ansible后。在/etc/ansible目录下有三个文件,其中hosts文件就是用来管理主机列表的。我们只需要将我们的129机器及130机器的ip配置到hosts中即可。
修改完hosts文件后,再次执行命令,得到如下结果:
如上图所示,ansible已经顺利通过ping模块,完成了129机器及130机器的连通性测试。但是结果却不一样。129机器成功接收到ping请求并返回给ansible主 机pong的回应。但130机器提示ssh验证异常了。原因也很简单我们前面提到过的环境准备,我们故意只将129机器与ansible主机配置了互信,而130机器什 么也没做。现在我们将130机器的互信配置上去后再次执行命令,得到如下结果:
如上图所示,可直接证明,ansible作为一个简单实用的批量运维工具是非常简单的,客户机器上几乎不用做任何安装,做到了无侵入。但前提条件是需要与ansible主机保持互信的状态。
-
趁热打铁之“Hello World 2 !!”
现在我们尝试将ansible主机上的一个文件,批量上传到两台服务器上的指定目录上去。
先在ansible主机任意目录中创建一个文件名为test.log。
再使用如下命令:
ansible all -m copy -a 'src=/zjdata/test.log dest=/zjdata/'
命令与上一个例子差不多,只有如下两点差别
- copy : 同样与ping都是一个模块,只是copy这个模块是专门做文件拷贝用的。
- -a : 不同的模块有不同的用法,copy模块在使用时是需要准备参数的。后面的参数中分两部分src与dest。基本意思为:‘src=[ansible主机中的那个文件(绝对路径)] dest=[拷贝到客户机上的那个目录下]’
执行后结果:
我们到129、130机器上就可以在相应目录下看到该文件了,批量文件复制成功。
到此我们的Ansible的最基本的入门就已经结束了,通过这篇文章我们了解了ansible的作用、安装方法、基本的结构、基本的使用方法。在之后的学习过程中我们还会对Ansible的其它功能,做更深入的学习。