自动化运维工具ansible详细介绍

简介:

在学习批量管理软件时,首先要明确的知道自己需要什么,网上大神很多,他们都研究到源码上了,写了很多介绍绚丽功能的文档,但其实那些功能基本上我们都用不到,经常被各种文档弄得头脑发晕,此文就是为了简单直白的告诉大家ansible的功能,满足大家的基本需要。

首先确认批量管理我们需要什么:无外乎主机分组管理、实时批量执行命令或脚本、实时批量分发文件或目录、定时同步文件等。

 

1.     ansiblesaltstack对比

前一段时间用了saltstack,免不得要谈一下他们的优缺点。两者都是安装和使用都非常方便的批量管理软件。

1、salt要安装agent;ansible不需要,通过ssh连接,省掉装agent的事。

2、salt在server端要启进程;ansible不需要,但这都无所谓差不多。

3、salt与ansible都有模块,可使用任意语言开发模块。

4、salt与ansible都使用yaml语言格式编写剧本。

 

ansible由于走的是ssh,所以它有认证的过程,以及加密码的过程,这使得ansible非常慢,不适用于大规模环境(指上千台)。

saltstack详细介绍参考我的博文:http://yangrong.blog.51cto.com/6945369/1556712

 

为什么我放弃salt呢,首先服务器不多(百台左右),其次,salt的master端与minion端TCP连接经常断开,导致有时执行命令时会漏机器,这简直让我忍无可忍。听说最新版的salt好了很多,但由于公司系统是定制的,安装软件特别麻烦(15M的系统,解决依赖就是个大问题),我还是选择了ansible。

 

2.     ansible安装

yum install paramiko PyYAMLjinja2 httplib2   #ansible所需依赖包

git clone https://github.com/ansible/ansible.git

cd ansible

python setup.py install

cp ansible/examples/ansible.cfg/etc/ansible/   #拷贝ansible默认的配置文件,也可不拷贝。

 

另一个安装方法:

pip install ansible


在开始ansible操作受控机器前,需要配置好ssh免密码登陆

 

3.     ansible命令参数介绍

Ansible中的临时命令的执行是通过Ad-Hoc来完成,能够快速执行,而且不需要保存执行的命令,例如:

ansible -i ~/hosts all -m command -a ‘who’ -u root

主要参数如下:

-u username          指定ssh连接的用户名,即执行后面命令的用户

-i inventory_file    指定所使用的inventory文件的位置,默认为/etc/ansible/hosts

-m module            指定使用的模块,默认为command

-f 10                指定并发数,并发量大的时候,提高该值

--sudo [-k]          当需要root权限执行的化,-k参数用来输入root密码

 

4.     ansible主机分组管理:

配置好ssh免密码登陆后,就该把那些机器加入到hosts文件中,hosts不限路径,可用-i参数指定路径。

[root@yang ~]# cat  /etc/ansible/hosts

[KD1]    #组名

1.1.1.1:62222    #主机,此处对于端口进行指定,毕竟有些服务器ssh端口打开的不一样。

1.1.1.2:62222

[KD2]

1.1.1.3:62222

1.1.1.4:62222

 

分组执行效果:

[root@yang ~]#ansible -i /etc/ansible/hosts KD1 -m shell -a  'uptime'

1.1.1.1 | success |rc=0 >>

 11:56:31 up 2 days, 17:42, load average: 0.41,0.34, 0.32

 

1.1.1.2 | success |rc=0 >>

 11:57:03 up 2 days, 17:44, load average: 0.34,0.28, 0.25

 

连续的主机名使用";"号分隔,如:ansible -i /etc/ansible/hosts  'KD1;1.1.1.3' -m shell -a 'uptime'

 

更多的分组格式参考:

http://www.ibm.com/developerworks/cn/linux/1407_liheng_ansible/

 

还可以使用脚本动态获取主机的方式:

官方地址:http://docs.ansible.com/intro_dynamic_inventory.html

网络文档:http://noops.me/?p=1446

 

5.     ansible实时批量执行命令和脚本:

批量执行命令:

ansible -i/etc/ansible/hosts all -m shell -a 'uptime'

ansible -i/etc/ansible/hosts all -m command -a 'uptime'

#shell模块可以使用管道,而command则不可以。

 

批量执行脚本:

ansible all -m script    -a "/root/123.sh"   #此命令是在远程服务器上执行本地的脚本

网上文档说,复杂的命令用playbook管理,我实在不认同,作为运维人员,我写一个脚本多简单,干嘛去花太多时间研究playbook的格式与用法呢?

再说,ansible对于一些安装包的管理,我可以事先做好rpm包,然后使用copy模块分发过去就是,为什么去研究太多的用法?

 

6.     ansible实时批量拷贝文件或目录

ansible-doc copy中的帮助信息得知,ansiblecopy模块是围绕rsync的包装,所以它是增量而不是全量的拷贝。

ansible MachineName   -m copy -a 'src=/etc/fstab dest=/tmp/fstab mode=644 owner=root'  #拷贝文件

ansible MachineName   -m copy -a 'src=/etc/test dest=/root/test mode=755 owner=root '  #此处test为目录

 

7.     ansible定时同步文件

既然ansiblecopy模块是rsync的包装,那我定期执行copy目录的命令,就能完成文件的定时同步了。如果文件变化,就会同步过去,如果没变化,就不会拷贝。以后只要把要同步的文件放到该目录下即可。

 

8.     ansible模块帮助

