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

 

AnsibleAnsible核心程序。

HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。

Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。

CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。

CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。

ConnectionPlugins:连接插件,AnsibleHost通信使用

 

 

比较复杂的架构

Ansible介绍_ansible_02

 

 

Ansible的执行流程

 Ansible介绍_ansible_03

简单理解就是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

使用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目录的配置文件

 

5ansible所支持的命令

/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 

2command:在远程主机执行命令:不支持|管道命令

         ansible all -m command -a  'ifconfig'

3Command命令模块接受命令名称,后面是空格分隔的列表参数。

         (1)chdir :   #在执行命令之前,先切换到该目录

         #ansible all -m command -a 'chdir=/tmp ls'

 

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

         #ansible all -m command  -a 'creates=/tmp/test ls'

 

3executable  #切换shell来执行命令,需要使用命令的绝对路径

 

4free_form #要执行的Linux命令,一般使用Ansible-a参数代替

5removes   #一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断(文件存在不执行,不存在才执行)

         #ansible all -m command -a 'removes=/tmp/txt1 ls'

6copy:复制文件到远程主机,可以该权限等

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'

7file设置文件属性:

创建目录: -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 '

8fetch从远程某主机获取文件到本地:

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简介

playbookansible用于配置,部署,和管理被控节点的剧本。

通过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

  Ansible介绍_ansible_04

3.编辑Ansible playbook文件

 

  Ansible介绍_ansible_05

4.测试,安装vsftpd

 

Ansible介绍_ansible_06

 

5、安装nginx

Ansible介绍_ansible_07

 

6、停止并卸载vsftpd服务

Ansible介绍_ansible_08