设为首页 收藏本站
查看: 988|回复: 0

[经验分享] 自动化运维工具ansible详细介绍

[复制链接]

尚未签到

发表于 2018-7-30 12:51:49 | 显示全部楼层 |阅读模式
  在学习批量管理软件时,首先要明确的知道自己需要什么,网上大神很多,他们都研究到源码上了,写了很多介绍绚丽功能的文档,但其实那些功能基本上我们都用不到,经常被各种文档弄得头脑发晕,此文就是为了简单直白的告诉大家ansible的功能,满足大家的基本需要。
  首先确认批量管理我们需要什么:无外乎主机分组管理、实时批量执行命令或脚本、实时批量分发文件或目录、定时同步文件等。
1.     ansible与saltstack对比
  前一段时间用了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中的帮助信息得知,ansible的copy模块是围绕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定时同步文件
  既然ansible的copy模块是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中指定了。
  <完>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543605-1-1.html 上篇帖子: 运维自动化之ansible playbook一键化解决大量主机bash更新问题 下篇帖子: ansible 测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表