一、Ansible简介:
Ansible是一个基于Python开发的开源自动化工具,实现了批量运行命令、批量部署程序、批量配置系统等功能。默认通过SSH协议(也可使用其它协议)进行远程命令执行或下发配置,无需部署任何客户端代理软件(agentless)在被管控主机上,并可同时支持多台主机并行管理。Ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。Ansible 2.7帮助文档:https://docs.ansible.com/ansible/latest/index.html
Ansible特性:
Ø 模块化:调用特定模块完成特定任务;
Ø 基于Python语言实现,依赖paramiko、PyYAML、Jinja2、httplib2、simplejson、pycrypto等模块
Ø 部署简单:agentless,无需在被管控主机中安装任何软件,而是通过一些标准的协议,如:SSH;
Ø 支持自定义模块;
Ø 支持playbook;
Ø 幂等性:Ansible是以“结果为导向的”,如果指定了一个“目标状态”,ansible会自动判断,“当前状态”是否与“目标状态”一致,如果一致,则不进行任何操作,如果不一致,那么就将“当前状态”变成“目标状态”,这就是幂等性,幂等性可以保证重复执行同一项操作时,得到的结果是一样的。
Ansible架构图:
从上图可以了解到其由以下部分组成:
Ø 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
(2)生成密钥对,基于密钥认证:# ssh-keygen -t rsa -P ""
(3)复制公钥至所有被管控主机:
# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
3、Ansible主机安装epel源和ansible:# yum -y install epel-release # yum -y install ansible
备注:CentOS 7.6中yum安装的ansible版本为2.7.10,python版本为2.7.5
4、常用配置文件:
Ø /etc/ansible/ansible.cfg:主配置文件,配置ansible工作特性
Ø /etc/ansible/hosts:定义被管控主机主机清单的配置文件
Ø /etc/ansible/roles:存放角色的目录
5、常用命令集:
Ø /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 Console界面与用户交互的命令执行工具
6、Ansible主机配置被管控主机的主机清单文件:
# vim /etc/ansible/hosts,末尾新增如下代码:
[websrvs]
192.168.1.144
192.168.1.220
[dbsrvs]
192.168.1.144
备注:
Ø websrvs和dbsrvs表示主机组名
Ø 主机可以使用域名、主机名、IP地址表示,使用前两者时,也需要主机能反解析到相应的IP地址
7、Ansible主机对被管控主机的操作方式说明:
(1)ad-hoc模式(点对点模式):使用单个模块,支持批量执行单条命令。ad-hoc命令是一种可以快速输入的命令,而且不需要保存的命令。
(2)playbook模式(剧本模式):Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。
8、ad-hoc临时命令执行工具ansible的使用格式:# ansible
(1)
Ø 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