您的位置:首页 > 其它

Ansible介绍

2017-12-09 20:10 387 查看
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.cfg2、查找对应的主机配置文件,找到要执行的主机或者组3、加载自己对应的模块文件,如command4、通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的5、对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件6、给文件+x执行7、执行并返回结果8、删除临时py文件,sleep 0退出 四、ansible的安装两种安装方式这里提供二种安装方式,任选一种即可1 使用yum 安装yum install epel-release -yyum install ansible –y2 使用pip (python 的包管理模块)安装pip install ansible如果没pip,需先安装pip.yum可直接安装:yum install python-pippip install ansible3.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指向的路径文件(exportANSIBLE_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/profileSrc:在远程拉取的文件,并且必须是一个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' #安装htopansible all -m yum -a 'name=tree state=present' #安装treeansible 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 # 指定默认shellstate # 设置帐号状态,不指定为创建,指定值为absent表示删除system # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户uid # 指定用户的uid 13. group用户组模块,添加或删除组 action :groupgid #设置组的GiD号name= #管理组的名称state #指定组状态,默认为创建,设置值为absent为删除system #设置值为yes,表示为创建系统组 创建为tom的组ansible web -m group -a 'name=tom state=present'14. script在指定节点运行服务端的脚本vim test.sh#/bin/bashtouch /tmp/test.sh.logecho "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 playbookYum install ansible -y1.Vim /etc/ansible/hosts [web] 172.17.250.2 172.17.250.32.ansible all -m ping #测试连通性 Ansible all -m ping

3.编辑Ansible playbook文件

4.测试,安装vsftpd包

5、安装nginx包

6、停止并卸载vsftpd服务
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ansible