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

[经验分享] 自动化运维工具——ansible

[复制链接]

尚未签到

发表于 2018-7-29 08:28:58 | 显示全部楼层 |阅读模式
前言
  我们先来了解一下近年来大多数公司遇到的运维方面的问题:
  1、硬件选型多样化
  2、系统多版本并存
  3、目录结构混乱
  4、运维人员水平参差不齐
  5、历史遗留问题多
  6、同一软件出现多个版本
  7、无法批量化操作
  8、工作效率低,故障率高
  9、项目上线操作繁琐
  然而理想状态是这样的:
  1、只有少数类型的硬件,便于管理
  2、系统版本统一
  3、目录结构规范
  4、运维工程师水平层次高
  5、无历史包袱
  6、同一软件只有单一版本
  7、同一类操作可自动化批量执行
  8、工作效率高,无大量重复机械化操作
  9、开发自己上线,运维比较轻松
  理想很丰满,现实很骨感啊!!!!!!然而,我们还是要面对现实的,现实中我们要做些什么来更接近与理想呢?
  1、添加监控,收集系统指标
  2、对日志进行归档以及管理
  3、数据备份于恢复
  4、对计划任务进行管理
  5、对软件包进行部署和管理
  6、对脚本进行批量执行
  7、对文件进行批量复制和移动
  8、设置文件或者目录对应的权限
  9、关闭和启动服务
  10、对代码程序进行上下线
  但是,要全部完成以上工作也是很难得呀!所以我们还是回到现实来吧!O(∩_∩)O哈哈~~~
  随着公司的发展,现在就需要更多的服务器去支撑,然而出现了一个摆在眼前的问题——要增加那么多台服务,难道要我们one-by-one的去增加和配置?其实这样也是OK的,但是呢,这是一个灰常笨的操作,然而有没有一个快速、方便、简单地做法呢?当然是有的啦!要不然真的要死啦!那么这个简单的方法是什么呢?他就是——ansible,一个自动化的运维工具。接下来我们就来简单地认识一下他呗?这样我们就可以稍稍达到理想状态啦!

ansible是什么
  ansible是新出现的自动化运维工具,基于Python开发,集 合了众多运维工具(puppet、chef、func、fabric)的优 点,实现了批量系统配置、批量程序部署、批量运行命令等 功能。
  ansible是基于 paramiko 开发的,并且基于模块化工作,本 身没有批量部署的能力。真正具有批量部署的是ansible所 运行的模块,ansible只是提供一种框架。ansible不需要在 远程主机上安装client/agents,因为它们是基于ssh来和远 程主机通讯的。ansible目前已经已经被红帽官方收购,是 自动化运维工具中大家认可度最高的,并且上手容易,学习 简单。是每位运维工程师必须掌握的技能之一。
  补充一下其他的常用的自动化运维工具:

工具
用途
安装系统
Pxe/cobbler
安装系统
虚拟化系统
Kvm/xen/vmware
虚拟机
应用部署
Puppet/ansible/saltstack
中大型规模
命令执行
Ansible/fabric/func/shell
中小型
他到底有什么神通广大的呢
  1.部署简单,只需要在主控端部署ansible 环境,被控端无需做任何操作。
  2.默认使用ssh协议对设备进行管理。
  3.有大量常规运维操作模块,可实现绝大部分操作。
  4.配置简单、功能强大、扩展性强。
  5.支持API及自定义模块,可通过Python轻松扩展。
  6.通过playbooks来定义强大的配置、状态管理。
  7.提供了一个操作性强的web管理界面和RESET API接口——AWX平台。

