一、Ansible简介:

Ansible是一个基于Python开发的开源自动化工具,实现了批量运行命令、批量部署程序、批量配置系统等功能。默认通过SSH协议(也可使用其它协议)进行远程命令执行或下发配置,无需部署任何客户端代理软件(agentless)在被管控主机上,并可同时支持多台主机并行管理。Ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。Ansible 2.7帮助文档:https://docs.ansible.com/ansible/latest/index.html


Ansible特性:

Ø  模块化:调用特定模块完成特定任务;

Ø  基于Python语言实现,依赖paramikoPyYAMLJinja2httplib2simplejsonpycrypto等模块

Ø  部署简单:agentless,无需在被管控主机中安装任何软件,而是通过一些标准的协议,如:SSH

Ø  支持自定义模块;

Ø  支持playbook

Ø  幂等性:Ansible是以“结果为导向的”,如果指定了一个“目标状态”,ansible会自动判断,“当前状态”是否与“目标状态”一致,如果一致,则不进行任何操作,如果不一致,那么就将“当前状态”变成“目标状态”,这就是幂等性,幂等性可以保证重复执行同一项操作时,得到的结果是一样的。


Ansible架构图:

image.png

从上图可以了解到其由以下部分组成:

Ø  Host Inventory:主机清单,定义Ansible管理的远程主机,默认是在Ansible hosts配置文件中定义

Ø  Ansible:核心程序

Ø  Connection Plugins:连接插件,用于和被管理主机实现通信,除支持使用SSH连接被管理主机外,Ansible还支持其它的连接方式

Ø  Playbooks:剧本,集中定义Ansible任务的配置文件,即将多个任务定义在一个剧本中Ansible自动执行,可以由控制主机针对多台被管理主机同时运行多个任务

Ø  Core Modules:核心模块,Ansible自带模块,使用这些模块将资源分发至被管理主机,使其执行特定任务或匹配特定状态

Ø  Custom Modules:自定义模块,用于扩展核心模块功能,支持多种语言

Ø  Plugins:插件,可借助相关插件完成记录日志、发送邮件等功能

 

二、Ansible安装、常用配置文件、常用命令集及命令选项介绍:

1、演示环境:

IP

操作系统

主机名

服务器角色

192.168.1.143

CentOS   7.6 x86_64

143

Ansible主机

192.168.1.144

CentOS   7.6 x86_64

144

被管控主机

192.168.1.220

CentOS   6.10 x86_64

220

被管控主机

2、Ansible主机安装前准备工作:

(1)配置/etc/hosts# tail -3 /etc/hosts

image.png

(2)生成密钥对,基于密钥认证:# ssh-keygen -t rsa -P ""

image.png

(3)复制公钥至所有被管控主机:

# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.144

image.png

# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.220

image.png

3、Ansible主机安装epel源和ansible# yum -y install epel-release  # yum -y install ansible

备注:CentOS 7.6yum安装的ansible版本为2.7.10python版本为2.7.5

4、常用配置文件:

Ø  /etc/ansible/ansible.cfg:主配置文件,配置ansible工作特性

Ø  /etc/ansible/hosts:定义被管控主机主机清单的配置文件

Ø  /etc/ansible/roles:存放角色的目录

5、常用命令集:

Ø  /usr/bin/ansibleAnsibe ad-hoc临时命令执行工具

Ø  /usr/bin/ansible-docAnsible模块功能查看工具

Ø  /usr/bin/ansible-galaxy:下载/上传优秀代码或Roles模块至官网平台

Ø  /usr/bin/ansible-playbookAnsible定制自动化的任务集编排工具

Ø  /usr/bin/ansible-pullAnsible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)

Ø  /usr/bin/ansible-vaultAnsible文件加密工具

Ø  /usr/bin/ansible-consoleAnsible基于Linux Console界面与用户交互的命令执行工具

6、Ansible主机配置被管控主机的主机清单文件:

# vim /etc/ansible/hosts,末尾新增如下代码:

[websrvs]

192.168.1.144

192.168.1.220

[dbsrvs]

192.168.1.144

备注:

Ø  websrvsdbsrvs表示主机组名

Ø  主机可以使用域名、主机名、IP地址表示,使用前两者时,也需要主机能反解析到相应的IP地址

7、Ansible主机对被管控主机的操作方式说明:

(1)ad-hoc模式(点对点模式):使用单个模块,支持批量执行单条命令。ad-hoc命令是一种可以快速输入的命令,而且不需要保存的命令。

(2)playbook模式(剧本模式):Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。

8、ad-hoc临时命令执行工具ansible的使用格式:# ansible <host-pattern> [options]

(1)<host-pattern>:在/etc/ansible/hosts中定义的被管控主机IP地址或域名的列表

Ø  all*表示匹配所有主机,?表示匹配单个字符

Ø  *?使用时必须要加'',如:# ansible '*' -m ping# ansible '192.168.1.22?' -m ping

Ø  'websrvs:dbsrvs'表示目标主机在websrvs组或dbsrvs组中,2个组中所有的主机

Ø  'websrvs:&dbsrvs'表示目标主机同时在websrvs组和dbsrvs组中

Ø  'websrvs:!dbsrvs'表示目标主机在websrvs组,但不在dbsrvs组中

Ø  192.168.1.*表示匹配192.168.1网段的所有目标主机

(2)[options]

Ø  -m MODULE_NAME:执行的模块名称,可通过命令“# ansible-doc -l | less”查看目前已安装的所有模块,不指定模块时,默认使用的是command模块,在配置文件/etc/ansible/ansible.cfg的“#module_name = command”中定义

Ø  -a MODULE_ARGS:模块参数,通常为key=value的格式,可通过命令“# ansible-doc -s 模块名”查看具体的用法及详细参数

Ø  --syntax-check:对playbook执行语法检查,并不真正执行

Ø  -C:尝试预测可能发生的一些变化,并不真正执行

Ø  --list-hosts:列出匹配的远程主机列表,并不执行任何其它操作

Ø  -f FORKS:指定一次批量管控多少台主机,默认一批管控5台主机

Ø  -u REMOTE_USER:以哪个用户连接远程主机,默认为None

Ø  -T TIMEOUT:连接远程主机的超时时长,默认10

Ø  --version:查看ansible主配置文件、ansible配置的模块搜索路径、ansible python模块位置、可执行程序位置和python版本信息

Ø  -h:显示帮助信息

9、ansible-doc命令常用选项:

Ø  -l:列出所有已安装的模块

Ø  -s:显示指定模块的用法

Ø  -h:显示帮助信息

备注:Ansible所有支持的模块,https://docs.ansible.com/ansible/latest/modules/modules_by_category.html