天天看点

Ansible自动化运维的安装及常用模块解释

(一)前言:

ansible是今年来越来越火的一款开源运维自动化工具,通过ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。ansible通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个。更为重要的是,它操作简单,但提供的功能又非常丰富,在运维领域,几乎可以做任何事。

ansible自2012年发布以来,很快在全球流行,其特点如下: ansible基于python开发,运维工程师对其二次开发相对比较容易; ansible丰富的内置模块,几乎可以满足一切要求; 管理模式非常简单,一条命令可以影响上千台主机; 无客户端模式,底层通过ssh通信;

我们可以通过四种方式和ansible交互,我这里只研究了其中两种方式,应付日常工作足够了。分别如下:

ad-hoc命令集:user直接通过ad-hoc命令集调用ansible工具集来完成任务。

playbooks:user预先编写好ansible playbooks,通过执行playbooks中预先编排好的任务集,按序执行任务。

1、ansible工作集:

ansible工作集包含inventory、modules、plugins和api,其中,inventory(清单)用来管理设备列表,可以通过分组实现,对组的调用直接影响组内的所有主机;modules是各种执行模块,几乎所有的管理任务都是通过模块执行的;plugins提供了各种附加功能;api为编程人员提供一个接口,可以基于此做ansible的二次开发。

ansible可以通过单条命令或者配置文件来对多台主机进行控制及更改,下面将从安装及配置依次写出来。

2、playbook配置文件

playbook配置文件使用yaml语法,具有简洁明了、结构清晰等特点。playbook配置文件类似于shell脚本,是一个yaml格式的文件,用于保存针对特定需求的任务列表。上面介绍的ansible命令虽然可以完成各种任务,但是当配置一些复杂任务时,逐条输入就显得效率非常低下了。更有效的方案是在playbook配置文件中放置所有的任务代码,利用ansible-playbook命令执行该文件,可以实现自动化运维。yaml文件的扩展名通常为.yaml或.yml。

(二)ansible的安装及配置

通过一个简单的环境把ansible的配置及安装写下来,环境如下:

Ansible自动化运维的安装及常用模块解释

最终效果:可以通过ansible server来控制server 1和server 2。

一、部署前工作:

1、若采用本地yum仓库安装,请下载我提供的本地yum仓库,提取码:buqy ,我提供的是ansible 2.3.1.0版本。

2、若本机可上网,也可以直接将yum仓库指向互联网,可以安装ansible 2.4.x.x版本。

3、默认采用tcp 22进行与客户机进行通信,若有更改,需自行设置防火墙,我这里为了方便,直接关闭了防火墙。

二、安装ansible(二选一即可):

1、采用互联网yum仓库的安装方式:

2、采用我提供的本地yum仓库安装方式:

我这里采用了互联网yum仓库进行安装,即ansible 2.4.2.0。

安装已经完成,但是若要正常的使用ansible,还需要解决一个问题,就是在控制多台主机时,若要每执行一次命令或脚本都要输入一次对端密码的话,显得就很鸡肋,所以还需要创建ssh免交互登录,如下:

以下操作都在ansible服务器进行:

三、ansible配置:

inventory是ansible管理主机信息的配置文件,相当于系统的hosts文件功能,默认存放在/etc/ansible/hosts,在hosts文件中,通过分组来组织设备,ansible通过inventory来定义主机和分组,若不使用默认的/etc/ansible/hosts,可以通过<code>ansible -i 新的inventory路径</code> 来指定inventory,我这里直接采用默认的路径。

1、以分组的方式添加需要管理的主机:

正是管理之前,首先要编写hosts文件,因为ansible通过将设备列表以分组的方式添加hosts文件来实现对设备的管理。hosts文件中,[ ]包含的是组名,设备列表支持域名及ip地址,默认情况下,通过访问22端口(ssh)来管理设备,若目标主机使用了非默认的ssh端口,还可以在主机名称之后使用冒号加端口号标明,以行为分隔单位,也支持通配符。

配置完成后,可以针对hosts定义的组进行远程操作,也可以针对组中所指定的某一个或者多个主机操作,如下:

四、ansible命令:

命令1、ansible:

ansible是生产环境中使用非常频繁的命令之一,主要应用在以下场景:

临时性的维护,没有规律,临时需要做的任务,也称为非固化需求。

临时一次性操作。

二次开发接口调用。

ansible可用的选项如下: -v:输出详细的执行过程信息,可以得到执行过程所有的信息。 -i path:指定inventory信息,默认为/etc/ansible/hosts。 -f:并发线程数,默认为5个线程。 --private-key=private_key_file:指定密钥文件。 -m:指定执行使用的模块。 -m:指定模块的存放路径,默认为/usr/share/ansible,也可以通过ansible_library来设定默认路径。 -a:指定模块参数。 -u:指定远程主机以哪个用户运行命令。 -l:限制运行主机,等同于“--limit”。 --list-hosts:列出符合条件的主机列表,不执行任何命令。

用法示例1(需要提前在/etc/ansible/hosts文件中定义web组):

用法示例2:

用法示例3:

ansible的返回结果非常友好,一般会用三种颜色来表示执行结果:红色、绿色和橘yellow(那个颜色被和谐了)。其中红色代表执行过程中有异常;橘yellow表示命令执行后目标有状态变化;绿色表示执行成功且没有对目标主机做修改。