执行命令用到的那些模块是干嘛的?使用ansible-doc查看帮助吧。

ansible-doc -l       #查看模块列表

ansible-doc  copy    #查看copy模块的详细信息

ansible-doc  script #查看script模块的详细信息

常用的模块有ping,copy,shell,command,script等。更多模块的使用请自行探索吧,我比较懒,满足我的需求后就不想动脑了。

 

9.     ansibleplaybook的使用

其实playbook就是把上述在命令行的操作,以yml格式写在文件中来执行而已。复杂的playbook只是更多的命令行操作的集合。

此例:当某个文件变化后,移走该文件。

#cat  playbook.yml

---

- hosts: local  # hosts中指定

  remote_user: yang  # 如果和当前用户一样,则无需指定

  tasks:

      - name: whoami

        copy: src=~/hosts dest=~/hosts.dest  #  本地拷贝到远端

        notify: # 如果copy执行完之后~/hosts.dest文件发送了变化,则执行

            - clear copy  # 调用handler中的clear copy定义的动作

  handlers:

      - name: clear copy

        shell: 'mv ~/hosts.dest hosts.del'  # 假装删除

 

注解:

tasks定义了playbook中要执行的任务,包括任务名name以及具体的任务内容

notify:类似于Salt的require,表示当前面的任务完成后且有相应的变化时调用后面定义的handler

handlers:与notify结合使用,被调用的handler的具体定义

 

playbook执行方法:

ansible-playbook playbook.yml    #主机名、执行命令都已在yml中指定了。






     本文转自杨云1028 51CTO博客,原文链接http://blog.51cto.com/yangrong/1559020,如需转载请自行联系原作者



相关文章
|
11天前
|
敏捷开发
【sgCreatePinyin】自定义小工具:敏捷开发→自动化生成拼音字段名称(字段名生成工具)
【sgCreatePinyin】自定义小工具:敏捷开发→自动化生成拼音字段名称(字段名生成工具)
|
28天前
|
存储 运维 安全
构建高效自动化运维体系:Ansible与Docker的完美结合
【2月更文挑战第31天】 随着云计算和微服务架构的兴起,自动化运维成为保障系统稳定性和提升部署效率的关键手段。本文将详细探讨如何通过Ansible和Docker的结合来构建一个高效、可靠且易于管理的自动化运维体系。首先,介绍自动化运维的必要性及其在现代IT基础设施中的作用;然后,分别阐述Ansible和Docker的技术特点及优势;最后,提供一个基于Ansible和Docker结合使用的实践案例,以及实施过程中遇到的挑战和解决方案。
|
28天前
|
移动开发 安全 数据安全/隐私保护
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
iOS 全局自动化代码混淆工具!支持 cocoapod 组件代码一并混淆
|
29天前
|
运维 安全 网络安全
构建高效自动化运维体系:Ansible与Docker的完美融合
【2月更文挑战第30天】在当今快速迭代和持续部署的软件发展环境中,自动化运维成为确保效率和稳定性的关键。本文将探讨如何通过结合Ansible和Docker技术,构建一个高效的自动化运维体系。我们将分析Ansible的配置管理功能和Docker容器化的优势,并展示它们如何协同工作以简化部署流程,增强应用的可移植性,并提供一致性的系统环境。此外,文章还将介绍一些最佳实践,帮助读者在真实环境中实现这一整合方案。
|
29天前
|
测试技术
现代软件测试中的自动化工具与挑战
传统软件测试面临着越来越复杂的系统架构和不断增长的测试需求,自动化测试工具应运而生。本文将探讨现代软件测试中自动化工具的应用和挑战,深入分析其优势与局限性,为软件测试领域的发展提供思路和启示。
|
26天前
|
jenkins 测试技术 持续交付
现代软件测试中的自动化工具与挑战
随着软件开发领域的不断发展,自动化测试工具在测试过程中扮演着越来越重要的角色。本文将探讨现代软件测试中自动化工具的应用及面临的挑战,旨在帮助开发人员和测试人员更好地理解和应对自动化测试中的问题。
|
11天前
|
敏捷开发
【sgCreateTableData】自定义小工具:敏捷开发→自动化生成表格数据数组[基于el-table]
【sgCreateTableData】自定义小工具:敏捷开发→自动化生成表格数据数组[基于el-table]
|
18天前
|
Java 测试技术 API
软件测试中的自动化工具与策略
软件测试是确保软件质量的重要环节,而自动化测试工具和策略的应用在提高测试效率和准确性方面发挥着重要作用。本文将介绍几种常见的自动化测试工具,并探讨在软件测试中应用自动化测试的最佳实践和策略。
|
20天前
|
Web App开发 Java 测试技术
深入理解与应用软件自动化测试工具Selenium
随着软件开发的快速发展,软件测试在保证产品质量方面发挥着越来越重要的作用。其中,自动化测试以其效率高、成本低的特点受到了广大开发者的欢迎。本文主要介绍了自动化测试工具Selenium的基本概念、原理以及在实际开发中的应用,旨在帮助读者更好地理解和使用Selenium进行高效的自动化测试。
22 4
|
27天前
|
人工智能 运维 Prometheus
现代运维中的自动化工具与挑战
随着信息技术的不断发展,现代运维工作日益复杂且关键。本文将探讨现代运维中自动化工具的应用与挑战,介绍各类自动化工具在提高效率、降低风险方面的作用,并讨论在实际应用中可能面临的问题与解决方法。
23 4

热门文章

最新文章