Ansible入门

Posted python运维技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible入门相关的知识,希望对你有一定的参考价值。

现在做运维的估计都对ansible不陌生了,如果还没有使用过的,我建议尽快尝试下这个技术,入门非常简单,一旦你运用熟练,将大大减轻运维工作的压力,ansible只需要在主控端安装,客户端无需做任何操作即可对被控端进行批量操作,这也是相对于saltstack的一个优点,saltstack除了在主控端安装外,客户机要安装客户端,其它不多说了,如果有兴趣的可以百度,这种文章已经满大街都是了,回到正题,今天这篇我们还是主要来介绍介绍ansible如果在运维中的应用,本来我刚开始打算用一篇来完成对ansible的介绍,在实际写的过程中才发现,如果只用一篇来写,那篇幅就会非非常的长,为了让大家阅读起来不那么痛苦,我最后决定分三篇来写完,三篇分别介绍ansible的常用模块,然后讲解playbook配置,最后介绍ansible的api,这篇是开头篇,所以暂不涉及python的编码工作,学习起来也比较轻松,废话不多说了,我们接下来开始我们的正题:

首先,我们安装ansible

#yum install ansible

然后输入个Y,就完成了,就是这么简单。

安装完,我们说下基本的配置,运行命令:

#cd /etc/ansible/

#ll

总用量 20

-rw-r--r-- 1 root root 8625 10 11 02:41 ansible.cfg

-rw-r--r-- 1 root root  979 3   1 23:13 hosts

drwxr-xr-x 2 root root 4096 10 11 02:41 roles


我们看到有2个文件和1个目录,,其它先不用管,我们先只看hosts文件,用vi打开,除[webservers],[dbservers]这两行外,其它全部注释掉,这二行的作用的定义主机组,主机组名下可以写成员主机的IP(或域名),我们可以把的客户机的IP放到[webservers]主机组下,这样,定义主机和组的规则就算完成了,接下来进入我们模块学习部分。

不得不说ansible的模块真是丰富,基本上我们日常运维用到功能全部都有了,运行命令

#ansible-doc -l

可以看到全部的模块名称,对模块的使用还是要看业务场景,比如你如果没有在aws上机器,那么像ec2你也不会用到,所以今天我们就只会对日常运维最常用的模块做说明,剩余的模块可以根据自己的业务用到了,再去学习了解,我们在讲模块前,会先给出每个模块的应用场景,方便大家快速上手使用:

场景1:需要在客户机上执行命令,可以用command模块,命令如下:

#ansible webservers -m command -a 'uptime'

其中webservers是主机组名称,在该主机组名称下的所有主机都会运行uptime命令,-m后是模块名称,-a 后是模块参数,后续命令都基本一个模子,不再赘述。

场景2:需要执行客户机上的脚本,可以用shell模块,命令如下:

#ansible webservers -m shell -a '/root/run.sh'

场景三:脚步在主控端,但需要在客户机上执行,可以用script模块,命令如下:

#ansible webservers -m shell -a '/root/local.sh'


请注意,你主控端/root/下必须有local.sh脚本。

场景四:文件发布,这种需求很多,比如日常的配置文件更新,程序版本发布等,基本都会用到,可以用copy模块:

#ansible webservers -m copy -a 'dest=/root/ src=/root/xl2pdf'


注意我这里xl2pdf是个目录。

场景5:想在客户机上安装软件,可以用yum模块,这个用的还是挺多的,比如用ansible去链接低版本的centos时,就乎出现”ansible requires a json module, none found! “的错误,需要远程机安装samplejson包。

ansible webservers -m raw -a 'yum -y install python-simplejson'

raw是什么鸟?莫急,我们看看帮助文档怎么说:#ansible-doc raw

> RAW

 

  Executes a low-down and dirty SSH command, not going through the

  module subsystem............


第一句就说明了问题,raw模块是靠底层ssh的通讯,不依靠python的模块,所以如果碰到低版本的系统,如果command和shell模块无法使用,可以先用这条命令安装完需要的包。

场景6:重启客户机服务,可以用service模块:

#ansible webserves -m service -a "name=vsftpd state=restarted"


对服务操作有started,stopped,restarted,reloaded四个参数。

以上主要的模块就说完了,还有ping模块,setup模块(获取远程主机信息),cron模块等大家可以按以上模块使用的思路去参考运行,不知道怎么使用的,就看看帮助文档,这篇就到这里了,下篇我们开始聊聊如何将这些模块组合起来满足更复杂的业务操作,这就要用到我们的playbook了,先不多说,我们下篇见。


以上是关于Ansible入门的主要内容,如果未能解决你的问题,请参考以下文章

02Ansible入门

ansible快速入门

Ansible自动化运维之Ansible入门及简单部署

ansible 快速入门

Ansible 入门和常用模块

ansible入门