Ansible从入门到精通

相信运维的都对ansible不陌生了,如果还没有使用过的,可以考虑尝试下这个技术,入门非常简单,一旦你运用熟练,将大大减轻运维工作的压力。ansible与其它运维工具(例如saltstack)不同的地方是,只需要在主控端安装,客户端无需做任何操作即可对被控端进行批量操作。这也是相对于saltstack的一个优点,saltstack除了在主控端安装外,客户机要安装客户端,其它不多说了。本文主要来介绍ansible如果在运维中的应用,主要三篇分别介绍ansible的常用模块,然后讲解playbook配置,最后介绍ansible的api,这篇是开头篇,所以暂不涉及python的编码工作,学习起来也比较轻松,废话不多说了,我们接下来开始我们的正题:

ansible安装

网上大部分要先按照EPEL源,我是直接用yum安装的,没有问题,如果碰到有按照的朋友,可以先按照EPLE源,安装命令:

rpm -ivh http://fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

我是用yum install ansible直接安装的,没有任何问题,可能ansible被redhat收购后做了调整了,使安装变简单了。

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

#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
#cd /etc/ansible/
#ll
总用量 20
-rw-r--r-- 1 rootroot 8625 10月 11 02:41 ansible.cfg
-rw-r--r-- 1 rootroot  979 3月  1 23:13 hosts
drwxr-xr-x 2 rootroot 4096 10月 11 02:41 roles

配置

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

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

#ansible-doc -l
#ansible-doc -l

使用场景

可以看到全部的模块名称,对模块的使用还是要看业务场景,比如你如果没用ec2,你暂时也不会用到这个模块,所以可以等用到的时候再学习也不迟,所以今天我们就只会对日常运维最长用的模块做说明:

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

#ansible webservers -m command -a 'uptime'
#ansible webservers -m command -a 'uptime'

 

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

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

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

 

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

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

 

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

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

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

 

注意我这里xl2pdf是个目录。

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

ansible webservers -m raw -a 'yum -y install python-simplejson'
ansiblewebservers -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............
#ansible-doc raw
> RAW
 
  Executes a low-downand dirtySSHcommand, not goingthroughthe
  modulesubsystem............

 

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

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

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

 

以上主要的模块就说完了,还有ping模块,setup模块(获取远程主机信息),cron模块等大家可以按以上模块使用的思路去参考运行,这篇就到这里了,下篇我们开始聊聊如何将这些模块组合起来实现批量环境不是,这就要用到我们的playbook了,我们下篇见。

 

如果引用本站的原创文章,请注明原文链接:,本站保留追究责任的权利!

发表评论