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

[经验分享] Ansible介绍

[复制链接]
发表于 2018-7-29 08:00:27 | 显示全部楼层 |阅读模式
  Ansible介绍
  一、简介
  Ansible是基于paramiko开发的,并且基于模块化工作,本身并没有批量部署的能力,真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。Ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。Ansible目前已经被收购是自动化运维工具中大家认可度最高的,并且容易上手,学习简单。是每个运维工程师必须掌握的技能之一。
  二、ansible的特点
  1、 部署简单,只需在主控制端部署Ansible环境,被控端无需做任何操作;
  2、 默认使用SSH协议对设备进行管理;
  3、 有大量常规运维操作模块,可实现日常绝大部分操作。
  4、 配置简单、功能强大、扩展性强;
  5、 支持API及自定义模块,可通过Python轻松扩展;
  6、 通过Playbooks来定制强大的配置、状态管理;
  7、 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
  8、 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
  三、ansible架构图
DSC0000.jpg

  Ansible:Ansible核心程序。
  HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
  Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
  CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
  CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
  ConnectionPlugins:连接插件,Ansible和Host通信使用
  比较复杂的架构
DSC0001.jpg

  Ansible的执行流程
DSC0002.jpg

  简单理解就是Ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。
  Ansiblie命令执行过程
  1、加载自己的配置文件 默认/etc/ansible/ansible.cfg
  2、查找对应的主机配置文件,找到要执行的主机或者组
  3、加载自己对应的模块文件,如command
  4、通过ansible将模块或命令生成对应的临时py文件,并将该文件传
  输至远程服务器的
  5、对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件
  6、给文件+x执行
  7、执行并返回结果
  8、删除临时py文件,sleep 0退出
  四、ansible的安装
  两种安装方式
  这里提供二种安装方式,任选一种即可
  1 使用yum 安装
  yum install epel-release -y
  yum install ansible –y
  2  使用pip (python 的包管理模块)安装
  pip install ansible
  如果没pip,需先安装pip.yum可直接安装:
  yum install python-pip
  pip install ansible
  3.ansible的程序结构
  配置文件目录:/etc/ansible/
  执行文件目录:/usr/bin/
  Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/
  Help文档目录:/usr/share/doc/ansible-X.X.X/
  Man文档目录:/usr/share/man/man1/
  4.ansible配置文件的查找顺序
  (1).检查环境变量ANSIBLE_CONFIG指向的路径文件(export
  ANSIBLE_CONFIG=/etc/ansible.cfg)
  (2).~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件
  (3)./etc/ansible.cfg 检查etc目录的配置文件
  5、ansible所支持的命令
  /usr/bin/ansible # Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
  /usr/bin/ansible-doc # Ansible 模块功能查看工具
  /usr/bin/ansible-galaxy # 下载/上传优秀代码或Roles模块 的官网平台,基于网络的
  /usr/bin/ansible-playbook # Ansible 定制自动化的任务集编排工具
  /usr/bin/ansible-pull # Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
  /usr/bin/ansible-vault # Ansible 文件加密工具
  /usr/bin/ansible-console # Ansible基于Linux Consoble界面可与用户交互的命令执行工具
  五、Ansible的命令选项
  1、#absible all -m ping执行效果如下:
  ansible  all  -m  ping
  2、command:在远程主机执行命令:不支持|管道命令
  ansible all -m command -a  'ifconfig'
  3、Command命令模块接受命令名称,后面是空格分隔的列表参数。
  (1)chdir :   #在执行命令之前,先切换到该目录
  #ansible all -m command -a 'chdir=/tmp ls'
  (2)creates: #一个文件名。当这个文件存在,则该命令不执行,可以用来做判断
  #ansible all -m command  -a 'creates=/tmp/test ls'
  (3)executable  #切换shell来执行命令,需要使用命令的绝对路径
  4、free_form: #要执行的Linux命令,一般使用Ansible的-a参数代替
  5、removes :  #一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断(文件存在不执行,不存在才执行)
  #ansible all -m command -a 'removes=/tmp/txt1 ls'
  6、copy:复制文件到远程主机,可以该权限等
  (1)复制文件
  -a  "src=   dest= "
  #ansible all -m copy -a 'src=/tmp/1  dest=/tmp/'
  (2)给定内容生成文件
  -a  "content= (给文件添加的内容)  dest= (生成的文件名)"
  #ansible all -m copy -a 'content="hello\n" dest=/tmp/test2 mode=777'
  7、file设置文件属性:
  创建目录: -a "path=  state=directory"
  创建链接文件:-a "path=(目录加新文件名字)   src=(旧文件)   state=link"
  删除文件:-a "path=    state=absent"
  ansible webservers  -m  file -a  'path=/tmp/test  state=directory'
  ansible all -m file -a 'path=/tmp/test-hard3src=test state=link '
  8、fetch从远程某主机获取文件到本地:
  dest:用来存取文件的目录,例如存放目录为backup,源文件名称为/etc/profile,在主机
  pythonserver中,那么保存为/backup/pythonserver/profile
  Src:在远程拉取的文件,并且必须是一个file,不能是目录
  ansible webserver -m fetch -a 'src=/var/log/messages  dest=/root'
  #从远程主机拉取目录到本地
  9、 cron 管理cron计划任务
  10、             yum安装软件
  ansible  webservers  -m yum -a 'name=htop state=present'  #安装htop
  ansible all -m yum -a 'name=tree state=present'    #安装tree
  ansible all -m command -a 'tree'   #查看是否有tree这个包
  11.service:服务程序管理
  arguents    #命令行提供额外的参数
  enabled       #设置开机启动
  name=       #开机启动的级别,一般不用指定
  sleep    #started启动服务,stopped停止服务=,restarted重启服务,reloaded重载配置
  12. usr模块管理
  comment     #用户的描述信息
  createhome   #是否创建家目录
  force      #在使用state=absent是,行为与userdel  -force一致
  group             #指定基本组
  groups # 指定附加组,如果指定为(groups=)表示删除所有组
  home # 指定用户家目录
  move_home # 如果设置为home=时, 试图将用户主目录移动到指定的目录
  name # 指定用户名
  non_unique # 该选项允许改变非唯一的用户ID值
  password # 指定用户密码
  remove # 在使用state=absent时, 行为是与userdel –remove一致
  shell # 指定默认shell
  state # 设置帐号状态,不指定为创建,指定值为absent表示删除
  system # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
  uid # 指定用户的uid
  13. group用户组模块,添加或删除组
  action :group
  gid               #设置组的GiD号
  name=                #管理组的名称
  state           #指定组状态,默认为创建,设置值为absent为删除
  system                #设置值为yes,表示为创建系统组
  创建为tom的组
  ansible  web  -m  group  -a  'name=tom   state=present'
  14. script在指定节点运行服务端的脚本
  vim  test.sh
  #/bin/bash
  touch  /tmp/test.sh.log
  echo "hello" >> /tmp/test.sh.log
  #将date命令结果输出到/root/test.sh.log
  15. setup模块
  facts组件是Ansible用来采集被管机器设备信息的一个功能,我们可以使用setup模块查看机器的所有facts信息,可以使用filter来查看指定信息,整个facts信息被包裹在一个JSON格式的数据结构中,absible_facts是最上层的值facts就是变量,内建变量。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中,调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息在做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件
  #ansible 10.212.52.252 -m setup -a 'filter=ansible_*_mb' //查看主机内存信息
  #ansible 10.212.52.252 -m setup -a 'filter=ansible_eth[0-2]' //查看地接口为eth0-2网卡信息
  六、配置实例
  Ansible playbook简介
  playbook是ansible用于配置,部署,和管理被控节点的剧本。
  通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状
  态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点
  必须要完成。
  也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在
  Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及
  组织计算机处理各种各样的事情。
  在mysql.yml中,主要由三个部分组成。
  hosts部分:使用hosts指示使用哪个主机或主机组来运行下面的tasks,每个playbook都必须指定hosts,
  hosts也可以使用通配符格式。主机或主机组在inventory清单中指定,可以使用系统默认的
  /etc/ansible/hosts,也可以自己编辑,在运行的时候加上-i选项,指定清单的位置即可。在运行清单文件的
  时候,–list-hosts选项会显示那些主机将会参与执行task的过程中。
  remote_user:指定远端主机中的哪个用户来登录远端系统,在远端系统执行task的用户,可以任意指定,也
  可以使用sudo,但是用户必须要有执行相应task的权限。
  tasks:指定远端主机将要执行的一系列动作。tasks的核心为ansible的模块,前面已经提到模块的用法。
  tasks包含name和要执行的模块,name是可选的,只是为了便于用户阅读,不过还是建议加上去,模块是必
  须的,同时也要给予模块相应的参数。
  配置Ansible playbook
  Yum install  ansible  -y
  1.Vim /etc/ansible/hosts
  [web]
  172.17.250.2
  172.17.250.3
  2.ansible all  -m  ping   #测试连通性
  Ansible  all   -m   ping
DSC0003.jpg

  3.编辑Ansible playbook文件
DSC0004.jpg

  4.测试,安装vsftpd包
DSC0005.jpg

  5、安装nginx包
DSC0006.jpg

  6、停止并卸载vsftpd服务
DSC0007.jpg

运维网声明 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-542779-1-1.html 上篇帖子: 自动化运维ansible的介绍 下篇帖子: ansible的几个常用模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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