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

[经验分享] 关于ansible的学习和使用--1

[复制链接]

尚未签到

发表于 2015-11-25 15:49:09 | 显示全部楼层 |阅读模式
  
  运维工作中总需要批量的对服务器进行管理,配置和一些命令的批量执行的操作。ansible恰恰是一款可以很好的帮助我们完成这些工作的软件,下面就来看看ansible是如果帮助我们很好的管理我们的服务器以及批量的在远程进行命令的吧。

  

  安装:

  环境:fedora,glibc版本>=2.15,所以centos不适合,glibc会影响到ansible-playbook的执行
          安装源:epel
  安装过程:yum install -y ansible

  安装目录:配置文件所在目录:/etc/ansible:ansible.cfg,hosts

  二进制文件所在目录:/usr/bin:ansible,ansible-playbook,ansible-doc...
  

  配置:

  ansible的主配置文件是/etc/ansible.cfg,里面的参数具体还没研究过,不过不太影响正常的使用。所以之后会做研究。

  hosts文件是ansible的一个很重要的文件。可以看做ansible的资产管理和统计的一个文件。该文件里面的对所有的机器按照固定的格式进行了分类。例如:

  
  [webservers]
  alpha.example.org
  beta.example.org
  192.168.1.100
  192.168.1.110
  

  [dbservers]
  db01.intranet.mydomain.net
  db02.intranet.mydomain.net
  10.25.1.56
  10.25.1.57
  当主机是以主机名的形式给出的时候server要能够正确的解释此主机名。分组的主机还支持匹配的形式:

[webservers]
[a-z].example.org
example.[org|com]
192.168.1.*
192.168.2.[22-55]


  使用:

  下面就来使用下,让ansible工作起来吧.
  ansible主机:fedora  
  测试机:192.168.1.100
  首先要让两台机器之间可以无密码登陆:在fedora上通过ssh-keygen生成密钥和公钥。将这个公钥拷贝到测试机上,然后cat id_rsa.pub >> /root/.ssh/authorized_keys,添加信任。
  然后在fedora的/etc/hosts上添加一个分组,将测试机添加进去:
  [TEST]
  192.168.1.1001
  在确保两台机器的ssh端口都打开防火墙和selinux都关闭的情况下,就可以测试啦。
  测试命令:
  ansible TEST -m command -a uptime
DSC0000.jpg
  

  这就是一个简单的ansible的命令的使用。

  

  

  模块:
  ansible的工作很大程度上是依赖模块的工作。一个好的合适的模块可以帮我们省去很多的事情。在命令中用-m来指定模块名称,eg:

  ansible TEST -m copy src=/home/1.sh dest=/home/ (-m指定copy模块,后面则是这个模块的用法:src指本地被拷贝的文件路径,dest指拷贝到远程机器上的路径)
  每个模块的用法都有所不同,所带的参数也有所不同。后续我也会多了解一些常用模块的用法,以及根据实际需求来自己编写模块。

  

  
  playbook:
  ansible的playbook(剧本)应该算是ansible的精华了,它可以将多个任务放在一起,然后执行这个playbook之后会使得机器达到我们预期的状态。在这里,我们需要转变思维。不是我们通过运行playbook来批量执行命令;而是我们通过运行playbook使得服务器达到一种状态。playbook成功执行的标志是服务器达到了一种状态,例如我们执行如下的playbook:
  ---
  # This playbook contains common plays that will be run on all nodes.
  

  - name: Install ntp
  yum: name=ntp state=present
  tags: ntp
  

  - name: Configure ntp file
  template: src=ntp.conf.j2 dest=/etc/ntp.conf
  tags: ntp
  notify: restart ntp
  

  - name: Start the ntp service
  service: name=ntpd state=started enabled=true
  tags: ntp
  

  - name: test to see if selinux is running
  command: getenforce
  register: sestatus
  changed_when: false
  

  执行之后服务器的状态就是安装了ntp的时间同步服务而且完成了时间同步,关闭了selinux服务。这个playbook就是为了使服务器达到这样的状态,所以它重复多次执行也不会造成其他的影响。

  playbook的格式是YAML的语法形式,它是一种.yml结尾的文件。关于YAML的语法还需要去进一步深入,ansible的官网上也给出了YAML的语法知识(http://docs.ansible.com/YAMLSyntax.html)。它对tab符号和空格特别敏感。要避免使用tab符,之前编写的时候习惯的用tab,结果运行就一直报语法错误。

  

  

  一个项目的组成结构:
  要完成对一个或者一批服务器的配置,仅仅的使用一堆的命令或者堆砌playbook显然不是一个好方法。这里就要引入角色的概念了。角色roles,它表示服务器在集群中会扮演某一个角色,一个服务器可能会扮演很多角色,比如它可以是web服务器,也可以是数据库服务器。通过playbook来帮助服务器完成某一个角色。

  下面通过一个例子来介绍如何完成一个部署任务。有两台服务器,web1,web2,他们分别被部署成webserver和dbserver,当然,他们也有相同的软件需要部署和配置。先来看看如何用ansible来规划这个部署任务:
DSC0001.jpg     其中蓝色方框代表目录,实线箭头指向目录下一层。黄色的圆形代表文件;绿色的圆形代表和var,roles为同一级目录的文件。虚线表示文件或目录的名称在文件中的定义。
  从这样一个组织结构可以看出site.yml是主要的playbook,里面指定了哪些服务器扮演哪些角色。hosts则是资产管理中心,它对服务器进行分组管理。roles目录下包含了三种角色的目录;每个角色的目录中都包含了成为这个角色需要完成的任务的playbook和模板配置文件(db,web和common的目录结构是一样的所以这里只给出common的)。vars目录下存放的是不同分组的变量文件,这里的变量是全局的。

  这样,执行ansible-playbook -i hosts site.yml就可以开始部署了。

  

  

  
  

  关于ansible也是初次接触,还有很多用法都不熟悉。还有以下目标需要完成:
  1.利用ansible完成部署项目

  2.ansible官网使用文档的阅读,了解ansible更高级的用法

  3.ansible自带模块的熟悉以及学会根据需求编写模块

  

  

运维网声明 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-143544-1-1.html 上篇帖子: ansible自动化运维工具的安装与使用 下篇帖子: python2.7使用ansible
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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