命令2、ansible-doc:

ansible-doc用来查询ansible模块文档的说明,类似于man命令,针对每个模块都有详细的用法说明及应用案例介绍。

命令3、ansible-playbook:

ansible-playbook是日常应用中使用率最高的命令,类似于linux中的sh或source命令,用来执行系列任务。其工作机制是:通过读取预先编写好的playbook文件实现集中处理任务。ansible-playbook命令后跟yml格式的playbook文件,playbook文件存放了要执行的任务代码,命令使用方式如下(playbook.yml文件需要提前编写好,最好指定playbook.yml的绝对路径):

命令4、ansible-console:

ansible-console是ansible为我们提供的一款交互式工具,类似于windows中的cmd及linux中的shell。可以在ansible-console虚拟出来的终端上像shell一样使用ansible内置的各种命令,这为习惯于shell交互方式的用户提供了良好的使用体验,所有的操作与shell类似,而且支持tab键补全。具体操作如下:

五、ansible中自带的模块介绍:

1、command模块:

command模块在远程主机执行命令,不支持管道,重定向等shell特性,其余和shell类似,常用参数如下: chdir:在远程主机上运行命令前需要提前进入的目录。 creates:在命令运行时创建一个文件,如果文件已经存在,则不会执行创建任务。 removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务。 executeble:指明运行命令的shell程序。

2、shell模块(相当于万能模块,可以执行大多数命令):

shell模块在远程主机执行命令,相当于调用远程主机的shell进程,然后在shell下打开一个子shell运行命令。和command模块的区别是它支持shell特性,如管道符、重定向等。

3、copy模块:

copy模块用于复制指定主机文件到远程主机的位置,常见参数如下: src:指出源文件路径,可以使用相对路径和绝对路径。支持直接指定目录,如果源是目录,则目标也要是目录。 dest:指出复制文件的目标目录位置,使用绝对路径,支持直接指定目录。如果源是目录,则目标也要是目录,如果目标已经存在,则会覆盖原有内容。 mode:指出复制时,目标文件的权限,可选。 owner:指出复制时,目标文件的属主,可选。 group:指出复制时,目标文件的属组,可选。 content:指出复制到目标主机上的内容,不能与src一起使用,相当于复制content指明的数据到目标文件中。

4、hostname模块:

hostname模块用于管理主机名,常用参数如下: name:指明主机名。

5、yum模块:

yum模块基于yum机制,对远程主机管理程序包,常用参数如下: name:程序包的名称,可以带上版本号。若不指明版本,则默认安装最新版本。 state=present | latest | absent:指明对程序包执行的操作,present表示安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包。 disablerepo:在用yum安装时,临时禁用某个仓库的id。 enablerepo:在用yum安装时,临时启用某个仓库的id。 conf_file:yum运行时的配置文件,而不是使用默认的配置文件。 diable_gpg_check=yes | no:是否启用完整性校验功能。

6、service模块:

service模块用来管理远程主机上的服务的模块,常见参数如下: name:被管理的服务名称。 state=started | stopped | restarted | reloaded:动作包含启动、关闭、重启及重新加载配置文件。 enabled=yes | no:表示是否设置该服务开机自启动。 runlevel:如果设定了enabled开机自启动,则要定义在那些运行目标下自动启动,如2/3/4/5。

7、user模块:

user模块用于管理远程主机上的用户账号,常见参数如下: name:必须参数,账号名称。 state=present | absent:创建或删除账号,present表示创建,absent表示删除。 system=yes | no:是否为系统账户。 uid:用户uid。 group:用户的基本组。 groups:用户的附加组。 shell:默认使用的shell。 home:用户的家目录。 move_home=yes | no:如果设置的家目录已经存在,是否将已存在的家目录进行移动。 password:用户的密码。 comment:用户的注释信息。 remove=yes | no:当state=absent时,是否要删除用户的家目录。

8、group模块:

group模块用于管理组,用于新建或删除组,常用参数如下: gid:指定组的gid name:指定组的name state=present | absent:创建或删除 system=yes | no:是否为系统组

9、mount模块:

mount模块用于挂载文件系统,常用参数如下: src:要挂载的设备或文件系统 name:指定挂载点 fstype:指定文件系统类型 ots=w | r | o :设置文件读写类型,可组合使用。 state=present | absent | mounted | unmounted:present表示只修改fstab文件中的配置,不自动创建挂载点,而且不挂载;absent表示删除挂载点,修改fstab文件;mounted:自动创建挂载点并挂载,添加自动挂载(fstab);unmounted:只卸载,不删除挂载点,不修改fstab文件。

10、cron模块:

cron模块用来管理计划任务,常用参数如下: name:指定计划任务描述,必填 job:要执行的任务 user:运行计划任务的用户 执行时间: minute:0-59,默认为 * hour:0-23,默认为 * day:1-31,默认为 * month:1-12,默认为 * weekday:1-7,默认为 * state=present | absent:present表示添加计划任务;absent表示删除计划任务。

11、 script模块:

功能:在远程主机上执行主控端的脚本,相当于scp+shell组合。

用法如下:

模块的举例就写这么多了吧,关于playbook配置文件的使用请参考:ansible自动运维工具之ansible-playbook详解