他的架构组件


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

      ansible 架构图

    ansible的管理方式:
      Ansible系统由控制主机对被管节点的操作方式可分为两类,即ad- hoc和playbook:

  • ad-hoc模式使用单个模块,支持批量执行单条命令。 ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。
  • playbook模式是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作作的配置文件。
    ansible命令的执行过程:
      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的两种安装方式(yum安装和pip程序安装)
      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
      

    接下来它有哪些常用的命令来供我们在工作中方便使用呢
      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命令格式
      ansible < host-pattern >  [-f forks] [-m module_name] [-a args]
      1、Command
      命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在 所有选定的节点上执行。它不会通过shell进行处理,比如$HOME和操作如”小于”<“,”>”, “|”, “;”,”&”‘ 工作(需要使用(shell)模块 实现这些功能)。
      action: command
      chdir # 在执行命令之前,先切换到该目录
      

    [root@node3 tmp]#ansible webtest -m command -a 'chdir=/tmp/ touch 1205'   

      creates # 一个文件名,当这个文件存在,则该命令不执行,可以 用来做判断
      

    [root@node3 tmp]#ansible webtest -m command -a 'creates=/tmp/1205 ls'  
    172.17.254.224 | SUCCESS | rc=0 >>
      
    skipped, since /tmp/1205 exists
      
    172.17.253.210 | SUCCESS | rc=0 >>
      
    skipped, since /tmp/1205 exists
      

      executable # 切换shell来执行命令,需要使用命令的绝对路径
      free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替。
      removes # 一个文件名,这个文件不存在,则该命令不执行,与 creates相反的判断
      

    [root@node3 tmp]#ansible webtest -m command -a 'removes=/tmp/1205 ls'  

      2、Shell
      shell模块在远程主机上调用shell解释器运行命令,支持shell的各种功能, 例如管道等 :
      

    [root@ansiable ~]# ansible webtest -m shell - a ‘cat /etc/passwd |grep “root”’  

      3、Copy:复制文件到远程主机,可以改权限等
      (1)复制文件 -a “src= dest= ”
      (2)给定内容生成文件 -a &quot;content= dest= &quot;
      

    [root@ansiable ~]# ansible webtest -m copy - a ‘content=“hello\nworld”  
    dest=/tmp/test.ansible mode=666’
      

      相关选项如下:
      backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:  yes|no
      content:用于替代“src”,可以直接设定指定文件的值 dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目 录,那么该路径也必须是个目录
      directory_mode:递归设定目录的权限,默认为系统默认权限
      force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如 果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
      others:所有的file模块里的选项都可以在这里使用
      src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果 路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则 只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全 部复制,类似于rsync。
      4、file设置文件属性
      创建目录:-a “path=  state=directory”
      创建链接文件:-a “path=  src=  state=link”
      删除文件:-a “path=  state=absent”
      force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立 的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软 链,有两个选项:yes|no
      group:定义文件/目录的属组 mode:定义文件/目录的权限
      owner:定义文件/目录的属主 path:必选项,定义文件/目录的路径
      recurse:递归设置文件的属性,只对目录有效
      src:被链接的源文件路径,只应用 于state=link的情况
      dest:被链接到的路径,只应用于state=link的情况
      state:
      directory:如果目录不存在,就创建目录
      file:即使文件不存在,也不会被创建
      link:创建软链接
      hard:创建硬链接
      touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在, 则更新其最后修改时间
      absent:删除目录、文件或者取消链接文件
      还有其他几种常见命令的使用,这里就不在一一介绍,大家有兴趣的可以看一下ansible官网。

    ansible还有两个重要的应用——playbook和roles。
      1.playbook
      playbook是ansible用于配置,部署,和管理被控节点的剧本。 通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状 态。 
      playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点 必须要完成。 也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在 Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及 组织计算机处理各种各样的事情。
      playbook的核心元素:

  • Hosts:执行的远程主机列表
  • Tasks:任务,由模块定义的操作的列表;
  • Varniables: 内置变量或自定义变量在playbook中调用
  • Templates:模板,即使用了模板语法的文本文件;
  • Handlers:和nogity结合使用,为条件触发操作,满足条件方才执行,否则不执行;  下面来个实例看看:

  

cd /etc/ansible  
vim nginx.yml
  
- hosts: webtest
  remote_user: root
  tasks:
  - name: install nginx
  yum: name=nginx state=present
  

  - name: copy nginx.conf
  copy: src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf backup=yes

  notify:>  

  - name: start service
  service: name=nginx state=started
  tags: startmysql
  

  handlers:

  - name:>  service: name=nginx state=reloaded
  

  其中主要由一下三个部分组成:
  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是可选的,只是为了便于用户阅读,不过还是建议加上去,模块是必 须的,同时也要给予模块相应的参数。
  2.roles
  对于以上所有的方式有个弊端就是无法实现复用假设在同时 部署Web、db、ha 时或不同服务器组合不同的应用就需要写多个 yml文件,很难实现灵活的调用。
  roles 用于层次性、结构化地组织playbook。roles 能够根 据层次型结构自动装载变量文件、tasks以及handlers等。要使用 roles只需要在playbook中使用include指令即可。简单来讲, roles就是通过分别将变量(vars)、文件(file)、任务(tasks)、模块 (modules)及处理器(handlers)放置于单独的目录中,并可以便捷 地include它们的一种机制。角色一般用于基于主机构建服务的场 景中,但也可以是用于构建守护进程等场景中。
  files/:存储由copy或script等模块调用的文件;
  tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml 进行“包含”调用;
  handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由 main.yml进行“包含”调用;
  vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由 main.yml进行“包含”调用;
  templates/:存储由template模块调用的模板文本;
  meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的 文件需要由main.yml进行“包含”调用;
  default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;

总结
  以上就是本人对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-542799-1-1.html 上篇帖子: Ansible 之 roles使用 下篇帖子: mydumper-0.9.1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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