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

[经验分享] Ansible:自动化工具

[复制链接]

尚未签到

发表于 2018-7-31 06:01:53 | 显示全部楼层 |阅读模式
  1 概述
  1. 关于Ansible
  Ansible是一个IT自动化工具,它能够配置系统、部署软件以及持续性部署、零宕机滚动升级等高阶的IT任务,是系统运维员、开发人员、IT管理者的自动化解决方案的不二选择。
  Ansible的特性之一是agentless,即不需要在受控机器上安装任何的客户端软件,而是通过使用SSH来进行通信和命令执行等。这样避免了额外开放端口(只使用SSH的22端口),提高了安全性,并且避免了“管理管理软件”的自动化配置管理软件的硬伤(如saltstack、puppet等)以及再利用了CPU循环。
  2. 与salt的区别
  与Salt强大的自动化管理和命令执行功能类似,Ansible也具有这些功能。但不同于Salt的master/minion的管理方式,Ansible基于非常安全的OpenSSH来管理受控端和进行通信、推送命令等,是一种无客户端的管理方式,从而避免了对其本身的管理,简化了自动化配置管理的执行过程。
  执行速度方面,由于Salt是使用0mq来作为其消息传递机制,其速度非常的快,而Ansible默认是依赖SSH作为传输层,其速度要慢于Salt。不过Ansible也支持所谓的Fireball Mode,Fireball Mode使用SSH来自启动一个短暂的0mq守护进程(ephemeral 0mq daemon),其速度几乎与Salt无异。
  安全性方面,由于0mq天生不支持加密,所以Salt使用自己的AES加密技术来保护有效载荷,然而在其最近的代码中发现了一个缺陷,这个缺陷会导致一些安全问题。Ansible由于使用安全的OpenSSH,其安全性得到有效的保证。考虑到Fireball Mode,Ansible的0mq AES加密的实现是通过keyczar而不是一个本地的解决方案,默认是不使能的,而且其连接由于是瞬时的,也提高了其安全性。
  2 安装配置
  1. 安装
  Ansible是基于Python开发的,可以直接使用easy_install/pip来安装:
  easy_install ansible
  或者:
  pip install ansible
  由于Ansible也会需要使用到以下模块,所以一并安装:
  pip install paramiko PyYAML jinja2 httplib2
  其中Ansible的playbook是YAML格式,所以需要PyYAML的支持。
  Ansible的代码也会托管在github上,所以也可以直接从Git资源库中克隆镜像到本地来安装使用
  git clone git://github.com/ansible/ansible.git
  cd ./ansible
  source ./hacking/env-setup
  对于特定的Linux发行版本,可以使用rpm(yum)或者dpkg(apt-get)等软件来安装:
  yum install ansible        #RHEL/CentOS/Fedora,需要配置好EPEL
  apt-get install ansible    #Debian/Ubuntu/LinuxMint
  emerge -avt ansible        #Gentoo/Funtoo
  ps:

  •   受控端需要安装Python 2.4及以上版本,如果低于2.5,需要安装python-simplejson
  •   远程受控机器上使能了SELinux的,在使用copy/file/template等相关的函数前,需要安装libselinux-python模块。如果是使用yum等软件来安装的Ansible就不需要上述操作
  2. 配置
  SSH authorized_keys文件:Ansible主机和各个受控端之间由于是通过SSH进行通信,为避免频繁的输入密码,可事先打通无密码SSH登录,将认证写入到主机的authorized_keys文件中
  ansible.cfg文件:Ansible会执行以下的顺序来查找其配置文件:
  ANSIBLE_CONFIG    环境变量指定的位置
  ansible.cfg    当前目录下
  .ansible.cfg    用户家目录下
  /etc/ansible/ansible.cfg
  Inventory文件:Inventory文件用来定义要管理的主机,默认保存为/etc/ansible/hosts,如果不存在,需要手动创建。格式为ini格式,hosts文件采用分组模式,分组也可以嵌套使用:
  [local]
  localhost
  [vnode]
  vm1
  vm2
  vm3
  vm4
  分组嵌套:
  [vnode:CentOS]
  vm1
  vm2
  [vnode:Ubuntu]
  vm3
  vm4
  通过数字和字母模式来指定一系列连续主机:
  [1:3].sysu        #等价于1.sysu,2.sysu,3.sysu
  [a:c].sysu        #a.sysu,b.sysu,c.sysu
  3. 验证使用
  Ansible使用/usr/bin/ansible来执行一些命令,验证Ansible是否能正常工作:
  ansible all -m ping -u root
  vm1 | success >> {
  "changed": false,
  "ping": "pong"
  }
  localhost | success >> {
  "changed": false,
  "ping": "pong"
  }
  vm2 | success >> {
  "changed": false,
  "ping": "pong"
  }
  .......
  4. 使用Ad-Hoc执行简单任务
  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密码
  查看远端机器vm1的uptime:
  vm1 | success | rc=0 >>
  10:54:25 up  1:07,  1 user,  load average: 0.00, 0.00, 0.00
  Ansible的更多模块可以查看以下文档:modules
  5. 使用playbook管理复杂任务
  类似于Salt的状态管理(sls),Ansible通过playbook来定义一个脚本或者配置文件,通过这个YAML格式的文件,Ansible可以执行需反复执行、较为复杂的任务。
  playbook是Ansible真正强大的地方,是Ansible的配置、部署、流程化语言,它允许使用变量、条件、循环以及模板,也能通过角色以及包含指令来重用既有内容。
  示例:cat playbook.yml
  ---
  - hosts: vnode        #hosts中定义的主机
  remote_user: root    #远程执行的用户,如果和当前用户一致,则无需指定
  tasks:
  - name: whoami
  copy:src=~/hosts dest=~/hosts.deny
  notify:
  - clear copy
  handlers:
  - name:clear copy
  shell:'mv ~/hosts.dest hosts.del'        #假装删除
  注解:

  •   tasks定义了playbook中要执行的任务,包括任务名name以及具体的任务内容
  •   notify:类似于Salt的require,表示当前面的任务完成后且有相应的变化时调用后面定义的handler
  •   handlers:与notify结合使用,被调用的handler的具体定义
  Include
  Ansible通过playbook的定义来管理一系列的复杂任务,当工作越来越复杂时,将会产生大量的YAML文件。通过include语句,Ansible能够重用这些文件,并在这些文件中形成一定的组织关系。类似于c等语言的include声明语句,ansible的include语句能够在某个task中包含另外的yml文件,从而达到复用的效果,简化了Playbook的结构。
  示例:cat tasks/foo.yml
  - name: placeholder foo
  command: /bin/foo
  通过include将上述yml包含在bar.yml中:
  tasks:
  - include:tasks/foo.yml
  include也可以被使用在handlers部分,比如要定义如何重启apache服务:
  cat handlers/handlers.yml
  - name:restart apache
  service:name=apache state=restarted
  在主playbook文件的底部添加以下语句来包含上述的handlers:
  handlers:
  - include:handlers/handlers.yml
  Roles:
  Ansible通过Roles来更加高效的组织Playbook。通过角色定义,Roles能够实现自动加载某些vars_files,tasks,handlers,而且能够非常简单的实现在不同用户间的群组内容的共享。
  Ansible主要是通过一个inventory来定义role和主机之间的匹配,通过一个ini风格的配置文件来管理所有的主机,通过一个
group_vars下与主机组同名的文件来管理变量,或者host_vars下与主机同名的文件来管理变量(和pillar类似),然后按照固定的目录
结构在角色名目录下创建好files, handlers, tasks, templates,
vars(角色级别的变量)等目录;最后通过ansible命令再跟一系列的参数指定好inventory, playbooks,
user等来触发对所有主机的配置。
  通过Roles组织起来的Ansible项目结构示例:
site.yml  
webservers.yml
  
fooservers.yml
  
roles/
  
   common/
  
     files/
  
     templates/
  
     tasks/
  
     handlers/
  
     vars/
  
     meta/
  
   webservers/
  
     files/
  
     templates/
  
     tasks/
  
     handlers/
  
     vars/
  
     meta/
  playbook中表示为:
---  
- hosts: webservers
  
  roles:
  
     - common
  
     - webservers
  更多详细细节可参考官方文档:Roles and Include statements
  ——游响云停

运维网声明 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-543740-1-1.html 上篇帖子: Ansible部署及使用 下篇帖子: ansible(一)安装篇
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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