违法℃玩家 发表于 2018-7-29 08:00:27

Ansible介绍

  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架构图

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

  Ansible的执行流程

  简单理解就是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执行效果如下:
  ansibleall-mping
  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/1dest=/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-mfile -a'path=/tmp/teststate=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/messagesdest=/root'
  #从远程主机拉取目录到本地
  9、 cron 管理cron计划任务
  10、             yum安装软件
  ansiblewebservers-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的组
  ansibleweb-mgroup-a'name=tom   state=present'
  14. script在指定节点运行服务端的脚本
  vimtest.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' //查看地接口为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 installansible-y
  1.Vim /etc/ansible/hosts
  
  172.17.250.2
  172.17.250.3
  2.ansible all-mping   #测试连通性
  Ansibleall   -m   ping

  3.编辑Ansible playbook文件

  4.测试,安装vsftpd包

  5、安装nginx包

  6、停止并卸载vsftpd服务
页: [1]
查看完整版本: Ansible介绍